变量:一旦赋值不能更改
类:不能被继承
方法:可以重载不能重写
1.变量
(1) 修饰成员变量
类变量(被static修饰的变量):必须声明初始值或者在静态初始化块中指定初始值
成员变量:必须声明初始值或者在非静态代码块,构造器中赋值
public class Student { final static int b = 0;//在声明时就需要赋值,或者在静态代码块中赋值 /** 静态代码块中赋值 static{ b = 0; } */ String name; //在声明时就需要赋值,或者在代码块中,或者构造器 final int a = 1; /** 代码块赋值 final int a; { a =1; }; 构造器赋值 iterator1(int a){ this.a =1; } */ // 基本数据类型 fianl 保证的是数值恒定不变 // a =3; }
(2) 修饰基本数据类型和引用类型
基本数据类型:数值一旦初始化之后就不能更改;
引用数据类型:对其初始化之后,其引用恒定不变,不能在指向另一个对象,但引用的值是可以改变的。
public class Student { final int a = 1; //声明时必须赋值 int age ; // a = 3; 数值恒定不变 public int b(final int age){ //基本数据类型,只读不能修改 // return age++; return age; } public static void main(String[] args) { final int [] age = {1,2,3}; age[1] = 5; // 可以修改引用的值 //age =null; 引用不可更改 final Student s = new Student(); //s= null; 引用不可更改 } }
(3) 修饰局部变量
系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用final修饰局部变量时,可以在定义时指定默认值(后面的代码不能对变量在赋值),也可以不指定默认值,而在后面的代码中赋初始值(仅一次)
public class Student { int a ;//成员变量 public void setA() { final int b ;//局部变量只声明没有初始化,不会报错,与final无关 b = 11; // 一定要在使用之前赋值 // b =12; 不允许第二次赋值 } }
2.方法
public class Father { public final void setA(int a) {} // 可以进行重载 public void setA(int A,int B){} } public class Son extends Father{ // 不可以重写 //@Override //public final void setA(int a) {} public void setA(int A,int B){} // 不需要继承 public void b(final Father father){ //无法在方法中更改参数引用指向的对象 //Father = new Father(); } }
补充
局部内部类和匿名内部类只能访问局部final?
内部类和外部类是同一个等级,内部类不会因为方法的结束而销毁,但是外部类结束的时候,局部变量也就随之销毁,这就产生了问题,外部类结束时,内部类可能还没有结束(没有人引用时,才会死亡),这样的话,内部类调用的局部变量不存在。为了解决这个问题,我们就将局部变量复制一份给内部类,这样的话,局部变量随着外部类销毁时,内部类依旧可以调用他自己的局部变量。因此我们要保证,这两个局部变量必须保持不变,也就是把他们设置成final
标签:int,void,局部变量,public,final,赋值 From: https://www.cnblogs.com/zhuyilong/p/17048383.html