控制台退出当前运行的jdk_java-在控制台上打印消息而不使用main()方法

java-在控制台上打印消息而不使用main()方法

采访中有人问我这个问题。

如何在不使用main()方法的情况下在控制台上打印消息?

Nandkumar Tekale asked 2020-07-06T02:25:07Z

10个解决方案

63 votes

public class Foo {

static {

System.out.println("Message");

System.exit(0);

}

}

javac在jvm开始寻找java之前退出程序

(注意:这仅适用于Java6。即使它使用JDK 7的javac进行编译,也无法与其java一起运行,因为它期望使用main(String[])方法。)

Bala R answered 2020-07-06T02:25:23Z

12 votes

public final class Main {

static {

System.out.println("Hello World");

System.exit(0);

}

}

在调用System.exit方法之前,因此在调用System.halt之前,Runtime.runFinalizersOnExit启动VM关闭之前,在加载类后立即首先执行静态块。

System.exit方法停止当前线程的执行,所有其他线程停滞在其轨道中。 调用System.exit时,虚拟机将在关闭之前执行两项清理任务。

首先,它执行已向System.exit注册的所有关闭挂钩。 这对于释放VM外部的资源很有用。 对于虚拟机退出之前必须发生的行为,请使用关闭挂钩。

当调用System.exit时,VM执行的第二个清理任务有关终结器。 如果是System.halt或它的邪恶双胞胎已调用Runtime.runFinalizersOnExit,VM在以下位置运行终结器所有尚未完成的对象。 这些方法已过时很久了时间以前,并且有充分的理由。 请勿致电System.runFinalizersOnExit或Runtime.runFinalizersOnExit由于任何原因:它们是最Java库中的危险方法。 调用这些方法可能导致终结器在活动对象上运行,而其他线程正在同时操作它们,导致行为不稳定或死锁。

总之,System.exit立即停止所有程序线程; 它不是导致finally块执行,但是在停止之前它会运行关闭钩子虚拟机。 VM关闭时,使用shutdown挂钩终止外部资源下。 通过调用以下命令可以停止VM,而无需执行关闭挂钩System.halt,但很少使用此方法。

Lion answered 2020-07-06T02:26:03Z

11 votes

在名为A.java的文件中

class Con {

String hi = "\n\nHello World\n\n";

}

您只需要在Windows上编译程序即可。 不运行它。 :-P

Peter Lawrey answered 2020-07-06T02:26:28Z

7 votes

您可以定义一个自定义类加载器来打印您的消息:

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

(不需要添加类作为参数)

Arnaud answered 2020-07-06T02:26:56Z

6 votes

class MainMethodNot

{

static

{

System.out.println("Hello World");

System.exit(0);

}

}

由于静态初始化程序块是在首次加载类时执行的,因此我们无需编写main方法就可以打印出“ Hello World”。 使用“ System.exit()”命令停止执行。 因此,我们防止出现“找不到主要方法”错误。这是一个非常棘手的问题

Massimiliano Peluso answered 2020-07-06T02:27:18Z

3 votes

直到Java 6才可以使用System.out.println(); 没有main()。从Java 7开始,不可能使用静态块来做到这一点。 仍然会在主类中请求主方法。

Pankaj Manali answered 2020-07-06T02:27:38Z

2 votes

如果您也不想使用静态块,则可以按照以下方式完成

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版本的。 它在Java 7中无法正常运行,据说Java 7支持该功能。我尝试使用JDK 1.8.0_77-b03,但仍无法正常工作

JavaHopper answered 2020-07-06T02:28:03Z

2 votes

是的,您可以在不使用main()的情况下将消息打印到控制台。

使用JUnit创建测试并执行它:

@Test

public printTest() {

System.out.println("myprint");

}

sunny answered 2020-07-06T02:28:27Z

1 votes

是的,一种方法是静态块,但在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)

输出:错误:在类A3中找不到主要方法,请将该主要方法定义为:公共静态void main(String [] args)

参考

Niranjan answered 2020-07-06T02:29:00Z

0 votes

实际上,它在Java 8的最新更新中不起作用。您可以根据他们的说法将其称为错误修复,但据我所知,我不能将其称为错误修复,因为它还会导致 Java编程中也没有多少概念上的改变。

learner8269 answered 2020-07-06T02:29:20Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值