gpt4 book ai didi

Java 面向对象编程基础知识

转载 作者:行者123 更新时间:2023-12-01 17:11:54 26 4
gpt4 key购买 nike

我有一个问题一直阻碍我进一步前进,在我看来这个错误根本不合逻辑,我正在从一本书中学习,代码来自那里。这是代码:

package test_area;

public class clzzz {

class SimpleCircle{
double radius;

SimpleCircle()
{
radius = 1;
}

SimpleCircle(double newRadius)
{
radius = newRadius;
}

double getArea()
{
return radius*radius*Math.PI;
}

double getPerimeter()
{
return 2*radius*Math.PI;
}

void setRadius(double newRadius)
{
radius = newRadius;
}

}


public static void main(String[] args)
{
SimpleCircle circle1 = new SimpleCircle();

}



}

这是错误 enter image description here

如果我消除了 void main 中的静态,错误就会消失,但是这样做我正在改变 main 方法的签名......我真的很困惑,逐字逐句地遵循书中的代码。

看在上帝的份上,为什么我需要静态标签?我不需要强制相应的类只有一个实例,因为我可以通过对象的名称来控制它的实例,因此 static 只是一个障碍?

最佳答案

您将 SimpleCircle 定义为内部类,这在这里是不必要的复杂化,也是阻止编译的原因。将 SimpleCircle 类声明从 clzzz 声明中移出,即可解决问题。

或者,您可以通过添加 static 关键字使 SimpleCircle 成为静态内部类。如果将其保留为静态内部类,那么如果您可以在 clzzz 之外使用它,则需要使用外部类和内部类 (clzzz.SimpleCircle) 来引用它,以便 JVM 可以找到它。

通常静态内部类用于组织目的,因为您有一些与另一个类一起使用的东西,但它并不依赖于它(例如see java.util.Map.Entry,尽管它是一个接口(interface)而不是一个类)。

static 并不意味着您只能拥有一个实例。在类定义的上下文中,这意味着不依赖于外部类的实例。您仍然可以使用静态内部类创建多个实例(再次考虑一下 Map 和 Map.Entry,您可以在其中迭代映射的所有条目,每个条目都是 Map.Entry 的一个单独实例)。您可以将 static 视为“您不需要从定义该事物的类中实例化的对象。”

使某些内容成为非静态内部类意味着内部类的对象正在访问外部类实例范围内的内容,因此如果没有引用外部类的实例,则无法创建内部类的实例类,这就是编译器提示的地方。

关于Java 面向对象编程基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23429937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com