1、能否在一个类中调用另一个类里的方法?
me.java中写2个calss代码如下:
class me
{
public static void main(String[] args)
{
// 在me这个类里调用myname类的静态方法
myname.showName();
}
}
class myname
{
public static void showName()
{
System.out.println("my name is jack");
}
}
编译:终端执行
javac me.java
运行me这个类:
java me
终端控制台输出my name is jack。
这说明在我们同一个文件目录下,可以互相调用。
如果我们删除myname.class这个文件,肯定就不能运行me这个类了,会报如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: myname
at me.main(me.java:6)
Caused by: java.lang.ClassNotFoundException: myname
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
在我们的开发中一般不会在一个文件里写多个class,我们把me类和myname类的代码拆分成2个文件:me.java和myname.java
然后编译me.java:
javac me.java
发现同样生成了me.class和myname.class这2个二进制文件。
这是因为在我们的me类中调用了myname类里的showName()方法。
class me
{
public static void main(String[] args)
{
//myname.showName();
}
}
如果我们在me类不涉及到myname类,那么编译me.java就只是生成me.class文件,不会生成myname.class文件。
创建包(package)
我们的java文件不可能都只是一个在目录下,所以我们现在创建一个叫my的子目录,把myname.java文件移动到该目录下。
此时myname.java代码肯定要有所变化了,注意看:
package my;
// 注意:因为现在myname和me不同包(pagckage)
// 所以要加上修饰符
public class myname
{
public static void showName()
{
System.out.println("my name is jack");
}
}
然后我们编译:
javac me.java
生成了各自的.class文件:
有逼格的编译
现在我们的.class文件和.java文件,编译之后都是混合在一起,太不好看了。
1.把编译出来的.class文件放到指定的目录
javac -d target me.java
#首选确保你有这个target文件夹
这样就把.class文件都编译到target目录下了,并且还保持了包文件夹。
为了目录结果的美观,一般把源码文件放到一个叫src的文件夹里:
把.java源码文件移动到src目录下。
然后编译:
javac -d target -sourcepath src src/me.java
运行:
cd target/
java me
本文详细介绍了在Java中如何实现一个类调用另一个类的方法,包括在同一文件中调用和跨文件调用的情况。此外,还介绍了如何通过包的概念管理和组织类文件,以及高级的编译技巧。

被折叠的 条评论
为什么被折叠?



