刚接触java,倒腾了半天设施好环境变量,控制台输入java、javac、java -version后,输出正确。终于可以编程序了,很激动,于是直接从老师发的现成的代码包里面考了一份(其实自己敲一个的话,就不用这么费劲,话又说回来,如果自己敲一份的话,自己也不会发现这个问题)。
执行了 cd.. 、cd chapter1转到所在文件夹
输入 :javac Hello.java 成功编译
紧接着输入:java Hello 抛出错误,无法加载主类,顿时心又凉了半截
在网上搜集本都是说环境变量classpath设置有误,可是我检查了好多遍,查了很多关于环境变量设置的具体操作,发现自己并没有写错。最后找到错误之处是我碰巧撞上了,哈哈哈,算是运气吧。在此分享一下。
原来的代码:
package chapter1.例子1;
public class Hello{
public static void main (String args[]){
System.out.println("这是一个简单的Java应用程序");
Student stu=new Student();
stu.speak("We are students");
}
}
class Student{
public void speak(String s){
System.out.println(s);
}
}
修改后:
public class Hello{
public static void main (String args[]){
System.out.println("这是一个简单的Java应用程序");
Student stu=new Student();
stu.speak("We are students");
}
}
class Student{
public void speak(String s){
System.out.println(s);
}
}
可以发现只是删除了这句话:
package chapter1.例子1;
为什么会这样?
首先,包名指的什么,其实简单理解包名就是一个又一个的文件夹,这些文件夹是嵌套关系,父文件夹和子文件夹之间用 '.'(英文句号)隔开。
如果一个类有包名,那么就不能在任意位置存放它,否则虚拟机将无法加载这样的类。
如果有一个这样的包名:package chapter1.例子1
那么存储文件的目录结构中必须含有如下结构:...\chapter1\例子1
按照这个原则修改文件夹
原存储路径:C:\chapter1\Hello.java
修改后:C:\chapter1\例子1\Hello.java
那含有包名的该怎么编译运行?
首先是编译:在 Hello.java 所在的文件夹下编译 javac Hello.java
然后运行之前,首先要转到包所在文件夹,对于这个程序来说就是 C 盘
然后 输入: java 包名.主类名 (java chapter1.例子1.Hello)