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(),初始化父类的静态块。

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

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

原文地址:https://www.cnblogs.com/feiyang930112/p/11301517.html