2013-08-29 9 views
10

インタビューで私はこの質問をしました:静的とメインを使わないと、どうやってコンソールにメッセージを表示できますか?Javaのメインブロックと静的ブロックを持たないコンソールにメッセージを出力することはできますか?

+6

[main()メソッドを使用せずにコンソール上の印刷メッセージ]の可能な重複(http://stackoverflow.com/questions/8605137/printing-message-on-console-without-using-main-method) –

+0

@Razaしかし、mainまたはstaticブロックにない場合、sysout呼び出しはどこに行きますか? – vikingsteve

+1

このリンクを試してください:[メインメソッドなしのJavaでの印刷メッセージ/静的ブロック](http://stackoverflow.com/questions/18171465/can-we-print-a-java-message-on-console-without-using- main-method-static-variabl)を使用します。上記の解決方法では、main()関数を使用して** "イニシャライザブロック" **を呼び出します。 – r3ap3r

答えて

25

あなたのメッセージを出力するカスタムクラスローダを定義することができ

java -Djava.system.class.loader=MyClassLoader

(パラメータとしてクラスを追加する必要はありません)

+0

@Chafousin @Chafousinその働き!説明できますか?java -Djava.system.class.loaderの略語 – shree18

+2

'-Djava.system.class.loader'は、JVMクラスローダ、つまり読み込みを担当するオブジェクトを定義するために使用されますクラス。ここでは独自のクラスローダーを提供し、テキストを表示して終了するように「ハック」します。 –

0

JavaはOOP言語です。

クラスを作成せずに静的メイン関数を追加することなく、プログラムを作成することはできません。

次に、System.out.printlnを呼び出して行を印刷することができます。

したがって、答えはいいえです。

+0

あなたはJavaが好きではないが、名前の呼び出しに頼る必要はない。 – MikeTheLiar

0

あなたはいつも、おそらく、コードのブロックにsysoを配置する必要があります。

ここ

public class example { public void message(){ System.out.println("Hello"); } }

方法は面接のための静的

+0

しかし、この非静的コードはどのように実行されますか? – vikingsteve

+0

@Savinsあなたが提供した解決策は、関数を呼び出すmain()メソッドが必要です** "message" ** – r3ap3r

+0

@ r3ap3r私はよく分かりませんが、飛行機は必要ではありません。デプラの間にオブジェクトの値を表示するには、テストでは、主な方法はありません。これは非常に特殊なケースであることは事実です。 – Savins

0
public class Test { 
    public static PrintStream ps = System.out.printf("%s", "hello"); 
} 

かなり奇妙な質問ではありません。こんにちはを印刷し、Exception in thread "main" java.lang.NoSuchMethodExceptionを投げます。

+0

Java7の/ではない!私はあなたのコードを試して、私は**エラー:主なメソッドは、クラスのテストでは見つかりませんでしたメインメソッドを定義してください: public static void main(String [] args)** –

+0

まあ、6 javaで動作します。 7番目のコードがmainメソッドなしで実行されないことは本当です。しかし、それはまだ静的変数を持っています。私はそれが受け入れられるかどうかを知らない。 – Mikhail

+0

私はそれがJava 7で修正されたバグのようなものだと言っています。クラスをロードした後にmain()メソッドが検索されたため、7より前のすべてのJDKで動作します。 –

2
I have asked this question:Without using static and main how could we print 
message on console?Is it possible? 

回答はいいえ!

main()メソッドが呼び出されない限り、何も実行できません。 Java(登録商標)7以前は、main()メソッドが参照される前にクラスがロードされていました。したがって、静的ブロック(静的ブロックはクラスがロードされたときに実行されます)からデータを印刷できますが、Java 7以降ではそれは不可能です。したがって、まずmain()メソッドを最初に実行する必要があります。

Spring Beanのようなフレームワークでも、コンテキストが参照されるときにのみ初期化されます(main()も最初に実行する必要があります)。静的関数/ブロックを通して。

public class MyClassLoader extends ClassLoader { 
    public MyClassLoader(ClassLoader other) { 
     super(other); 
     System.out.println("Hi there"); 
     System.exit(0); 
    } 
} 

が続いてjavaコマンドを実行します:

+0

@ Aniket Thakurあなたは正しいですが、私の質問はメインブロックと静的ブロックでした。プライベートstatic int i = m1(); public static int m1(){ System.out.println( "Test ... !!!!"); System.exit(0); return 0; } – shree18

+0

@ shree18 main()メソッドのルックアップの前にクラスがロードされたため、前に述べたように、コードはJava 7以前でのみ動作します。あなたの質問が考慮されるように(インタビューの視点を考慮して)、あなたが最近のJavaの変更を認識していないことだけを示すあなたのコードではいと答えた場合。私は最近のことを言ってはいけません:P(Java 7は今のところずっと続いていましたが)あなたが私の意見を得ることを願っています。 –

0

答えは間違いありません。

少なくとも静的なブロックが必要か、空のmain()が必要です。

は、以下の実施例を参照してください

public class ABC { 
    static{ 
      System.out.println("hai"); 
      } 
    public static void main(String[] args) {} 
} 

OUTPUT:

ハイ

2。

public final class ABC { 
    static{ 
      System.out.println("hai"); 
      } 
} 

「hai」は実行中に表示されますが、そのあとで例外が発生します。

OUTPUT:

java.lang.NoSuchMethodErrorのメイン

ハイ

可能

+0

あなたは間違っています;-) – schlingel

+0

なぜ?上記のコードは動作します。 –

+0

あなたはメインブロックまたはスタティックブロックなしでは方法がないと言ったので、しかしあります。この質問に対する答えを見てください。 – schlingel

0

スレッドの例外 "メイン" メインメソッドの前

0

を実行静的ブロックと@ Aniket Thakur 私のポイントのためコメントできません。次のプログラムはmainに入る前にメッセージを出力します。 注:私はJava 7とJava 8を使用しました。両方とも正常に動作し、mainの前に静的ブロックを実行します。

public class PrintBeforeMain { 

    private static int i = m1(); 

    public static int m1(){ 
     System.out.println("m1(): Before main() through static method..."); 
     return 0; 
    } 

    static{ 
     System.out.println("Inside standalone static{} block"); 
    } 

    public static void main(String[] args) { 
     System.out.println("Inside main()"); 
    } 
} 
関連する問題