首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态块不能在JDK 7中执行,“未找到主方法”,但可以在JDK 1.5中工作

静态块不能在JDK 7中执行,“未找到主方法”,但可以在JDK 1.5中工作
EN

Stack Overflow用户
提问于 2013-07-06 14:45:54
回答 9查看 7.1K关注 0票数 18

我已经编写了一个包含一个静态块的简单类

代码语言:javascript
复制
class Hello
{

  static {
           System.out.println("Hello");
       System.exit(0);
     }
}

当我使用jdk1.5运行它时,会执行静态块

代码语言:javascript
复制
C:\apps\Java\jdk1.5.0_21\bin>javac Hello.java

C:\apps\Java\jdk1.5.0_21\bin>
C:\apps\Java\jdk1.5.0_21\bin>
C:\apps\Java\jdk1.5.0_21\bin>
C:\apps\Java\jdk1.5.0_21\bin>java Hello

Hello

但是当我使用jdk1.7运行它时,我得到了以下错误

代码语言:javascript
复制
C:\Program Files (x86)\Java\jdk1.7.0_02\bin>
C:\Program Files (x86)\Java\jdk1.7.0_02\bin>javac Hello.java

C:\Program Files (x86)\Java\jdk1.7.0_02\bin>java Hello
Error: Main method not found in class Hello, please define the main method as:
    public static void main(String[] args)

有人知道JDK 5和JDK 7中的这种行为变化吗?

提前感谢!!

EN

回答 9

Stack Overflow用户

发布于 2013-07-06 14:52:00

Java7在装入类之前查找main方法。这是与以前的java版本相比的行为变化,因此您的静态代码块不会执行。在以前的版本中,的行为是在装入类和执行静态块之后查找main方法。

票数 24
EN

Stack Overflow用户

发布于 2013-07-06 14:52:40

是的,在jdk7中。静态块不是首先执行的。它首先查找应用程序中的入口点。

因此,它首先检查public static void main(String a[]),如果此方法不存在,则不会执行静态块。

票数 11
EN

Stack Overflow用户

发布于 2013-07-06 15:00:01

通过JLS 12.1

Java Virtual Machine通过调用某个指定类的方法main开始执行,并向其传递一个参数,该参数是一个字符串数组。在本规范的示例中,第一个类通常称为Test。

最初尝试执行类Test的方法main时,发现没有加载Test类-也就是说,Java虚拟机当前不包含该类的二进制表示。然后,虚拟机使用一个类加载器来尝试找到这样的二进制表示。

Java7查找public static main(String[] args)方法,这是应用程序的入口点,然后加载类,这与Java6加载类然后查找main方法不同。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17500469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档