[英]system.out.println statement outside any method in java
我的问题是我们不能在 java 的 main 之外写一个 output 语句吗? 如果我将它括在 {} 大括号中,那么我不会出错,但如果我直接写它,我会出错。 为什么这样?
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 写它,它有效。 为什么没有方法就不行呢?
当您将它括在大括号中时,您就是将它放在一个初始化程序块中,该程序块在类被实例化时运行。 除了变量声明\/初始化之外,任何语句都不能发生在 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 { }
它被称为实例初始化器<\/a>。 每次创建实例对象时,它都会在构造函数之外运行。
还有另一种称为静态初始化<\/a>器的块,它是在 { } 之前添加静态关键字时。 此静态初始化程序仅在首次加载类时运行。
所以你可以在这两个块和类成员函数中编写代码。
除此之外,唯一剩下的地方是类数据成员声明和初始化。
基础/基础
Java Class
仅包含成员函数和 class 变量以及一些其他异常,例如 instance initliazer、static 块等。
您不能只在Class
中随心所欲地散布可执行文件(如System.out.println()
)。
实例初始化器
{...}
in Java 是instance initializer
,每当创建object
时都会调用它。 因为它是instance initializer
,所以它实际上在constructor
之前被调用。
您可以在{...}
或instance initializer
中编写System.out.println()
。
Static块
static{...}
在 Java 中称为static block
,其中包含当class
由JVM
加载时仅调用一次的代码行。
同样,您可以在{...}
或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");
}
}
Output
> Inside static block
> Inside instance initializer
> Inside constructor: obj1
> Inside instance initializer
> Inside constructor: obj2
> Inside the public static void main
请注意执行顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.