常见的四种用法
1.可以用来修饰一个类
2.可以用来修饰一个方法
3.可以用来修饰局部变量
4.用来修饰成员变量
一.用来修饰类
格式:
public final class 类名称{
//....
}
含义:当前这个类不能有任何的子类。
注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写。
public final class myclass { public void method() { System.out.println("方法执行"); } } public class tbclass extends myclass{//错误 }
二.当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。
子类不能去写父类中带有final的方法。
final和abstract不能同时用,矛盾。
public class myclass { public final void method() { System.out.println("方法执行"); } } public class tbclass extends myclass{ public void method{ }//报错 }
三.final用来修饰局部变量,那么这个变量就不能进行更改。“一次赋值,终生不变”。
final int num=100; num=200;//报错,不能更改。 final int num2; num2=100;//可以,只需赋值一次,然后不可更改。
对于引用类型来说,不可变是指不可更改变量的地址值
public class student{ private string name; public void getname(){ System.out.println("姓名"+name); } public void setname(_name){ name=_name; } public student(string _name) { name=_name; } }
public class mytest{ public static void main(String arg[]) { final student stu=new student("pdd"); stu=new student("JD");//报错 stu.getname();//pdd stu.setname("JD"); stu.getname();//JD //指的是引用地址值不变,跟内部无关。 } }
四.修饰成员变量
类中的成员变量一般都有默认值,所以说,在给成员变量修饰时一定要初始化,不然无法更改。
public class student { //final String name;//如果直接这样写,那么无法通过set方法给name赋值,因为初始化为null。 final String name="TB"; }
也可以使用构造方法赋值,但是得保证所有的构造方法都对其进行赋值。
public class student { final String name; public student() { name="niu"; } public student(_name) { name=_name; } }