javac、java命令的使用

简单记述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)


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


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的加载原理也已经快忘完了。今天终于有时间将困扰我好久的问题解决了。

你可能感兴趣的:(java,C++,c,.net,C#)