Java中关于构造函数请教~~

来源:百度知道 编辑:UC知道 时间:2024/05/19 19:33:41
请先看一下下面这个类,包含了两个构造函数。
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,不加可以么?如果不可以,如果去掉会出现什么情况?
谢谢大家!!

final可以用在数据、方法和类前。
先说final用在数据前时,fianl如果用在基本数据前,则说明这个数据不能再被改变,如果用在一个对象(包括数组)的reference上,则说明这个reference不能再指向另一个reference(但是对象本身是可以被改变的)。
再说final用在类前时,表明该类不能被继承,仅此而已,该类的数据成员能够改变要看他们前面是否有final。

对不起,我错了,这里是不可以改变oldPoint的引用,其成员变量是可以修改的。。 ^^

不加也可以吧,不是太清楚
等待高手回答ing

那么按照MBox说的,oldPoint.y的值也不可以变!

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;
oldPoint.x=46;
}
}
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
32.0
oldPoint.x的值不是改变了么?

因为java是传值,对象的超作依靠的是对象的引用,通过final修饰之后oldpoint的值就不能在变了,但oldpoint引用所指向的对象是可以变的