回答
public class Foo {
static {
System.out.println("Message");
System.exit(0);
}
}
的JVM之前System.exit(0)
退出程序开始寻找main()
(注:即使它与JDK 7的javac
它不能与它java
运行编译,因为它预计main(String[])
方法。)
@Roflcoptr'$ java Foo'就像任何其他 – 2011-12-22 14:23:07
@Roflcoptr'java -cp。 Foo就像一个主要的程序。 ;) – 2011-12-22 14:23:37
@Roflcoptr只是编译类并运行'java Foo'它会加载类,打印消息;并且在它开始找到执行的入口点之前我们退出。 – 2011-12-22 14:24:13
在一个名为的文件
class Con {
String hi = "\n\nHello World\n\n";
}
你只需要在Windows上编译程序。不运行它。 :-P
这是可行的,因为'CON'在Windows上有特殊含义,对吧? – 2011-12-22 14:23:44
这也打印了很多其他的东西。顺便说一下,什么是“Con”?它不会将该文件命名为“Con.java”。 +1。 – 2011-12-22 14:32:17
-1为与平台无关的语言中的问题提供平台特定的解决方案是不正确的。 – 2011-12-22 14:37:56
class MainMethodNot
{
static
{
System.out.println("Hello World");
System.exit(0);
}
}
因为静态初始化块执行第一次加载类时,我们可以打印出的“Hello World”,而无需编写一个主要方法。使用“System.exit()”命令停止执行。所以,我们防止“主要方法未找到”错误。 这是一个相当棘手的问题
public final class Main {
static {
System.out.println("Hello World");
System.exit(0);
}
}
静态块首先就被调用之前main();
方法,因此前main()
被称为类加载执行,System.exit(0)
启动VM关闭。
System.exit
方法会暂停执行当前线程和其他所有其他线程的执行。当调用System.exit
时,虚拟机在关闭前执行两个清理任务。
首先,它执行已经用Runtime.addShutdownHook
注册的所有关闭钩子。这对释放VM外部的资源很有用。使用关闭挂钩进行虚拟机退出前必须发生的行为。
当System.exit
被称为 时VM执行的第二个清理任务涉及终结器。如果已调用System.runFinalizersOnExit
或其邪恶双胞胎 Runtime.runFinalizersOnExit
,则虚拟机将运行所有尚未最终确定的对象的终结器。这些方法早在 被弃用,并有充分的理由。永远不要致电System.runFinalizersOnExit
或 Runtime.runFinalizersOnExit
出于任何原因:它们是Java库中最危险的方法之一。调用这些方法可能导致终结器在活动对象上运行,而其他线程同时操纵它们,导致不稳定的行为或死锁。
总之,System.exit
立即停止所有程序线程;它不会造成 最终阻止执行,但它会在停止虚拟机之前运行关闭挂接。当关闭虚拟机关闭 时,使用关闭挂钩来终止外部资源。通过调用 System.halt
可以暂停虚拟机而不执行关机挂钩,但此方法很少使用。
你可以自定义一个类加载器,打印您的留言:
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
(不需要添加类作为参数)
是的,其中一种方式是静态模块,但在以前版本的JDK中不在JDK 1.7中。
class Withoutmain{
static{
System.out.println("Message: Your message can be print on console without main() method");
System.exit(0);
}
}
输出:消息:你的消息可以是在控制台上打印而不main()方法(如果不是JDK7)
输出:错误:Main方法在类A3不存在,请定义的主要方法为: 公共静态无效的主要(字串[] args)
这是可能的java直到6使用的System.out.println();没有main()。 从Java 7开始,用静态块就无法做到这一点。它仍然会要求主要课程的主要方法。
是的,我在很多地方见过,但我不清楚为什么不在jdk7和更高版本中执行,如果你可以给出更详细的信息,那就太好了。 – 2017-11-28 10:27:39
如果你不想太使用静态块,可以按以下方式
public class NoMain {
private static final int STATUS = getStatus();
private static int getStatus() {
System.out.println("Hello World!!");
System.exit(0);
return 0;
}
}
但是,请注意,这是Java 6的版本来完成。它的not working in Java 7据说在Java 8中支持。我尝试使用JDK 1.8.0_77-b03,它仍然不能正常工作
实际上,它不适用于Java 8的最新更新。您可以称它为根据他们的错误修复,但据我相信我目前的知识,这不能称为错误修复,因为它也导致在java编程中的概念性变化也很少。
是的,您可以在不使用main()的情况下将消息打印到控制台。
创建使用JUnit测试,并执行它:
@Test
public printTest() {
System.out.println("myprint");
}
- 1. 在控制台中打印HL7消息
- 2. 如何在Laravel的控制台上打印消息?
- 3. R-如何在不打印控制台的情况下返回命名列表
- 4. 如何不在控制台中打印消息401(未授权)?
- 5. 控制台不会打印出我的方法中的信息
- 6. 默认情况下在Chrome中折叠控制台信息消息
- 7. 如何在没有标准库的情况下打印到控制台(Linux)(libc)
- 8. 日志信息不在控制台上打印
- 9. 如何在不显示控制台的情况下调用_wsystem?
- 10. 如何在不使用换行符的情况下将字符串打印到控制台?
- 11. 如何在不打开GUI的情况下在控制台中启动apache tika?
- 12. SSRS 2008 - 在纵向不打印的情况下打印PDF
- 13. 如何在不打印pid的情况下打印“$$”?
- 14. 在控制台上打印矢量
- 15. log4net BasicConfigurator未在控制台上打印
- 16. 在控制台上打印为空
- 17. 在控制台上打印(导轨s)
- 18. 在没有警告消息的情况下调用父控制器上的方法
- 19. 无法使用角度js中的控制器打印消息?
- 20. Log4net不打印到控制台在wpf
- 21. 如何在不使用WebBrowser控件的情况下打印网页
- 22. 如何在服务器控制台上打印前端日志消息?
- 23. 无法在没有控制的情况下运行交互式控制台TTY
- 24. 如何在不使用控制台的情况下重置WebSphere中的PARENT FIRST?
- 25. 在没有Main的情况下创建Jars()方法
- 26. 如何在不使用RadEditor的打印按钮的情况下调用打印功能RadEditor控件?
- 27. JOptimizer - 取消控制台调试打印
- 28. 在没有控制台的情况下运行minGW控制台程序
- 29. 如何在不向控制台报告结果的情况下使用waitForElementVisible?
- 30. 在Log4js中禁用控制台打印
你如何开始你没有一个主要方法的应用程序? – RoflcoptrException 2011-12-22 14:17:37
我不认为这是一个很好的面试问题。当然,你想测试申请人的问题解决能力,而不是Java的少量使用方面的知识? – 2011-12-22 15:50:17
@CallumRogers +1琐事是最糟糕的问题,任何提出这些问题的人都不配当我的老板。 – 2011-12-22 20:26:20