在採訪中我問了這個問題:沒有使用static和main我們怎麼能在控制檯上打印消息?可能嗎?是否有可能在主控臺上打印消息而無需在java中使用主和靜態塊?
回答
你可以自定義一個類加載器,打印您的留言:
public class MyClassLoader extends ClassLoader {
public MyClassLoader(ClassLoader other) {
super(other);
System.out.println("Hi there");
System.exit(0);
}
}
然後運行java命令:
java -Djava.system.class.loader=MyClassLoader
(不需要添加類作爲參數)
@Chafousin它的工作!你能解釋我什麼代表java -Djava.system.class.loader – shree18
'-Djava.system.class.loader'用於定義JVM類加載器,即負責加載的對象類。在這裏,我們提供了我們自己的類加載器,我們「破解」它以顯示一些文本,然後退出。 –
Java是一種OOP語言。
如果不創建類並添加靜態主函數,則無法創建程序。
然後,您可以撥打System.out.println
打印一行。
所以,答案是否定的。
嘿,如果你不喜歡Java,我會得到它,但不需要訴諸名稱。 – MikeTheLiar
你總是需要把syso
中的代碼塊,也許是:
public class example { public void message(){ System.out.println("Hello"); } }
這裏的方法
但是,這個非靜態代碼是如何執行的? – vikingsteve
@Savins您提供的解決方案需要一個main()方法來調用函數**「message」** – r3ap3r
@ r3ap3r我不確定,但我不一定介意需要飛機,例如,如果您使用的消息在depuras中顯示對象的值,在測試中不顯示主要方法。誠然,這是一個非常具體的案例。 – Savins
public class Test {
public static PrintStream ps = System.out.printf("%s", "hello");
}
面試很奇怪的問題,也不是一成不變的。它會打印你好,並拋出Exception in thread "main" java.lang.NoSuchMethodException
。
不在/在Java7之後!!!我試過你的代碼,我得到**錯誤:在類Test中找不到主要方法,請定義主要方法爲: public static void main(String [] args)** –
那麼,在6 java的它的作品。沒錯,沒有主要方法的話,7號代碼是不會執行的。但它仍然有靜態變量。我不知道它是否可以接受。 – Mikhail
正如我所說的,它是一種在Java 7中修復的bug。它可以在7之前的所有JDK上運行,因爲在加載類後查找main()方法。 –
I have asked this question:Without using static and main how could we print
message on console?Is it possible?
答案是否定的!
除非調用main()方法,否則不能執行任何操作。在查找main()方法之前加載Java 7類之前。所以你可以通過靜態塊打印你的數據(當類被加載時執行靜態塊),但是從java 7開始,即使這是不可能的。所以你必須首先執行main()方法。
即使在像Spring bean這樣的框架中,通常只有在引用上下文時纔會初始化它(同樣需要首先執行main())。因此,如果不調用main()方法或通過靜態函數/塊。
@ Aniket Thakur你是對的。但我的問題是主要和靜態塊。所以下面的代碼適合我。 private static int i = m1(); public static int m1(){ System.out.println(「Test ... !!!!」); System.exit(0); return 0; } – shree18
@ shree18如前所述,您的代碼只能在Java 7之前工作,因爲類在main()方法查找之前加載。至於考慮到你的問題(考慮到面試的角度),如果你用你的代碼回答yes,那隻會表明你不知道最近的java變化。我不能說最近:P(Java 7已經有一段時間了),但我希望你明白我的觀點。 –
答案肯定是No.
至少你需要一個靜態塊,或者你需要一個空的main()。
參見下面的實施例:
1.
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:主
海
異常在線程 「主」
可能與靜塊,其前主方法
執行@ 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()");
}
}
- 1. 在OSGi控制檯上打印消息
- 2. 在控制檯中打印HL7消息
- 3. 如何使用console.log在控制檯上打印消息
- 4. 如何在訂閱時使mosquitto_sub打印主題和消息#
- 5. 是否有可能在一個靜態方法使用Java
- 6. 是否有可能垃圾Azure角色主機,並讓它在同一主機上啓動而無需清理?
- 7. D中是否有靜態打印?
- 8. 是否有可能在MVC ASCX控件中引用主頁面
- 9. 靜態塊和主線程
- 10. 是否有可能在jsp中調用java靜態字符串?
- 11. 是否有可能在主廚上使用RHEL idempotent創建iptables?
- 12. 在Java中主要和其他方法打印和使用arraylist
- 13. Akka - 是否有可能在演員的主管中收到失敗的消息?
- 14. 在不使用main()方法的情況下在控制檯上打印消息
- 15. 如何在Laravel的控制檯上打印消息?
- 16. 是否有可能在DC/OS中殺掉三個主控 - Mesos?
- 17. 打印兩次控制檯消息
- 18. 如何訂閱MQTT主題並在Eclipse上打印接收到的消息(Java)
- 19. 打印在不同的位置的消息,而無需使用C
- 20. 是否有可能擁有WPF應用程序的打印控制檯輸出?
- 21. 防止JSF驗證消息用於在控制檯打印
- 22. 是否有可能在控制檯中重寫上一行?
- 23. 如何不在控制檯中打印消息401(未授權)?
- 24. 如何在Scilab控制檯窗口中打印消息?
- 25. 錯誤消息不在eclipse控制檯中打印
- 26. crontab如何在控制檯中打印消息?
- 27. 無法在控制檯的主類中使用舞臺
- 28. 是否有可能合併主幹和分支而無需使用Tortoise SVN拉動源代碼?
- 29. 如何在Mac上打印主板和顯示卡信息
- 30. 是否有可能在sqlite控制檯中添加sqlite腳本,而無需創建c/C++可加載擴展
的可能重複的[上控制檯打印信息,而無需使用main()方法(http://stackoverflow.com/questions/8605137/printing-message-on-console-without-using-main-method) –
@Raza但是,如果不在主或靜態塊中,sysout調用會去哪裏? – vikingsteve
試試這個鏈接:[在沒有主要方法/靜態塊的java中打印消息](http://stackoverflow.com/questions/18171465/can-we-print-a-java-message-on-console-without-using-主方法靜態-variabl)。提到的解決方案仍然使用main()函數來調用**「初始化塊」**。 – r3ap3r