笔者用的是Macos系统。
今天开始学习java,兴致很高的写了个Java版本 hello world的程序,期待着在terminal出现这个神奇的字样。悲伤的是出现这个
Exception in thread "main" java.lang.NoClassDefFoundError: Person
Caused by: java.lang.ClassNotFoundException: Person
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
找不到这个类名。很奇怪。
现在来看看java程序运行过程的解析
java是通过java虚拟机来解释运行的,也就是通过java命令,javac编译声称的.class文件就是虚拟机要执行的代码,也可以叫字节码。然后虚拟机通过classloader来装载这些字节码,也可以叫类。但是classloader哪里知道自己的类库或者你定义的类在哪里的。所以就出现了classpath这个参数来告诉classloader这些类在哪.
如何设置参数:
macos下设置环境变量可以在~/.profile里面设置,也可以在~/.bash_profile里面设置.
java有三个参数.JAVA_HOME,Path,classpath
1.JAVA_HOME.jdk安装路径.如果path,classpath使用的是绝对路径,可以不用在环境变量中添加JAVA_HOME
2.Path:道理很简单, 你想在任何时候都使用%JAVA_HOME%\bin\java 等来执行java命令吗。所以就设置好这个,你就可以直接使用java命令,操作系统会在当前目录的PATH变量目录查找相应应用的程序并且执行
3.CLASSPATH:确定你类的路径在哪里.这个变量设置的目的是为了程序能找到相应的.class文件
最后我在.profile文件加上这个
.代表当前路径
输入javac Person.java获得.class文件.再输入java Person
成功!