站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题Java中关于构造函数请教~~

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

摘要: Java中关于构造函数请教~~


请先看一下下面这个类,包含了两个构造函数。
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了则在此构造函数中你无法调用以下的语句:
oldPoint = xxxx;修改oldPoint的引用


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


这是例子讲解:
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);
}

}



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


↑返回目录
前一篇: 请教高手,在一个类中这样的一个定义表示什么?第一次见到.
后一篇: 大家参考一下,我能找个什么工作啊