Java关键字总结

一、final

final修饰类,类不可被继承。

The type FinalB cannot subclass the final class FinalA

译:FinalB类型不能将最终类FinalA子类化

 

final修饰变量,变量必须被初始化,且初始化后,变量不可被修改。

从下面的例子可以得知即使是基本类型,也需要初始化。

The blank final field c may not have been initialized

空白的最终字段c可能尚未初始化

The final field FinalC.c cannot be assigned

无法分配最终字段FinalC.c

 

final修饰方法,类被继承后方法不可重写。

Cannot override the final method from FinalD

译:无法覆盖FinlanD的最终方法

 

final还可在方法中作为局部变量使用,可在参数中修饰,也可在方法体中修饰

 

 final的错误使用

 final的正确使用

在方法中,final修饰的局部变量作为参数传递进入另一个方法体,是可修改的,两者作用域不一样。

在方法(非构造方法)中,没有显示调用super.sex()无法进入父类中同样的方法,这是重写。

 

二、static

static不能修饰类,修饰类的只有public、abstract和final

Illegal modifier for the class A; only public, abstract & final are permitted

(对于类对象)类A的非法修饰符; 只允许public,abstract和final

 

static修饰变量,该变量可在static初始静态块中初始化变量。

static初始化静态块不能初始化非静态变量。不能通过类对象直接调用非静态变量

Cannot make a static reference to the non-static field age

(在静态初始块中初始化非静态对象或直接使用类对象(非对象实例)调用非静态方法)无法对非静态字段age进行静态引用

 

在方法内部,static不能修饰局部变量,局部变量只能使用final修饰。

Illegal modifier for parameter num; only final is permitted

(方法内部)参数num的修饰符非法; 只有final是被允许的 

 

类对象无法直接调用非静态方法

Cannot make a static reference to the non-static method print() from the type A 

无法对类型A的非静态方法print()进行静态引用

 

当类中没有定义构造方法,系统会为类提供一个默认的无参构造方法,无参构造方法会调用super();

无论是显示调用还是隐式调用或者自定义构造方法,系统都会默认在进入构造方法之初调用super(),初始化父类的静态块。

根据结果可得知,当继承一个带有静态初始块对象时,会先执行父类的静态初始块。

在未产生对象之前,构造方法不会初始化。

 

posted @ 2019-08-05 10:33  forget_me  阅读(234)  评论(0编辑  收藏  举报