欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javac,java使用时的一些小札记

程序员文章站 2022-05-23 10:13:36
...

很长时间以来,都在使用集成开发环境,突然开始使用javac编译java文件成class文件,再由java来运行这个class文件的时候,会有一些迷茫。

经过两天的时间,初步完成最近的一个任务后,决定来整理下。

-->了解javac命令的一些参数

javac,java使用时的一些小札记

1)java文件的编码为utf-8,在编译时,可以使用-encoding进行编码指定

javac -encoding UTF-8 ReceiveMessage.java

2)java文件import了许多package,在编译时,可以使用-cp进行用户类文件和注释处理程序的位置指定

javac -cp .;D:\receive\lib\test.jar ReceiveMessage.java

Tips:

            在windows下,文件路径的分割符为反斜杠---\,类或者java文件列表的分割符为分号 ;

            在linux下,文件路径的分隔符位斜杠 ---/,类或者java文件列表的分隔符为冒号 :

-->了解java命令的一些参数

javac,java使用时的一些小札记

1)如果javac的时候使用-cp指定了一些文件,则java的时候也需要使用-cp进行指定

java -cp .;D:\receive\lib\test.jar ReceiveMessage

2)java的时候,可能会报一些错误,需要使用-Xlint:deprecation来查看详情,此时,只需要在java后加入这个就好了的

java -cp .;D:\receive\lib\test.jar -Xlint:deprecation ReceiveMessage

javac,java使用时的一些小札记

然后根据提示,进行debug就好了的

3)可能会遇到的两个错误,注意区分二者是不同的

错误1:java.lang.NoClassDefFoundError ;错误2:java.lang.ClassNotfoundException

其中,错误1:java.lang.NoClassDefFoundError发生在JVM在动态运行时,根据提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就会发生java.lang.NoClassDefFoundError错误,而错误2:ClassNotFoundException是在编译的时候在classpath中找不到对应的类而产生的错误。

所以,如果编译没有问题,而运行时出现了问题,就要考虑一件事,是否运行的时候,没有加入-cp及相应的参数,以至于无法找到这些类。

错误1可能出现的场景有:

  1.类依赖的class或者jar不存在

  2.类文件存在,但是存在不同的域/包中

    如果类依赖的class或者jar不存在,可以考虑使用-cp的方式,加入进去,就可以的了;如果类文件存在,但是存在不同的域或者包中,可以考虑javac的时候,加入一个-d . ,java的时候指定java com.tong.test.ReceiveMessage,这样就可以找到了。

不同域或包中,比如加入了一个package com.tong.test;在文件的最顶部。

错误2可能出现的场景有:

  1.调用class.forName();方法时,没有找到指定的类

  2.调用ClassLoader的findSystemClass() 方法时,没有找到指定的类

  3.调用ClassLoader的loadClass() 方法时,没有找到指定的类

   如果没有找到指定的类,可以考虑使用-cp的方式,加入进去,就可以的了;也有可能是在使用class.forName();的时候,没有将其放在try{}catch(){}中,而导致的,此时,需要将其放入try()catch{}中,也要注意,这时的错误提示往往是没有哪个class没有发现的。

	try
	    {
		Class.forName("org.gjt.mm.mysql.Driver");
	    }
        catch(Exception e)
	    {
		e.printStackTrace();
	    }


相关标签: javac java