Final关键字
根据使用环境不同,final的含义会有细微的区别,但通常是指无法改变的内容。final关键字可以修饰变量、方法和类。
Final变量
final数据是用来向编译器告知变量是恒定不变的。对使用基本类型数据的常量,在定义时必须对其赋值。一个既是static又是final的域只会占据一段不能改变的存储空间。当对象使用引用而不是基本类型时使用final修饰,final使引用恒定不变,但其引用的内容可变。
空白的final允许的,但在使用前必须初始化,一旦初始化,将不能再更改。一般应用于类中,在定义处或构造方法中初始化。方法的参数也可以被final修饰,final参数不能更改参数引用指定的对象,主要用来向匿名内部类传递数据。
接口中定义的域不能是空白final的,因为接口中的域都是static final,所以必须在定义时进行初始化。其他位置的static final也一样。
Final方法
final方法的使用原因有两个:
- 锁定方法,防止继承类修改和覆盖方法。
- 加强效率,将调用转换为内嵌,该条仅限于小方法使用。
类中所有私有方法都隐式的指定为final的,虽然可以给私有方法加final修饰,但不会有任何意义。
Final类
final类表示该类无法被继承。final类中的域可根据选择是否成为final域,但类中的方法都将隐式的指定为final的,对每个方法添加final不再必要。
Static关键字
static关键字可以修饰变量和方法,主要用于通知编译器将目标设定为静态唯一的。
Static变量
static变量常用于类中的域。不论类产生了多少对象,static域在内存中只有一份,所以static域也被称为类变量。任何方法都可以直接访问static域。与static变量相对应的非static变量被成为实例变量。static变量一般通过“类名.变量名”的方法进行访问,而不用this,因为其不从属于任何实例。
static变量与final变量不能混为一谈,static变量在内存中唯一,但是是可修改的;final变量在内存中不唯一,但不可修改。
Static方法
static方法与static变量很相似。static方法在内存中也仅有一份,放置在类的内存里,通过类调用,而不是实例。所以也称为类方法。static方法可以访问static变量,但不能访问实例变量。一般在进行代码设计时,static方法不应访问类中的域及需要实例化的方法,而是应该专注于提供过服务。
Static类
一般情况下是不允许定义静态类的,只有在定义内部类的时候才可以加上static关键字,将内部类变为静态类。
内部类是定义在类内部的类,对于Java来说,内部类很平常。在外部类的非静态方法以外的任意位置创建内部类的对象只需要用直接new OuterClass.InnerClass()即可。但在外部环境中内部类对象是不能直接创建的,需要用OuterClassObject.new InnerClass()的形式来创建。但在外部环境用实例化静态内部类时,则可以直接用new OuterClass.InnerClass()来创建,但此时,静态内部类不能与其外部类发生任何联系,此时的内部类应该称为嵌套类。关于内部类,将在今后的博文中详细说明。
来源:oschina
链接:https://my.oschina.net/u/219594/blog/140566