1 final修饰类
/**
* 1) final修饰类
* 表示类是最终类, 不能被继承 ,不能作为父类
* String , System 类就是final修饰的最终类
*/
public final class Father {
}
//报错
class son extends ~~Father~~ {
}
如果没有写构造方法,z会报错,如果写了有参构造,构造方法z也必须赋值
2 final修饰字段
/**
* 2) final修饰字段(成员变量)
* 必须显示的初始化, 手动的赋初值
* final字段不能被重新赋值
* final一般与static同时使用,所有字母都大写,称为final常量
*/
public class Father2 {
int x ; //实例变量, 默认初始化为0
final int y = 123; //final字段在定义时显示初始化
final int z ;
public Father2() {
z = 456; //final字段,也可以在构造方法中手动的赋值
}
public void m1() {
x = 66;
// y = 666; //final字段不能被重新赋值
}
public static final double PI = 3.1415926;
}
3 final修饰方法
/**
* 3)final修饰方法
* 表示该方法是最终方法,不能被子类覆盖(重写), 可以被子类继承
*
*/
public class Father3 {
public final void m1(int x ) {
System.out.println(1);
}
}
class Son3 extends Father3 {
// @Override
// public void m1(int x) {
// super.m1(x);
// }
}
class Test{
public static void main(String[] args) {
new Son3().m1(1);
}
}
4 final修饰局部变量
/**
* 4) final修饰局部变量
* 一旦初始化完成, 就不能再修改
*
*/
public class Test04 {
public static void main(String[] args) {
int x ; //局部变量
x = 10;
x = 101;
final int y ; //final修饰局部变量
y = 20;
// y = 202; //final局部变量有了初始值后就不能再赋值了
//final修饰引用类型变量
final Person p1 = new Person("lisi", 18, "女");
//final修饰的是p1变量, 不能给p1变量重新赋值, 即p1变量不能再指向其他对象了
// p1 = new Person("lisisi", 20, "女");
//修改p1的字段值
p1.name = "lisisi";
}
}
5 final 修饰方法形参
/**
* 5) final修饰方法形参
* 在方法体中不能修改final形参的值, 因为在调用方法时,已经给final形参赋值了
* @author 动力节点老崔
*
*/
public class Test05 {
public static void main(String[] args) {
sm(10, 20);
}
public static void sm(int x , final int y) {
x = 101;
// y = 202;
}
}
5 final关键字总结
final关键字修饰类, 修饰字段,修饰方法,修饰局部变量,修饰方法形参
1)final修饰类表示最终类, 不能被继承
2)final修饰字段,必须显示的初始化,即手动的赋初始值, 不能被修改. 一般情况下,final与static同时使用,所有字母都大写,称为final常量
3)final修饰方法, 不能被子类覆盖(重写),可以被继承
4)final修饰局部变量,一旦初始化完成就不能再修改,注意修饰引用类型变量时,是指该变量不能再指向其他对象,可以修改它的字段值
5)final修饰方法形参, 在方法体中能对final形参重新赋值