Java中关键字static,final的理解

来源:互联网 发布:github for mac 教程 编辑:程序博客网 时间:2024/04/27 20:30

下面总结一下Java中关键字的用法及其注意事项:

首先,java中的关键字主要有访问权限,public,private,protected 。关于类,方法,变量修饰符的关键字有class,interface,abstract,implements,extends,final,static,synchronized。 关于程序控制的关键字有break,continue,return,do,while,for,if,else,switch,case,default,instanceof。还有其他的一些关键字有:import(导包)package,基本数据类型byte,char,short,int,long,float,double,boolean。还有一些null,true,false,super(父类对象),this(本类对象),void(无返回值),try捕获异常catch处理异常,throw跑出一个异常对象,throws声明一个异常对象可能被抛出,还有一些保留字比如说:goto跳转,cost静态,native本地。这些关键字每一个都有需要注意和好好体会的地方,今天主要总结一下static和final的内容。

先来总结static用法,首先,static是一个表示静态的关键字,可以用来修饰类,属性,方法,值得注意的是在静态方法中不能直接使用非静态的变量,但是在其他非静态的方法中可以使用静态变量。如果在一个类中把一个变量值设为static,那么这个变量便不再属于某一个具体的对象,而是为这个类所有,是这个类的属性,为所有对象所维护,那么在调用的时候也就不用通过对象名来调用,当然也不是错误,但是不推荐使用对象名来调用,而是推荐使用类名来调用,调用方法是这样的:

public class Test {public static void main(String args[]){System.out.println(Mykey.a);}}

其中Mykey是类名,在这里就是通过类名来调用静态属性,当然,也可以调用静态方法,都是通过类名来调用。还有一点需要注意的是:其实static是先于对象创建的,所以通过对象来调用静态属性或方法也就非常不必要了,static语句块也是先于构造方法来创建的。

用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明这个类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。 所以如果在任意一个对象里进行static变量重新赋值,则这个类的属性都会被改变,这点一定要注意。

下面再来总结一下final修饰,它也可以修饰类,属性和方法,顾名思义,用final修饰的这些表示不能再赋值或者重写,用final修饰的方法可以被继承,但是不能再被重写。

当你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义,因为它所在的类已经不能被继承了。

还有这里再总结一下String的特殊性,因为String类型本身就已经是final修饰的,这点可以从String的声明中看到,但是我们却可以这么做:

public static void show(){String lisa = "aaa";lisa = "bbb";System.out.println(lisa);}

那么在这里就有点特殊了,因为在这里String类型的lisa本来就是final的,那么为什么在这里lisa的值还可以被改变呢,这里是因为在Java里String用的非常多,所以在这里有这样的特殊性。



0 0
原创粉丝点击