在刚开始学java的时候,从dos命令行(这里只针对Windows环境下)执行Java程序是一个很不错的尝试。现在大体总结下自己在尝试后遇到的一些问题,及解决办法。
首先,通过命令行查看是否安装Java程序,以及打印classpath和java_home变量:
通过这三个,就可以得知你环境配置是否ok
如果执行java -version报错 或者说找不到,那应该是没有配置java path环境,请自行百度配置。
Java相关的术语说明
这里仅说明下今天的主题:classpath,至于java_home和path请自行百度。
设置CLASSPATH:
这个变量设置很重要,它的作用就是 在执行java xxx.class的时候,告诉jvm去那个目录下找这个xxx去执行。下文主要围绕这个来说明一些问题。
现在,开始我们一个Java简单程序的编写:
1.在桌面右键简历一个Hello.java
/**
*author:九易扬
*/
//package com.godsdk;
public class Hello{
public static void main(String[]args){
//System.out.println("hello world : hello");
}
}
class _a{
public static void main(String[]args){
System.out.println("hello world:_a");
}
}
class 1Test{
public static void main(String[]args){
System.out.println("hello world:1Test");
}
}
class hello{
public static void main(String[]args){
System.out.println("hello world:hello");
}
}
我们看到 ,我们在这个名为Hello.java文件中写了几个类,Hello、_a、1Test、hello;
现在我们,对该文件进行编译下:
报错了,相信都清楚这个问题,这个主要是说明下 类名 的一些命名问题,至于具体就不想详述了,但要强调一点,如下问,我们把1Test给干掉,然后在编译:
奇怪,怎么没声称hello.class,先不管,执行一把先。
现象很奇怪,这里有两个问题:
1.桌面明明存在编译后的Hello.class,但在执行java Hello的时候报错了。
2.执行java hello的时候,是可以执行的,并且输出hello类中的输出;
现在 我们把详细信息打印出来瞧瞧:
!!!!! 报ClassNotFound
也就是说 没有找到Hello,但却找到了hello。这里就说明hello把Hello给覆盖了;所以Java类名在编译的时候大小写不敏感。
Java的一些规定
1、若在源文件中定义了声明为public的类,需要将类所在的源文件的文件名取名为类名
2、在同一个源文件中有且只能有一个定义为public的类
3、编译时文件名大小写是不敏感的,执行的时候加载的类名是大小写敏感的
但是在执行的时候大小写铭感的
所以,上文中 后面的hello把Hello给覆盖了,在执行的时候执行java Hello的时候就报错了。
下面,说另一个问题,上文中,我在执行的时候 写过 cd Desktop
这一句的作用是什么呢。从最上面大家看到我的classpath环境为“.”,其表示为当前目录
而最初的我的目录是:
dir:C:\Users\Administrator
也就是说 ,我的classpath=”C:\Users\Administrator”
执行之后 我的目录是:
dir:C:\Users\Administrator\Desttop
classpath=”C:\Users\Administrator\Desttop”
-
关注的一点来了,因为我的.class文件在
- C:\Users\Administrator\Desttop这个目录,所以 如果我在 最初的dos环境下执行 java hello的话,jvm默认就会去 C:\Users\Administrator路劲下去找hello.class,所以执行就报错了。
这个,可以手动试试
当然,如果有人非要在 C:\Users\Administrator去执行 C:\Users\Administrator\Desttop目录下的hello.class,
可以这样
上文中 我把Desktop携程Desttop,请自改之。
从这里 执行cmd可以看出 采用
Java -cp C:\Users\Administrator\Desktop hello hello world:hello可以就执行了,其中-cp就是指定classpath环境变量,即classpath所在目录。
2.带package 编译
首先将上文中的Hello.java文件中的package那一行的注释去掉,然后执行
就会发现按包名目录来生成想要的class文件。
扩展一点,其实在windows环境下包名也可以大写,但最好不要在正式工程中尝试。
这是因为为了适应不同的操作系统而做的改变吧。因为Unix系的操作系统是大小写敏感的,所以如果在操作系统中”COM”和”com”两个文件夹被认为是两个不同的文件夹;而在Windows操作系统中,大小写是不敏感的,因此”COM”和”com”两个文件夹为被认为是同一个文件夹。正因为这样,如果有人正好在Unix系的操作系统下写了两个包名。