标题: 高人指点啊 [打印本页] 作者: 姚伟涛 时间: 2012-4-16 18:19 标题: 高人指点啊 这是一个class里的代码,我想请问Circle里的public Circle(double r){setRadius(r);}里面的r和下面 public void setRadius(double r)里的r是同一个意思吗?
还有就是main class里的circle = new Circle(radius);这里为什么要有参数radius啊?谢谢高人指点啊
public class Circle
{
public static final int INVALID_DIMENSION = -1;
private double radius;
public Circle(double r){
setRadius(r);}
public double getArea() {
double result = 1;
if (isRadiusValid()){
result = Math.PI*radius*radius;
}
return result;
}
public double getCircumference() {
double result = INVALID_DIMENSION;
if(isRadiusValid()){
result = 2.0*Math.PI*radius;
}
return result;
}
这是另一个class
import java.util.*;
public class Main
{
public static void main(String[] args) {
double radius,circumference,area;
Circle circle;
Scanner scanner = new Scanner(System.in);
System.out.print("Enter radius: ");
radius = scanner.nextDouble();
circle = new Circle(radius);
circumference = circle.getCircumference();
area = circle.getArea();
if(radius>0) {System.out.println("Input radius: " + radius);
System.out.println("Circumference " + circumference);
System.out.println("Area: " + area);}else{
System.out.println("Cannot");};
}
}作者: 陈扬 时间: 2012-4-16 18:31
1、那两个r是不同的一个是构造函数里面定义的参数变量,另一个是setRadius()方法里面的参数变量。
2、public Circle(double r){setRadius(r);}这个是构造函数的重载,你调用的是重载后的构造函数。作者: 张明星 时间: 2012-4-16 18:35
两个 r 是同一个意思。
public Circle(double r) 这句定义了带参数的构造函数,用这个类定义对象的时候就要加上参数。作者: 魏明明 时间: 2012-4-16 18:39
那两个r是两个函数里面的 参数变量,名称 可以用其他的字母。两个r没有必然联系。
main class里的circle = new Circle(radius);这是调用带参数的构造方法 public Circle(double r){
setRadius(r);} 如果不想调用 可以在 class Circle里面在定义一个 空参数的Circle(){},不过 你这个函数中用的是构造函数赋值。所以要带参数的作者: 张明星 时间: 2012-4-16 18:52
两个r 都是设置半径,前一个是构造函数初始化半径,后一个是设置半径的成员方法,可以用不同的字母。。。作者: 郭建峰_xiao5 时间: 2012-4-16 18:57 本帖最后由 郭建峰_xiao5 于 2012-4-16 19:02 编辑
我这样解释一下吧:
写个简单一点的代码,注释做解释:
public class Demo{
int i;//注意:这个地方的i是实参,即实际的参数
public Demo(int i) {//这里的i是形式参数,也就是说在创建Demo对象时,往进传递的参数。表示这个地方可以传int 类型的变量
this.i = i;//this.i是用this关键字获取实参,i是形参,把传递进来的值赋给实参。
}
}
你要解决的问题是:理解实参和形参的差别,明白了这个道理。就懂了上面的代码了。