在Java中,在任何方法之外使用system.out.println语句

15
我的问题是,在Java中我们不能在main函数之外编写输出语句吗?如果我用{ }括号将其括起来,那么就不会出现错误,但如果直接写,则会出现错误。为什么会这样呢?
public class abc 
{ 
   int a=3; 
   int b=0; 
   System.out.println("this statement gives error"); //Error!! 
   {System.out.println("this works fine");} 
   public static void main(String args[]) {

   System.out.println("main"); 
      abc t=new abc();
   }
} 

我尝试在主函数中编写它,它可以工作。为什么没有方法就不能工作呢?


{...} 语法实际上与将其放在类的构造函数中是相同的。 - MirroredFate
1
这意味着您需要了解更多关于Java的基础知识,如果您需要有关Java基础知识的任何解释,请随时提问。 - Ahmed Adel Ismail
4个回答

10

当你将它用花括号括起来时,你是把它放在一个初始化块中,当类被实例化时该块会运行。在Java中,除了变量声明/初始化之外,没有语句可以在方法或初始化块之外执行。


我不知道为什么人们会用“为什么”来回答问题。为什么我们不能这样做呢? - Asif Mushtaq
@UnKnown 为什么你不能做什么?很多“为什么”的答案是“因为语言就是这样设计的”。 - Kon

5

Class 只能拥有属性或方法。

Class 是创建个体对象的蓝图。

    int a=3;   // attributes
    int b=0;   // attributes
    System.out.println("this statement gives error"); //Error!! 

    {System.out.println("this works fine");}  // init block whenever an object is created.
                                              // since it is inside { }

4

{...} 被称为 实例初始化器。每次创建实例对象时,它会与构造函数一起运行。

static{...} 是另一种类型的块,被称为静态初始化器,它是在 { } 前添加 static 关键字。这个静态初始化器只在类第一次被加载时运行。

所以,您可以在这两个块和类成员函数中编写代码。

除此之外,剩下的唯一位置是用于类数据成员的声明和初始化。


1

基础/基本概念

Java Class 只包含成员函数和类变量,以及一些其他的例外情况,例如实例初始化器、静态块等。

你不能随意在 Class 中任何地方添加可执行文件(例如 System.out.println())。


实例初始化器

在 Java 中,{...} 是一个 实例初始化器,每当创建一个 object 时,它就会被调用。因为它是一个 实例初始化器,所以它实际上是在 constructor 之前被调用。

你可以在 {...}实例初始化器 中写入 System.out.println()


静态块

static{...} 在 Java 中称为 静态块,其中包含的代码行仅在 JVM 加载 class 时调用一次。

同样,你可以在 {...}静态块 中写入 System.out.println()


下面是一个简单的可执行示例

public class JavaExample {
    public JavaExample (String name){
        System.out.println("Inside constructor" + name);
    }
    {
        System.out.println("Inside instance initializer");
    }

    static{
        System.out.println("Inside static block");
    }
    //System.out.println("Will give error"); //ERROR

    public static void main(String[] args) {
        JavaExample obj1 = new JavaExample ("obj1");
        JavaExample obj2 = new JavaExample ("obj2");
        System.out.println("Inside the public static void main");
    }
}

输出

> Inside static block 
> Inside instance initializer 
> Inside constructor: obj1 
> Inside instance initializer 
> Inside constructor: obj2 
> Inside the public static void main

请注意执行顺序。
  1. 静态块(在JVM加载类时调用一次,因此最先执行)
  2. 实例初始化程序(在任何对象实例化之前)
  3. 构造函数(在对象创建/初始化期间)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接