手工创建包(package)、有逼格的编译

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.javamyname.java
然后编译me.java

javac me.java

发现同样生成了me.classmyname.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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值