代码如下: class Circle{ double r; double pi=3.14; public Circle(double r) { this.r=r; } public void getArea() { System.out.println("圆的面积是:"+r*r*pi); } } public class final_test { public static void main(String[] args) { // TODO Auto-generated method stub Circle circle = new Circle(4.0); circle.getArea(); //圆的面积是:50.24 //下面的方式就会出现问题 circle.pi=0; circle.getArea(); //圆的面积是:0.0 } }
从上面的代码就可以看到,对象对变量访问之后,就会出现错误。所以就需要把变量固定下来,进行私有化。
其实最优化的方式就是使用final进行修饰,可以达到很好的效果。
final 关键字的用法如下:
1. final 关键字修饰一个基本类型的变量时候,该变量不能重新赋值。
2. final 关键字修饰的变量必须要有初始值。
3. final 关键字在修饰一个引用变量时,该变量不可以重新指向新的对象。---指的是在同一个内存空间内
代码如下:
public class final_test { public static void main(String[] args) { // TODO Auto-generated method stub Circle circle = new Circle(4.0); circle.getArea(); //圆的面积是:50.24 //下面的方式就会出现问题 //circle.pi=0; // 用final修饰过的就不能再次修改 //circle.getArea(); // 圆的面积是:0.0 test(circle); } // 测试函数 public static void test(Circle circle) { circle=new Circle(5.0); circle.getArea(); } }
4. final关键字修饰一个函数的时候,该函数不能被重写。
class Circle{ double r; final double pi=3.14; public Circle(double r) { this.r=r; } public void getArea() { //修改成 public final void getArea() 则不能重写 System.out.println("圆的面积是:"+r*r*pi); } } public class final_test extends Circle{ public final_test(double r) { super(r); } public void getArea() { System.out.println("--重写面积公式--"); } public static void main(String[] args) { Circle circle = new Circle(4.0); circle.getArea(); //圆的面积是:50.24 } } }
5. final关键字修饰一个类的时候,该类不能被继承。
public static final double pi = 3.14; // public 是为了公开访问权限 // static 可以共享,方便访问,省内存 // final 是固定不变的,不可以修改