请先看一下下面这个类,包含了两个构造函数。 
class Point{ 
  double x; 
  double y;   Point(double xVal,double yVal){ 
    x=xVal; 
    y=yVal; 
  }   Point(final Point oldPoint){ 
    x=oldPoint.x; 
    y=oldPoint.y; 
  } 

第一个构造函数接收两个double类型的参数,第二个接收一个Point类型的参数,现在有一个问题,就是第二个构造函数里面Point(final Point oldPoint),这一行中有一个final,为何要加上这个final,不加可以么?如果不可以,如果去掉会出现什么情况? 
谢谢大家!!

解决方案 »

  1.   

    其实加不加都没有太大问题,加上final了则在此构造函数中你无法调用以下的语句:
    oldPoint = xxxx;修改oldPoint的引用
      

  2.   

    加不加只是看你要实现什么样的效果,
    加上final表示你在构告器里定义的是一个不可变的Point的引用变量
      

  3.   

    这是例子讲解:
    class Point{ 
    double x; 
    double y; Point(double xVal,double yVal){ 
    x=xVal; 
    y=yVal; 

    //**final加不加有什么区别
    //*在构告器里声明了一个不可变的Point类引用变量,
    //*这个引用变量做用域只在这个构造器内,相当以这个构造器的局部为量,是不是可改变的
    Point(final Point oldPoint){ 
    x=oldPoint.x; 
    y=oldPoint.y;
    oldPoint=this;//因为oldPoint引用是不可变的,所以这里做不了赋值,要运行得注释这一行
    }
    public static void main(String[] args)

        Point p=new Point(2d,67d);
    Point p2=new Point(p);
    Point p3=new Point(p2);
    //p=p3;
    System.out.println(p.x+"\t\t"+p.y);
    System.out.println(p2.x+"\t\t"+p2.y);
    System.out.println(p3.x+"\t\t"+p3.y);
    }
     
    }
      

  4.   

    class Point{
         double x; 
     double y; 
     Point(){;}
     Point(double xVal,double yVal){ 
    x=xVal; 
    y=yVal; 
    }   Point(Point oldPoint){ 
    x=oldPoint.x; 
    y=oldPoint.y; 
    oldPoint.x=46;
    System.out.println(oldPoint.x);

    }
    class EClass extends Point{
         EClass(){
    super();

    }
    }
    public class FinalClass{
     public static void main(String args[]){
     Point fn = new Point(32,21);
     Point fn2 = new Point(fn);
    System.out.println(fn.x);
    System.out.println(fn2.x);
     }
    }
    执行结果是:
    46.0
    46.0
    32.0