static,final,transient关键字的研究

1.static关键字
首先,当创建一个类的时候,就是在描述那个类的对象的外观与行为,除非用new创建那个类的对象,否则,实际上没有获得任何对象,执行new来创建对象的时候,数据存储空间才被分配。其方法才被其他类调用。
static关键字解决了实际使用中的两个问题。
1) 为特定的域分配单一的存储空间,这个空间与创建的对象没有关系。(静态域)。static关键字不能应用于局部变量。
2) 将一个方法单独出来,不与它的类产生关联(静态方法)。在静态方方中,不能引用非静态方法。
关于static的其他用法,静态导包。
普通的导入:import com.... 静态导入:import static com....
静态导包可以将指定的包下的静态方法导入。导入之后,在类中可以直接使用方法名方法方法,而不是使用[类名.方法名]的形式进行引用。比如System.out.println()就可以使用println()直接使用。该特性在Java5中加入。
static还与类的初始化有关系。
静态对象的初始化问题,静态对象只有在必要的时刻才会进行,如果不进行引用,则永远都不会被创建,只有在第一个对象被创建,或者第一次访问静态数据的时候,才会被创建,并且此后不会再被初始化。
对象的创建过程:
1) 构造器即使没有显式的使用static关键字,它也是静态方法。当抽次创建对象时,或者静态方法被访问时,java解释器查找类路径,以定位类.class文件。
2)载入class文件,有关静态初始化的所有动作都会执行。
3)使用new在创建对象的时候,首先在堆上为对象分配足够的存储空间。
4)这块空间清零,所有引用设置null,所有基本类型设置成默认值。
5)执行所有字段定义处的初始化动作。
6)执行构造器。
以上可以看出,static的初始化是在构造函数之前执行的。
2.final关键字
通常final指“不可改变的”,使用final的原因通常出于两个目的:
1)设计
2)效率
设计指的是,在系统的设计中,使用一个不可变的常量,使得在程序执行的各个部分,这个常量的值是一样的。

2.final关键字
final关键字可能修饰的对象有,方法,数据,类。

final形容基本数据类型:说明数据在初始化之后就不能改变。所以final形容的数据,在初始化的时候,必须指定数据的值。一个即使static又是final的数据,占用一个不能改变的存储空间。
final形容引用类型的时候,final使引用恒久不变,一旦引用初始化的时候被final修饰。这个引用指向的对象就不能改变。但是指向的对象是可以改变的。
java未提供任何一个可以使对象恒定不变的方法。但是自己可以实现这个效果。
final数据类型的特殊使用,“空白”final,正常情况下,一个final的数据在声明的时候就需要给其赋值,但是有这种情况,一个类里面可以有空白的final数据,这个空白的数据可以在使用不同的构造方法的时候,拥有不同的值。但是,所有的final数据必须在每个构造方法中给其赋值。所以final域在使用之前总是能被初始化。

final参数:在方法中的参数列表中,可以将参数声明成final的。这时,你可以读取参数,但是不可以对参数进行任何修改的操作。final方法的主要原因是:声明方法不能被覆盖,这个方法在类的继承中,始终保持不变。在最初final方法的使用还有另一个效率的原因。final方法将被编译器优化成方法调用机制,但是至JDK5之后,就不会使用final进行效率优化。将执行的效率交由虚拟机进行管理。所以现在主要使用final的原因就是基于设计的,声明方法是不能被覆盖的。

任何一个private方法都是隐式的final方法。因为private方法不能被继承,不能被覆盖。如果给一个private方法添加final,也不会有任何改变。如果在一个子类中覆盖了超类的private方法(实际上并没有)。编译器不会报错。这里只是看似覆盖了超类中的private方法。实际上,子类只是声明了一个同名的private方法,因为覆盖只能覆盖超类接口中的方法。而private方法不会在超类的接口中出现。这里的覆盖只是一个幻觉。

final类:声明一个final类,证明你不想继承这个类,也不允许任何人继承这个类。这样做有两个理由。
1) 基于设计,你不需要对这个类进行任何的变动 。
2) 基于安全,你不需要它有任何子类。
final类中的域,可以选择是final或者不是final。由于类是final的,所有final类中的方法有事隐式的final的。
关于final类,java编程思想中有过一些忠告。总的来说,一般预见的不可继承的设计,无法准确的预见一个类在之后是否会被继承使用,所以,使用final类的时候,一定要认真的考虑。


如果此篇文章有帮助到您,请您也支持一下我的论坛 www.ymkfw.com,本论坛旨在为程序员和开发者搭建一个轻松自在的小窝。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值