每天开心一点

关于怎么解决java.lang.NoClassDefFoundError错误

2019-10-15 06:52:00    六月    1219    来源: https://blog.csdn.net/u013452335/article/details/84102972

NoClassDefFoundError错误发生的原因

NoClassDefFoundError和ClassNotFoundException区别

怎么解决NoClassDefFoundError错误

如何解决"找不到或无法加载主类"  ==> 找不到 class文件

JAVA,类StaticInitDemo是公共的,应在名为StaticInitDemo.java的文件中声明

==>JAVA的类文件名,如果里面有pulbic类,那这个java文件名一定和这个public名字相同。一个JAVA文件里面有且只有一个public的class的。


错误:在类MyClass中找不到主方法,请将主方法定义为public static void main(String [] args)

==>

当您使用java 命令从命令行运行Java应用程序,例如,

java some.AppName arg1 arg2 ...

该命令加载您指定的类,然后查找调用的入口点方法。main ..更具体地说,它正在寻找一种声明如下的方法:

package some;public class AppName {
    ...
    public static void main(String[] args) {
        // body of main method follows
        ...
    }}

入境点法的具体要求是:

  1. 方法必须在指定的类中。

  2. 方法的名称必须是“main”

    一点儿没错

    资本化

    1.

  3. 方法必须是

    public .

  4. 方法必须是

    static   2.

  5. 方法的返回类型必须是

    void .

  6. 该方法必须有一个参数,并且参数的类型必须是

    String[]   3.

(论点) 可以,可能使用varargs语法声明;String... args ..看见 这个问题想了解更多信息。这个String[] 参数用于从命令行传递参数,即使应用程序不使用命令行参数,也是必需的。)

如果上述任何一项要求没有得到满足,java 命令将在消息的某些变体中失败:

Error: Main method not found in class MyClass, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

或者,如果您正在运行一个 Java的旧版本:

java.lang.NoSuchMethodError: main
Exception in thread "main"

如果遇到此错误,请检查是否有main 方法,并使其满足上述所有6项要求。


其中一个很难理解的变化是,当“main”中的一个或多个字符不是拉丁文-1字符时.但是一个Unicode字符 看上去显示时相应的拉丁文-1字符。

2-见 为什么Java Main方法是静态的?以解释为什么要求该方法是静态的。

3 - String 必须对应于java.lang.String 而不是名为String 把它藏起来。

参考: http://www.imooc.com/wenda/detail/567430

可否将两个class写在一个文件中?

可以的,java中class的写法有4种,第一种是public class XXX{},第二种是非public类,例如:
public class A{}
class B{}
第二个class前面不能加public,
第三种是内部类,写在公共类体里面的,例如:
public class A{
 private class B{}

只有A能调用B,
第四种是匿名内部类,一般在awt编程中比较多,位于方法体内部,一般用于只调用一次或者只有这个方法调用,例如:
public class A{
 public void c(){
   this.addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent e){
   System.exit(0);
  }
   });
 }

匿名内部类没有类名,在方法体内部声明,该例子是awt中的窗口关闭监听器,用于监听鼠标是否触发Window的关闭按钮