javac、java命令的使用

本文深入探讨了javac和java命令的高级用法,包括如何利用-javac-verbose和-java-verbose参数获取详细的编译和运行信息,正确设置类路径的方法,以及常见错误的解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单记述javac -verbose、-d 这两个主要参数、java的-verbose参数
采用问题驱动的方式表达

1、含有目录结构的.java源文件怎样在编译的时候同时生成目录结构
javac -d .\ HelloWrold.java
说明:-d 表示存放.class文件的目录。
javac -verbose HelloWorld.java
说明:-verbose 输出编译时详细信息,包括源文件和类文件的查找路径。

2、一、cmd进入命令行
二、cd d:\test
三、java -verbose HelloWorld
报错:
   
D:\test>java HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: com/mz/hw/HelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)


[color=red]错误原因说明:[/color]
java中的一个类是包名+类名唯一标志的。
[color=red][b]还不完全理解,望高手不吝赐教。[/b][/color]


3、怎样将一个.class文件加入到类路径中呢?
假定源文件在 c:\mylib\com\shinechina\MyClass.java

  编译后c:\mylib\com\shinechina\MyClass.class

  怎么指定classpath呢

  常见毛病

   1、c:\mylib\com\shinechina\

   2、c:\mylib\com\

  正确

   1、c:\mylib\

   2、c:\mylib


实际java代码如下(放在D:\test目录下):
package com.mz.hw;
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
System.out.println("HelloWorld的类加在器:"+HelloWorld.class.getClassLoader());

//启动类加载器
System.out.println("引导类(启动类)加载器加载的包:"+java.util.Arrays.asList(sun.misc.Launcher.getBootstrapClassPath().getURLs()).toString());


//系统类加载器
System.out.println("获得系统类加载器:"+ClassLoader.getSystemClassLoader());
System.out.println("获得系统类加载器的父类:"+ClassLoader.getSystemClassLoader().getClass().getSuperclass());
//查看系统类加载器加载了哪些类?
try{
ClassLoader cl = ClassLoader.getSystemClassLoader();
java.lang.reflect.Field classes = ClassLoader.class.getDeclaredField("classes");
classes.setAccessible(true);//修改字段的可访问权限.
java.util.List ret=(java.util.List)classes.get(cl);
System.out.println("系统类加载类列表:"+ret.toString());
}catch(Exception e){

}


//扩展类加载器
System.out.println("获得扩展类加载器:"+ClassLoader.getSystemClassLoader().getParent().getClass());
System.out.println("获得扩展类加载器的父类:"+ClassLoader.getSystemClassLoader().getParent().getClass().getSuperclass());



}
}



java基础知识好久不看了,很多都忘记了,还是在两年前学习的javac和java的用法,前些时候想要把几个class文件打成一个jar包,jar命令的使用方法已经不记得了,搞了好久才搞出来。对javac、java的加载原理也已经快忘完了。今天终于有时间将困扰我好久的问题解决了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值