JAVA关键字:final
有些类不想被继承,有些方法不想被重写,有些变量不想被重新赋值,就引入了final。
final是个修饰符,它可以用来修饰类、类的属性和方法,以及局部变量,但类的构造方法不能用final来修饰。
一旦被final修饰,相当于最终定稿了,不可以再变了。
1.final修饰的类,不能被继承。但用法是一样的,可以new对象等。
public final class Fu{
}
我们经常用的字符串类String类,就是final类
2. final修饰的方法,不可以被子类重写
public class Fu{
//最终方法
public final void show(){
System.out.println("这是父类的最终方法");
}
//一般方法
public void function(){
System.out.println("一般方法");
}
}
//子类继承,但不能重写最终方法
public class Zi extends Fu{
public void function(){
System.out.println("重写父类一般方法");
}
}
//可以随意调用final方法
new zi().show();
new zi().function();
3. final修饰的局部变量只能被赋值一次,且终身不变。
被final修饰的变量,又被称之为常量
可以正常参与运算等。
final int i =10;
4. final修饰引用变量,其指向的内存地址不变,但其指向的值可以改变。
public class Demo{
String name;
}
//main方法中
final Demo d = new Demo(); //指向的内存地址被固定
d.name = "adam" //指向的内容的值可以改变
5. final修饰的成员变量(属性)
final 修饰的属性一定要赋值
public class Demo{
final String name = "adam"; //必须赋值,否则会报错
}
但是final修饰一般性的变量,可以不赋值,但如果要使用它,必须要初始化赋值。如在main方法中
final int i; //可以定义
System.out.println(i); //但这样会报错,因为要使用i,必须要定义的时候赋值。
其实不用final修饰的一般变量,不赋值也是只可定义不能使用,只有类的属性不赋值才有默认值。
int i;
System.out.println(i); //报错,需要初始化。
6. 类的属性,如果被final修饰,可以手动赋值,也可以能这过构造器赋值
public class Demo{
final String name = "adam";
}
//通过构造器赋值
public class Demo{
final String name;
public Demo(String name){
this.name = name;
}
}
但不能通过setName来赋值,为什么?因为必须在创建对象前赋值,构造器是创建对象的时候就赋值了。set方法是创建对象之后的事了。
浙公网安备 33010602011771号