java 新建double对象_java创建对象问题

首先你要明白一个类的初始化顺序,先初始化类中的属性(如果是基础数据类型初始化为0,如果是引用类型,初始化为null。),再执行该类的构造函数,如果构造中有初始化属性的代码,会对属性进行第二次初始化。

当执行到 Volume vol=new Volume(cir,5);语句时,系统会最先初始化Volume类中所有的属性,依次执行heigh=0,circle=null, 当执行到double s=circle.getArea();时,发现是一个赋值的表达式,这时候系统会先执行右边的表达式,会调用circle.getArea(), 问题就出在这里,因为这时circle=null, 空值的引用是不能调用任何方法的,只有实例对象才能调用相应的方法,所以就抛出了异常。在java中,对一个类初始化的时候,有时并不是按照代码的写书顺序来执行的,你将double s=circle.getArea();写到程序的最后,它还是会在构造方法之前得到执行。

知道了为什么出错,解决起来就简单了,你可以先定义一个double s; 然后定义一个方法,在方法中调用 s=circle.getArea();  如下面的代码:class Volume{

double heigh;

Circle circle;

double s;

public Volume(Circle c,double h){

circle=c;

heigh=h;

}

public double area(){

s = circle.getArea();

}

}

当然你也可以在构造函数当中对 s 进行初始化,如下面的代码:class Volume{

double heigh;

Circle circle;

double s;

public Volume(Circle c,double h){

circle=c; //这里circle已经得到正确的初始化

heigh=h;

s=circle.getArea();//所以这里可以调用相应的方法

}

public void getVolume(){

double volume=s*heigh;

System.out.println("体积是"+volume);

}

}

总之一句话,在使用circle之前必须保证circle得到了正确的初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值