代码好像没错,但是编译遇到问题

共享OK 2019-09-14 07:50:39
很奇怪,不知道怎么回事?能给出原因么?先谢了

package pkg1.pkg2;
public interface Common {
int getAge(int i);
}


package pkg1;
import pkg1.pkg2.*;
public class Man implements Common {
public int getAge(int i) {
return i;
}
}


import pkg1.pkg2.*;
import pkg1.*;
import java.lang.*;
public class Result {
public static void main(String args[]) {
int age, i;
i = Integer.parseInt(args[1]);
try {
Man m = new Man();
Common d = (Common) m;
age = d.getAge(i);
System.out.println("Man age: "+ age);
}
catch(Exception e) {
System.out.println("class not found");
}
}
}
...全文
1335 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2019-09-17
  • 打赏
  • 举报
回复
同文件夹下有man 类, 你自己又导入了一个pgk.man类,但是你在初始化时,并没有说清要用那个man类,造成编译程序不知道用哪个类所以编译报错。
qq_39936465 2019-09-17
  • 打赏
  • 举报
回复
同文件下的类不用导入可以直接调用,你先好好把建立项目基础学一下,先学会怎么保存文件。
qq_39936465 2019-09-17
  • 打赏
  • 举报
回复
引用 24 楼 尽管解绑 的回复:
[quote=引用 23 楼 qq_39936465 的回复:] 简单来说,你可以认为包就是文件夹结构。你把包名不同的2个文件放在同一个文件夹下,肯定会出问题。
编译完Man.java后的目录结构 E:. │ Man.java │ Result.java │ └─pkg Man.class Result 没有包名,java Result.java 报错 请看6楼的代码[/quote] 你要把man.java ,也放到pkg文件夹下或删除,当result.java被编译时,如果man类没编译的话也会自动编译man.java,你现在2个man类系统会分不清楚的。要么你直接写pkg.Man man= new pkg.Man();告诉编译程序用那个类。
共享OK 2019-09-17
  • 打赏
  • 举报
回复
引用 23 楼 qq_39936465 的回复:
简单来说,你可以认为包就是文件夹结构。你把包名不同的2个文件放在同一个文件夹下,肯定会出问题。


编译完Man.java后的目录结构
E:.
│ Man.java
│ Result.java

└─pkg
Man.class

Result 没有包名,java Result.java 报错
请看6楼的代码
qq_39936465 2019-09-16
  • 打赏
  • 举报
回复
引用 15 楼 尽管解绑 的回复:
其实他俩就在同一目录下,忘了说了
你代码都没问题了,是引用包名的路径问题吧,1个有包名,1个没包名。在同一个路径下cmd编译肯定有问题啊,除非修改path中的默认路径,这跟jdk设置路径是一个道理,不然怎么找到java.lang包!
qq_39936465 2019-09-16
  • 打赏
  • 举报
回复
简单来说,你可以认为包就是文件夹结构。你把包名不同的2个文件放在同一个文件夹下,肯定会出问题。
qq_39936465 2019-09-16
  • 打赏
  • 举报
回复
引用 21 楼 尽管解绑 的回复:
1楼代码作废,已经精简为6楼代码,主要是解释编译出错问题。 path, classpath 都已经完成设置,加了 classpath=.; 的内容
你还是没理解包名的意义 类放在包中会有两种主要的结果: 包名成为类名的一部分。 包名必须与相应的字节码所在的目录结构相吻合。 你再同一个文件夹下默认就是同一个包中,你怎么从他包中导入类?要么你把父类的包名去掉,要么在当前文件夹下再建个pak文件夹,把父类放入其中
共享OK 2019-09-16
  • 打赏
  • 举报
回复
引用 18 楼 weixin_41990241 的回复:
你的数组默认为空 所以args[1]肯定报错


1楼代码作废,已经精简为6楼代码,主要是解释编译出错问题。
path, classpath 都已经完成设置,加了 classpath=.; 的内容
共享OK 2019-09-16
  • 打赏
  • 举报
回复
引用 17 楼 ruidianbaihuo 的回复:
看来看去,就是没有配置claasspath。。


1楼代码作废,已经精简为6楼代码,主要是解释编译出错问题。
path, classpath 都已经完成设置,加了 classpath=.; 的内容
共享OK 2019-09-16
  • 打赏
  • 举报
回复
引用 16 楼 qq_39936465 的回复:
[quote=引用 15 楼 尽管解绑 的回复:]
其实他俩就在同一目录下,忘了说了


你代码都没问题了,是引用包名的路径问题吧,1个有包名,1个没包名。在同一个路径下cmd编译肯定有问题啊,除非修改path中的默认路径,这跟jdk设置路径是一个道理,不然怎么找到java.lang包![/quote]

1楼代码作废,已经精简为6楼代码,主要是解释编译出错问题。
path, classpath 都已经完成设置,加了 classpath=.; 的内容
weixin_41990241 2019-09-16
  • 打赏
  • 举报
回复
你的数组默认为空 所以args[1]肯定报错
不去上课 2019-09-16
  • 打赏
  • 举报
回复
看来看去,就是没有配置claasspath。。
共享OK 2019-09-15
  • 打赏
  • 举报
回复
引用 14 楼 逝水流年风萧兮 的回复:
[quote=引用 13 楼 尽管解绑 的回复:]
javac *.java
javac -d . *.java
报错

抱歉没注意你这两个类不是在同一个文件夹下,你这个应该这样写
javac pkg/Man.java Result.java
[/quote]
其实他俩就在同一目录下,忘了说了
  • 打赏
  • 举报
回复
引用 13 楼 尽管解绑 的回复:
javac *.java
javac -d . *.java
报错

抱歉没注意你这两个类不是在同一个文件夹下,你这个应该这样写
javac pkg/Man.java Result.java
共享OK 2019-09-15
  • 打赏
  • 举报
回复
引用 12 楼 逝水流年风萧兮 的回复:
[quote=引用 11 楼 尽管解绑 的回复:]

我先编译了 javac -d . Man.java
然后,javac Result.java
报错

这么解释吧,import引用的是打包好的类,不是源文件,所以你先编译的Man在Result中引用不了,必须同时编释才行,你先编译了 javac -d . Man.java对后面javac Result.java是不起作用的[/quote]
javac *.java
javac -d . *.java
报错
  • 打赏
  • 举报
回复
引用 11 楼 尽管解绑 的回复:
我先编译了 javac -d . Man.java
然后,javac Result.java
报错

这么解释吧,import引用的是打包好的类,不是源文件,所以你先编译的Man在Result中引用不了,必须同时编释才行,你先编译了 javac -d . Man.java对后面javac Result.java是不起作用的
共享OK 2019-09-15
  • 打赏
  • 举报
回复
引用 10 楼 逝水流年风萧兮 的回复:
javac Result.java 报错是因为代码里包含了Man这个类,你不能直接这样编译,改为 javac *.java,必须要全部类同时编译才行


我先编译了 javac -d . Man.java
然后,javac Result.java
报错
  • 打赏
  • 举报
回复
javac Result.java 报错是因为代码里包含了Man这个类,你不能直接这样编译,改为 javac *.java,必须要全部类同时编译才行
共享OK 2019-09-14
  • 打赏
  • 举报
回复
引用 7 楼 逝水流年风萧兮 的回复:
[quote=引用 6 楼 尽管解绑 的回复:]
[quote=引用 5 楼 逝水流年风萧兮 的回复:]
有可能是参数Man和8都没传入,你可以试试打印args长度看看


csdn 太差劲了,也不能修改主贴,我又简化了一下,改成两个程序


package pkg;
public class Man {
public int getAge(int i) {
return i;
}
}



import pkg.*;
public class Result {
public static void main(String args[]) {
try {
Man m = new Man();
System.out.println("Man age: "+ m.getAge(8));
}
catch(Exception e) {
System.out.println("class not found");
}
}
}


应该类文件的关系是父子目录的关系,为什么错误,原因是什么?[/quote]你这是用IDE写的还是记事本写完用cmd编译的,如果是IDE写的,请道理是必须写package的,如果是记事本写完用cmd编译的,能不能贴下错误[/quote]

引用 7 楼 逝水流年风萧兮 的回复:
[quote=引用 6 楼 尽管解绑 的回复:]
[quote=引用 5 楼 逝水流年风萧兮 的回复:]
有可能是参数Man和8都没传入,你可以试试打印args长度看看


csdn 太差劲了,也不能修改主贴,我又简化了一下,改成两个程序


package pkg;
public class Man {
public int getAge(int i) {
return i;
}
}



import pkg.*;
public class Result {
public static void main(String args[]) {
try {
Man m = new Man();
System.out.println("Man age: "+ m.getAge(8));
}
catch(Exception e) {
System.out.println("class not found");
}
}
}


应该类文件的关系是父子目录的关系,为什么错误,原因是什么?[/quote]你这是用IDE写的还是记事本写完用cmd编译的,如果是IDE写的,请道理是必须写package的,如果是记事本写完用cmd编译的,能不能贴下错误[/quote]

Result.java:5: 错误: 无法访问Man
Man m = new Man();
^
错误的源文件: .\Man.java
文件不包含类Man
请删除该文件或确保该文件位于正确的源路径子目录中。
1 个错误
共享OK 2019-09-14
  • 打赏
  • 举报
回复
引用 7 楼 逝水流年风萧兮 的回复:
应该类文件的关系是父子目录的关系,为什么错误,原因是什么?
你这是用IDE写的还是记事本写完用cmd编译的,如果是IDE写的,请道理是必须写package的,如果是记事本写完用cmd编译的,能不能贴下错误[/quote]

记事本写的
javac -d . Man.java 通过
javac Result.java 报错:
Result.java:8: 错误: 无法访问Man
Man m = new Man();
^
错误的源文件: .\Man.java
文件不包含类Man
请删除该文件或确保该文件位于正确的源路径子目录中。
1 个错误
加载更多回复(7)

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧