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 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿