常见的四种用法
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;
}
}