【问题标题】:Why do I get a compilation error when calling println method in the class body? #Java为什么在类体中调用 println 方法时会出现编译错误? #Java
【发布时间】:2015-02-08 04:04:05
【问题描述】:
class Test {
    int a = 100;
    System.out.println(a); 
}
class Demo {
    public static void main(String args[]) {
        Test t = new Test();
    }
}

我是编程新手。我在练习时发现了这段代码。我不明白为什么会出现此错误。

这是我遇到的错误。

Demo.java:3: error: <identifier> expected
 System.out.println(a);
                   ^
Demo.java:3: error: <identifier> expected
 System.out.println(a);
                     ^
2 errors
Compilation failed.

你们能解释一下为什么我会收到这个错误吗?

【问题讨论】:

  • 当问“为什么这是一个错误?”问题,您应该始终发布实际的错误消息。
  • 为什么你认为该行不应该有错误?
  • 你认为System.out.println(a);应该在什么时候被执行?你为什么这么认为?
  • 没有。我无法删除人们的反对票。您可以阅读帮助中心并了解如何在此网站上提问。您还可以编辑和删除您的问题。
  • 我不同意关闭的原因。看来他问这个问题是因为他误解了 Java 类的工作原理。我可以想象未来有同样问题的用户会找到这个问题。我会编辑给它一个更具描述性的标题。

标签: oop constructor println


【解决方案1】:

您不能直接从java class body 调用方法。

Test 类中创建一个构造函数,并将print 放入其中:

class Test {
    int a = 100;

    public Test() {
        System.out.println(a); 
    }
}

请注意,如果出于某种原因您确实希望在不使用构造函数的情况下加载类时执行语句,您可以定义一个 static 块,这里是一个示例:

class Test {
    static int a = 100;

    static {
        System.out.println(a); 
    }

}

但是,这仅供参考,您的情况实际上不需要。

【讨论】:

  • 是的,这是因为代码需要在方法或构造函数中。但请注意,向构造函数添加带有副作用的代码(例如将内容打印到屏幕上)并不是一个好习惯。
  • @DhanukaLakshan 我不是反对你的问题的人之一。
【解决方案2】:

来自 Java 教程中的Declaring Classes

一般来说,类声明可以按顺序包含这些组件:

  1. 修饰符,例如 public、private 以及您稍后会遇到的许多其他修饰符。

  2. 类名,首字母大写。

  3. 类的父类(超类)的名称(如果有),前面带有关键字 extends。一个类只能扩展(子类)一个父类。

  4. 类实现的接口的逗号分隔列表,如果有的话,前面是关键字 implements。一个类可以实现多个接口。

  5. 类主体,用大括号 {} 括起来。

您不能在方法声明之外进行任何函数调用。

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2014-06-08
    • 2014-04-20
    • 2011-07-20
    • 2011-07-10
    • 2013-08-14
    相关资源
    最近更新 更多