问题 system.out.println语句在java中的任何方法之外


我的问题是我们不能在java之外写一个输出声明吗?如果我将它括在{}括号中,那么我不会得到错误,但如果我直接写它,我会收到错误。为什么这样?

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();
   }
} 

我尝试在main中编写它,它的工作原理。没有方法,为什么它不起作用?


9387
2017-09-13 21:22


起源

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


答案:


将它括在大括号中时,将它放在初始化块中,该块在实例化类时运行。除变量声明/初始化之外的任何语句都不能在Java中的方法或初始化块之外发生。


8
2017-09-13 21:24



初始化块为+1。 - MirroredFate
我不知道为什么人们再次回答这个问题为什么这么问题。为什么我们不能? - Asif Mushtaq
@UnKnown你为什么不能做什么?很多“为什么”问题的答案是“因为这就是语言的设计方式” - Kon


一个 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 { }

3
2017-09-13 21:31





它被称为 实例初始化器 。每次创建实例对象时,它都会在构造函数之外运行。

还有另一种类型的块被调用 静态初始化程序 在{}之前添加静态关键字时。此静态初始化程序仅在首次加载类时运行。

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

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


3
2017-09-13 21:35