Java中的static方法自动就是final的吗?
答案是否定的!static和final不同的定义。
static
static是静态修饰符,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是说只要程序在运行,那么这块内存就会一直存在。
final
final关键字是最终的、最后的意思,在程序中可以用来修饰类、成员变量和方法的声明,由该关键字修饰的内容都是不可变的。使用final的作用是可以将方法锁定,防止任何继承类修改它的意义和实现。另外使用final会更加高效,编译器在遇到调用final修饰的方法时会转入内嵌机制,大大提高执行的效率。
public class FinalTest { //定义圆周率 private static final double PI = 3.14; public static void main(String[] args) { Scanner input = new Scanner(System.in); //输入圆的半径 System.out.print("请输入圆的半径:"); int r = input.nextInt(); System.out.println("圆的面积为:" + r*r*PI); } }
Java中的初始化顺序
Java首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
初始化顺序:先初始化父类静态代码---->初始化子类静态代码----->(创建实例时,如果不创建实例,后面的不会执行)初始化父类的非静态代码(变量定义等)---->初始化父类构造函数----->初始化子类非静态代码(变量定义等)----->初始化子类构造函数