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

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

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

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

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命令的一些参数


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

然后根据提示,进行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();
	    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值