- 浏览: 461482 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (146)
- Maven (3)
- Quartz (10)
- Hessian (3)
- JDK (42)
- eclipse (4)
- 设计思想 (6)
- XML (8)
- JavaMail (1)
- Spring (11)
- mina (1)
- HsqlDb (1)
- Cache (2)
- Tool (6)
- 心情 (5)
- JQuery (0)
- Hadoop (5)
- Hbase (3)
- 自动构建 (7)
- JNDI (0)
- 代码赏析 (5)
- Oracle (1)
- Excel (4)
- Effective Java (5)
- JAXB (4)
- fdafasdf (1)
- ccc (0)
- web (3)
- concurrent (1)
- CVS (1)
- eclipse plugin (2)
- Apache (10)
最新评论
-
chxiaowu:
nice!
Quartz实现固定执行次数 -
zxjlwt:
学习了。http://surenpi.com
自定义ClassLoader -
kadlly:
public static final Logger log ...
Hessian 权限认证 -
spring_springmvc:
java程序语言学习教程 地址http://www.zuida ...
Java-Final -
liushuiwuyan:
[img][/img]
设计模式-单例
今天有人问我,Java的对象或者类型修改用Final.
Java中的final关键字通常的指的是“这是无法改变的”。它可能被做为三种的修饰词.------数据,方法,类。
一 final数据
1.在修饰基本类型时,表示它是一个常量,在定义时必须给予赋值.
特别的一个既是static又是final 的字段只占据一段不能改变的存储空间。
2.在修饰对象或者数组时,它表示对对象或数组的引用恒定不变,然而对象本身却是可以修改的.
空白final:声明为final但末给定初值的字段,但必须确保空白final在使用前被初始化,一般在构造方法完成。
final参数:在方法的参数列表以声明的方式将参数指明为final,这意味着在方法里无法修改参数的引用所指向的对象。
二 final方法
1. 把方法锁定,使得在子类(导出类)中不能修改它的含义。
2.效率,一个final方法被调用时会转为内嵌调用,不会使用常规的压栈方式,使得运行效率较高,尤其是在方法体较简单的情况下,
但也并不绝对。(与C++中的inline关键字类似)
特别的:类中的所有private方法都隐式地指定为是final,所以在继承关系中不存在覆盖问题。
三 final类
声明为final的类不能派生出了子类,也就是不能被继承,一个final类中的所有方法都隐式地指定为final.
可能有人会问了,你说不能改变,你说只占据一段存储空间,你懂JVM的编译规则吗?
首先举下Final数据的例子.
Javac MyClass
大家看以上的编程Class文件,通过JVM指令解析,一般操作步骤是,先声名变量 int aa,int b.然后再把常数也压到栈中,最后赋值的过程。
大家看到final修改的变量不需要赋值[一个既是static又是final 的字段只占据一段不能改变的存储空间]
(声名为静态的是类变量,其访问速度会快(少了一个赋值过程),也就是固定的内存地址,用final修改就是不可改变的存储空间)
用final修改意为不可改为,这意味着在方法里无法修改参数的引用所指向的对象。[引用恒定不变 ,对象本身可以修改]
我上节介绍了设计模式之单例模式,其中Spring用到了两个synchronized (this.startupShutdownMonitor) synchronized (this.singletonObjects)
其中两个对象都是final类型的[Spring的锁对象一般都是Final的,不可改变的,也就保证了其原子性]。
Java中的final关键字通常的指的是“这是无法改变的”。它可能被做为三种的修饰词.------数据,方法,类。
一 final数据
1.在修饰基本类型时,表示它是一个常量,在定义时必须给予赋值.
特别的一个既是static又是final 的字段只占据一段不能改变的存储空间。
2.在修饰对象或者数组时,它表示对对象或数组的引用恒定不变,然而对象本身却是可以修改的.
空白final:声明为final但末给定初值的字段,但必须确保空白final在使用前被初始化,一般在构造方法完成。
final参数:在方法的参数列表以声明的方式将参数指明为final,这意味着在方法里无法修改参数的引用所指向的对象。
二 final方法
1. 把方法锁定,使得在子类(导出类)中不能修改它的含义。
2.效率,一个final方法被调用时会转为内嵌调用,不会使用常规的压栈方式,使得运行效率较高,尤其是在方法体较简单的情况下,
但也并不绝对。(与C++中的inline关键字类似)
特别的:类中的所有private方法都隐式地指定为是final,所以在继承关系中不存在覆盖问题。
三 final类
声明为final的类不能派生出了子类,也就是不能被继承,一个final类中的所有方法都隐式地指定为final.
可能有人会问了,你说不能改变,你说只占据一段存储空间,你懂JVM的编译规则吗?
首先举下Final数据的例子.
public class MyClass { private static final int aa=1; int b=3; public int add(int a,int b){ return a+b; } }
Javac MyClass
public class com.tag2.jvm.MyClass { // Field descriptor #6 I private static final int aa = 1; // Field descriptor #6 I int b; // Method descriptor #11 ()V // Stack: 2, Locals: 1 public MyClass(); 0 aload_0 [this] //0:变量到操作数栈 1 invokespecial java.lang.Object() [13] //1:调用需要特殊处理的实例方法:invokespecial 4 aload_0 [this] //4:变量到操作数栈 5 iconst_3 //5:常数到操作数栈 6 putfield com.tag2.jvm.MyClass.b : int [15] //6:访问类的域和类实例域,com.tag2.jvm.MyClass.a : int [15] 9 return Line numbers: [pc: 0, line: 3] [pc: 4, line: 5] [pc: 9, line: 3] Local variable table: [pc: 0, pc: 10] local: this index: 0 type: com.tag2.jvm.MyClass ... }
大家看以上的编程Class文件,通过JVM指令解析,一般操作步骤是,先声名变量 int aa,int b.然后再把常数也压到栈中,最后赋值的过程。
大家看到final修改的变量不需要赋值[一个既是static又是final 的字段只占据一段不能改变的存储空间]
(声名为静态的是类变量,其访问速度会快(少了一个赋值过程),也就是固定的内存地址,用final修改就是不可改变的存储空间)
用final修改意为不可改为,这意味着在方法里无法修改参数的引用所指向的对象。[引用恒定不变 ,对象本身可以修改]
我上节介绍了设计模式之单例模式,其中Spring用到了两个synchronized (this.startupShutdownMonitor) synchronized (this.singletonObjects)
其中两个对象都是final类型的[Spring的锁对象一般都是Final的,不可改变的,也就保证了其原子性]。
发表评论
-
Java Application Cache
2016-09-27 19:25 824Application Cache is used very ... -
Java 字符串分词
2015-01-02 14:43 1673在Java的世界里有个类型 ... -
jdk 1.6 新特性,集成Groovy, 性能很差
2014-04-02 14:27 1215性能都是相对的,如果调用量不是很大的话,可以忽略,毕竟使用为主 ... -
Fake Code easy implements
2014-04-01 15:41 987package org.miniframe.modules ... -
JDK regex 用法及用途
2014-03-31 15:48 1159查找 Boolean flag = pattern.mat ... -
生产者消费者(四)
2014-03-04 12:32 1096需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者(三)
2014-03-04 10:59 913需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者(二)
2014-03-03 15:40 634需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者模式(一)
2014-02-28 14:30 988需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
查看Class文件使用的JDK版本
2013-10-30 14:17 1063由于JDK一般是向下兼容的,所以有时候本地的JDK版本比类库的 ... -
Java源代码转码
2012-12-20 17:22 1277现在中国的项目很多,编码无非是UTF-8,GBK,GB2312 ... -
Tomcat集成OSGI,并通过JNDI开放Web调用
2012-12-03 11:22 3074Tomcat集成OSGi,首先要选择OSGI服务器,我这里采用 ... -
JDK的Logging
2012-11-07 15:49 1643jdk自带有一个log日志,对于一般的使用,仅够了. 代码如下 ... -
java.util.*
2012-11-06 14:23 1323java.util 工具包,灰常的有用,有机会一定要研读源码。 ... -
java.util.concurrent.*
2012-11-02 10:38 17271. java.util.concurrent.ArrayBl ... -
java.util.rt.*
2012-10-31 13:51 10661. java.util.HashMap 散列表,主要是以离散 ... -
巧秒设计方法,不返回null
2016-09-27 19:32 642/** * {@inheritDoc} * ... -
java doc 代码文档
2012-07-13 13:58 1268对于代码规范不解释了,网上很多。 在编写代码的时候,有一点灰 ... -
接口与抽象类
2012-07-11 16:53 10821. 接口设计必谨慎,除非业务变更,否则打死不能动接口。[不变 ... -
JVM优化机制好诡异
2012-04-20 08:43 1418long i[] = new long[1000000]; ...
相关推荐
java期末复习~选择题~填空题~编程题
Java Persistence API 2.0-final-spec 免费下载
java Excel文件 poi-bin-3.1-FINAL-20080629
java-final-check 一个测试项目,显示如何在Java中覆盖final类的方法。 在博客文章中使用:http:
PDFBookmark-1.0.2-final 可实现批量导出/导出PDF的书签,基于java实现,运行需要JRE环境,支持windows/linux/unix系统
java-final-maven-javafx NEU Java最终项目,MSIS,2020年笔记从克隆的模板作者保罗艾莉亚
java基础1-8章复习-final.rar
poi-bin-3.0.2-FINAL操作EXCEL的API
java编辑读写word/Excel相关的jar:poi-3.10-FINAL.jar
Java最终项目 奥赛罗 结尾
Java最终项目Java类的最终项目
Aptech-Java-最终项目 做一个aptech sem2
内容概要: 本文介绍了Java中final关键字的概念和用法。读者将学习什么是final关键字,为什么需要使用final,以及在不同场景下如何使用final关键字。此外,还会讨论final关键字的一些注意事项和规则。 能学到什么:...
赠送原API文档:validation-api-2.0.1.Final-javadoc.jar; 赠送源代码:validation-api-2.0.1.Final-sources.jar; 赠送Maven依赖信息文件:validation-api-2.0.1.Final.pom; 包含翻译后的API文档:validation-api...
在Java中变量可以分为成员变量和局部变量 成员变量 通常每个类中成员变量可以分为 类变量(static修饰的变量) 以及 实例变量 针对这两种类型的变量赋初始值的时机是不同的。 类变量可以再声明变量的时候直接赋...
#使用Java连接四个游戏这是我的Udacity 最后一个项目。 2015年5月8日完成##如何运行程序在桌面上克隆GitHub存储库或以zip格式下载使用Java IDE运行'Main.java'(在我们使用的类中) ##项目概述在此项目中,向我提供...
java读取和写入excel文件, 最新完全版。
Java最终项目 适用于Java类的数独求解器
Java-bank-final 作业 - 2,面向对象编程
Specification: JSR-000315 Java(tm) Servlet 3.0 Specification ("Specification") Version: 3.0 Status: Final Release Release: 10 December 2009 Copyright 2009 Sun Microsystems, Inc. 4150 Network Circle, ...