关于在 java 中使用构造函数和方法以及为什么构造函数不起作用的简单问题

Simple question on using constructers and methods in java and why the constructor isn't working

我刚开始学习 OOP、构造函数和 class 方法。我的问题是,当我的构造函数被调用并且给定的值不起作用时。将创建一个对象,但创建它的值似乎不起作用或 'apply'。也许代码会更好地解释它。我的圈子class是这样的:

public class MyCircle {
    double radius;
    
    public MyCircle() {
        
    }
    public MyCircle(double radius) {
        

    }
    
    final double pi = 3.14159;
    public double getRadius() {
        return radius;
    }
    
    public double getCircumference() {
        return radius*pi;
    }
    
    public double getArea() {
        return radius*radius*pi;
    }
    
}

这对我来说似乎没问题,但是当我尝试通过测试使用它时 class 像这样:

public class MyCircleTest {

public static void main(String[] args) {
    double radius = 26.5;
    MyCircle myCoolCircle = new MyCircle(radius);
    System.out.println("Circumference of myCoolCircle: " + myCoolCircle.getCircumference() );
    System.out.println("Area of myCoolCircle: " + myCoolCircle.getArea());
    

输出为:
myCoolCircle 的周长:0.0 myCoolCircle 的面积:0.0 它好像没有正确构建,我不知道为什么。 感谢任何帮助。

使用这个。

public MyCircle(double radius) {
   this.radius = radius
}

实际上,构造函数只是一种方法。这不是巫毒魔法;方法有参数。参数不是特别有用,除非您实际使用它们。您的字段(名为 radius)和构造函数的参数(也名为 radius)之间绝对没有 link。

如果您希望构造函数的操作是:“获取此参数的值,并将其分配给半径字段”,那么您必须这样写:

public MyCircle(double radius) {
    this.radius = radius;
}

请注意,我们必须使用 this.radius 来引用该字段,因为参数名称 radius 'shadows'(否则无法访问)也被命名的字段radius。然而,这是惯用的 java.

您似乎没有将 radius 的传递值分配给构造函数参数。 Java 不会将变量分配给构造函数参数本身。 尝试像 this 关键字一样分配它。

public MyCircle(double radius) {
    this.radius = radius;
}