final关键字
1、定义
final关键字是个修饰符,代表最终的意思,可以修饰变量,方法,类
2、final关键字的特点
1)被final关键字修饰的变量是常量
2)被修饰的方法不能被重写
public class Demo01 {
}
class A {
public final void print() {
System.out.println("A-print()");
}
}
class B extends A {
public final void print() { // 编译报错
}
}
3)被修饰的类不能被继承
public class Demo01 {
}
final class A {
public void print() {
System.out.println("A-print()");
}
}
class B extends A { // 编译报错
}
3、final关键字的注意事项
1)final修饰的变量在定义的时候必须赋初值,否则会编译报错
赋值方式有几种?
- 显示赋值
public class Demo01 {
}
class A {
final int age = 0;
}
- 有参构造赋值
public class Demo01 {
}
class A {
final int age;
public A(int age) {
this.age = age;
}
}
代码块
1、什么是代码块?
用一对{}括起来的就是代码块
2、代码块的分类?
1)局部代码块
2)构造代码块
3)静态代码块
4)同步代码块
3、局部代码块
1)什么是局部代码块?
在方法中的代码块称为局部代码块
class A {
public void print() {
{
int index = 10;
System.out.println("index = " + index);
}
}
}
2)局部代码块的作用
能够让局部变量更早的在内存中消失,节省内存空间
4、构造代码块
1)什么是构造代码块?
定义在类中,方法外的代码块称为构造代码块
class A {
{
int index = 10;
System.out.println("index = " + index);
}
public void print() {
}
}
2)构造代码块的作用
构造代码块在创建对象时候执行,并且优先于构造方法先执行
可以将构造方法中的共性进行抽取,放入到构造代码块中,节省代码的编写
5、静态代码块
1)什么是静态代码块?
被static修饰的构造代码块称为静态代码块
class A {
static {
int index = 10;
System.out.println("index = " + index);
}
public void print() {
}
}
2)静态代码块的作用
-
什么时候执行?
当.class文件从本地加载到方法区中形成字节码文件对象的时候静态代码块会随之执行
-
为什么只执行一次?
因为字节码文件只会被加载一次,并且优先于所有的对象存在于内存中,比构造方法先执行
-
有什么作用?
给数据初始化,当数据只需要初始化一次的时候,之后可以重复使用的时候,就可以使用静态代码块