黑马程序员技术交流社区

标题: 由一时疏忽得到的对javac 和java 命令的新认识 [打印本页]

作者: 刘士林    时间: 2012-10-3 15:05
标题: 由一时疏忽得到的对javac 和java 命令的新认识
class ForTest
{
     public static void main(String[] args)
    {
           w:   for(int x =0; x<4; x++)
                  {
                     q: for(int y=0; y<4; y++)
                         {
                            System.out.print("y="+y);
   
                            break w;
                        }

                 }

    }

}

写这个小程序原本是想验证一下break和标号一起使用时跳出循环的效果,但在保存时没注意,把文件保存成了forTest.java  ,然后就用javac编译了,编译通过,再用java命令运行时,报错了,
说找不到forTest.class文件。很纳闷,仔细一看才发现生成的class文件是ForTest.class  ,是大写的F ,原来java命令在运行.class文件时,是区分文件名的大小写的!
处于好奇,我想知道javac命令是不是也区分.java文件的大小写,就验证了一下,在DOS命令行中输入ForTest.java ,然后编译,结果编译通过,javac命令不区分.java文件的大小写!
通过这个意外的小插曲,我仔细琢磨了一下,得出如下感悟:
1:编译生成的.class文件的文件名和原类名保持一致,而和你保存的.java文件的文件名无关(前提是在没有public修饰符时)。
2:当类名被public 修饰时,保存的.java文件的文件名必须和类名保持一致,否则编译失败。
3:javac命令不区分.java文件名的大小写,大小写一样通过。
4:java 命令区分.class 文件文件名的大小写,写错运行失败。
虽然不是什么很重要的知识点,但是由于自己的疏忽而得到了新的认识,还是很高兴的。怪不得毕老师说,别怕出错,错误越多,知道的越多,此言非虚!
保持一颗好奇心,多实践多动手,知识自然有。



作者: 徐-星星    时间: 2012-10-3 15:12
顶一个!!加油!{:soso_e147:}
作者: 佘天宇    时间: 2012-10-3 15:17
娇赛赛 发表于 2012-10-3 15:12
顶一个!!加油!

很好哦,以前还真没注意到,加油
作者: 黑马连家华    时间: 2012-10-4 00:59
这些东西老师会讲的,没讲过的话...这老师真的不称职
不然就是你没认真听课.
不过懂了就好,面试时才见到就不好了
作者: 黑马-王燚    时间: 2012-10-4 11:10
我觉得有点不对吧,java命令若是属于 DOS命令的话  就是不区分大小写的,比如你 JAVAC  和 JAVA 这才叫DOS命令吧  跟你后面编译的  那个语法是属于java里面的了, javac 编译文件名而已,你 javac 文件名(大写小写都可以的)     但是你java命令是去 找javac生成.class文件中里面的类了, 这跟你大小写有什么关系, 这只能说明一点,java区分大小写!!!!!。    你class   A   和  class  a  在java中是同一个类么??   你用java本身想去找A的  结果不小心写成了a   JVM肯定找不到了。
作者: 夏天    时间: 2012-10-4 12:02
啦啦啦,马上升级金牌黑马~~ 是帖我就顶~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2