首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java OOP基础

Java OOP基础
EN

Stack Overflow用户
提问于 2014-05-02 13:56:32
回答 1查看 127关注 0票数 0

我有一个问题,一直拖延着我的前进,这个错误在我看来根本不符合逻辑,我是从一本书中学到的,代码就是从那里学来的。这是代码:

代码语言:javascript
运行
复制
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();

    }



}

这是错误

如果我消除了空主的静态,错误就消失了,但是这样做我就改变了主方法的签名……我真的很困惑,一字一句地遵循着书上的代码。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-02 13:57:56

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

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

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

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

创建一个非静态的内部类意味着内部类的对象正在访问外部类实例范围中的东西,因此如果没有引用,就不能创建内部类的实例--一个外部类的实例,这就是编译器所抱怨的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23429937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档