1.static静态区域和花括号区域代码的区别
static{
//代码内容//........
//代码结束
}
静态代码域,在类的加载的时候调用一次,整个生命周期只会调用一次。
{
//代码内容
//........
//代码结束
}
普通代码域,在类的每个对象创建的时候调用。
代码域中定义的变量都是局部的,只有域中的代码可以调用。
2.final基本用法
(1)修饰类
当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。
(2)修饰方法
这说明父类的方法中声明了final,子类不可重写该方法
(3)修饰属性
修饰变量是final用得最多的地方,也是本文接下来要重点阐述的内容。首先了解一下final变量的基本语法:
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
3.final和static的区别
很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。看下面这个例子:
输出结果
0.12450947485468256
0.20118062799981773
0.8372244594493871
0.20118062799981773
0.20118062799981773
0.8372244594493871
0.20118062799981773
运行这段代码就会发现,每次打印的两个j值都是一样的,而i的值却是不同的。从这里就可以知道final和static变量的区别了。
总结:
MyClass类的实例,每一次使用static的变量的时候,都是MyClass的副本
而final变量不同,它只是变量的值一旦定义下来,后续不能改变。