java学习记录之import,CLASSPATH

1. import是干什么的

导入不同的包下面的类,告诉java类是在哪个包目录下面

2. 实际的例子

例子的目录结构

lydia@lydia:~/sgy/java_learn/package_import_learn$ tree -A
.
├── Learn.java
├── lisi
│   └── Learn.java
└── zhangsan
    └── Learn.java

2 directories, 3 files

zhangsan/Learn.java

package zhangsan;

public class Learn {
        public static void zhangsan_print () {
                System.out.println("zhangsan");
        }
};

lisi/Learn.java

package lisi;

public class Learn {
        public static void lisi_print () {
                System.out.println("lisi!");
        }
};

工程目录下面的Learn.java

import zhangsan.*;
import lisi.*;
public class Learn {
        public static void main (String args[]) {
                System.out.println("hello!");

                zhangsan.Learn.zhangsan_print();
                lisi.Learn.lisi_print();
        }
};

编译的命令

javac lisi/Learn.java
javac zhangsan/Learn.java
javac Learn.java

执行输出的结果

lydia@lydia:~/sgy/java_learn/package_import_learn$ java Learn
hello!
zhangsan
lisi!

目录太多,能不能打包成一个压缩文件

jar -cvf my.jar zhangsan/ lisi/

但是这个时候执行找不到这些类

lydia@lydia:~/sgy/java_learn/package_import_learn$ java Learn
hello!
Exception in thread "main" java.lang.NoClassDefFoundError: zhangsan/Learn
        at Learn.main(Learn.java:8)
Caused by: java.lang.ClassNotFoundException: zhangsan.Learn
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
        ... 1 more
lydia@lydia:~/sgy/java_learn/package_import_learn$

需要重新设置一下CLASSPATH

export CLASSPATH=.:my.jar

之后能够正常输出结果

发布了17 篇原创文章 · 获赞 3 · 访问量 3541

猜你喜欢

转载自blog.csdn.net/sgy1993/article/details/104545070