hust_jixing 2019-08-18 08:55 采纳率: 0%
浏览 279

关于java package的疑惑

//package com.antiy;

abstract class animal {
    public abstract void eat();
    public abstract void run();
}

class human extends animal {
    human(){}

    public  void eat(){
        System.out.println("Human eat");
    }

    public void run(){
        System.out.println("Human run");
    }
}
public class Hello {
    public static void main(String[] args){
        System.out.println("Hello");
        human o1 = new human();
        Hello.do_eat(o1); 
    }

    static void do_eat(animal o){
        o.eat();
    }
}

在Hello.java中包含如上代码,编译和运行都正常:

wangbo@wangbodeMBP:/tmp/java_project$ cat Hello.java
//package com.antiy;

abstract class animal {
    public abstract void eat();
    public abstract void run();
}

class human extends animal {
    human(){}

    public  void eat(){
        System.out.println("Human eat");
    }

    public void run(){
        System.out.println("Human run");
    }
}
public class Hello {
    public static void main(String[] args){
        System.out.println("Hello");
        human o1 = new human();
        Hello.do_eat(o1);
    }

    static void do_eat(animal o){
        o.eat();
    }
}


wangbo@wangbodeMBP:/tmp/java_project$ javac Hello.java
wangbo@wangbodeMBP:/tmp/java_project$ java Hello
Hello
Human eat

如果把package放开,编译没有问题,运行会提示human类找不到:

wangbo@wangbodeMBP:/tmp/java_project$ cat Hello.java
package com.antiy;

abstract class animal {
    public abstract void eat();
    public abstract void run();
}

class human extends animal {
    human(){}

    public  void eat(){
        System.out.println("Human eat");
    }

    public void run(){
        System.out.println("Human run");
    }
}
public class Hello {
    public static void main(String[] args){
        System.out.println("Hello");
        human o1 = new human();
        Hello.do_eat(o1);
    }

    static void do_eat(animal o){
        o.eat();
    }
}


wangbo@wangbodeMBP:/tmp/java_project$ javac Hello.java
wangbo@wangbodeMBP:/tmp/java_project$ cp Hello.class com/antiy/
wangbo@wangbodeMBP:/tmp/java_project$ java com/antiy/Hello
错误: 无法初始化主类 com.antiy.Hello
原因: java.lang.NoClassDefFoundError: com/antiy/animal

如果把package放开,把human相关的代码注释掉也可以正常运行:

wangbo@wangbodeMBP:/tmp/java_project$ cat Hello.java
package com.antiy;

abstract class animal {
    public abstract void eat();
    public abstract void run();
}

class human extends animal {
    human(){}

    public  void eat(){
        System.out.println("Human eat");
    }

    public void run(){
        System.out.println("Human run");
    }
}
public class Hello {
    public static void main(String[] args){
        System.out.println("Hello");
        //human o1 = new human();
        //Hello.do_eat(o1);
    }

    static void do_eat(animal o){
        o.eat();
    }
}


wangbo@wangbodeMBP:/tmp/java_project$ javac Hello.java
wangbo@wangbodeMBP:/tmp/java_project$ cp Hello.class com/antiy/
wangbo@wangbodeMBP:/tmp/java_project$ java com/antiy/Hello
Hello

我知道优雅的java工程不会把两个类放在一个java文件中,但是两个类放在一个java文件系统也可以支持

我的疑惑是如上代码,如果放开package为什么runtime会提示human类找不到 ?

  • 写回答

1条回答 默认 最新

  • JonathanYan 2019-08-18 09:51
    关注

    你确定不放开package运行没问题?human的构造函数是私有没问题?.java的文件路径和package写的一样?

    评论

报告相同问题?

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示