14

私の質問は、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();
   }
} 

メインで書いてみましたが、うまくいきます。メソッドがないとうまくいかないのはなぜですか?

4

4 に答える 4

9

中括弧で囲むと、クラスがインスタンス化されるときに実行される初期化ブロックに配置されます。変数の宣言/初期化以外のステートメントは、Java のメソッドまたは初期化ブロックの外で実行することはできません。

于 2013-09-13T21:24:38.847 に答える
5

AClassは、属性またはメソッドのみを持つことができます。

クラスは、個々のオブジェクトが作成される青写真です。

    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 { }
于 2013-09-13T21:31:02.943 に答える
4

{...}インスタンス初期化子と呼ばれます。インスタンス オブジェクトが作成されるたびに、コンストラクタに加えて実行されます。

static{...}Static Initializerと呼ばれる別のタイプのブロックは、{ } の前に static キーワードを追加する場合です。この静的初期化子は、クラスが最初にロードされたときにのみ実行されます。

したがって、これら 2 つのブロックおよびクラス メンバー関数でコードを記述できます。

それ以外に残された唯一の場所は、クラス データ メンバーの宣言と初期化のためのものです。

于 2013-09-13T21:35:11.590 に答える
1

基礎・基礎

JavaClassには、メンバー関数とクラス変数のみが含まれ、インスタンスinitliazer、静的ブロックなどの他のいくつかの例外が含まれています.

実行可能ファイル(のようなSystem.out.println())を内部の好きな場所に振りかけることはできませんClass


インスタンス初期化

{...}Java では、が作成さinstance initializerれるたびに呼び出されます。objectであるためinstance initializer、実際には前に呼び出されconstructorます。

またはSystem.out.println()の中に書くことができます。{...} instance initializer


静的ブロック

static{...}は Java で呼び出されます。これには、が によってロードされstatic blockたときに 1 回だけ呼び出されるコード行が含まれています。classJVM

ここでも、またはSystem.out.println()の中に書くことができます。{...} static block


以下の簡単な実行例

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. コンストラクター (オブジェクトの作成/初期化中)
于 2022-02-18T11:00:16.010 に答える