system.out.println 语句在 Java 中的任何方法之外



我的问题是我们不能在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();
   }
} 

我尝试在主要中编写它,它可以工作。为什么没有方法就不起作用?

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

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

{...}称为实例初始值设定项。每次创建实例对象时,它都会在构造函数之外运行。

static{...} 是另一种称为静态初始值设定项的块,当您在 { } 之前添加静态关键字时。此静态初始值设定项仅在首次加载类时运行。

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

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

基础知识/基础知识

Java Class只包含成员函数和类变量,以及很少有其他异常,如实例初始化器、静态块等。

您不能只是将可执行文件(如System.out.println())洒在您希望Class中的任何位置。

<小时 />

Instance initliazer

Java 中的{...}instance initializer每当创建object时都会调用它。因为它是instance initializer,所以它实际上在constructor之前被调用。

您可以在{...} instance initializer中写入System.out.println()

<小时 />

静态块

static{...}在 Java 中称为 static block,它包含的代码行,当classJVM 加载时,这些代码行仅被调用一次。

同样,您可以在{...} static block中写入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. 初始值设定项(在调用任何对象实例化之前)
  4. 构造函数(在对象创建/初始化期间)

相关内容

  • 没有找到相关文章

最新更新