1、javac(编译java源文件)

  javac是用来编译.java文件的。

  例子:

  package com.fjassa.domain;  public class Human、public class Chinese extends Human   #Chinese继承Human

  package com.fjassa.dao;  public class UserDao(private Human human)  #UserDao类持有Human成员

       如何编译Human类、Chinese类?

    javac -d tbin src/com/fjassa/domain/Human.java  #编译Human.java到tbin目录下

              javac -d tbin src/com/fjassa/domain/Chinese.java  #报错,找不到Human.class,为什么?我们刚刚明明把Human编译到tbin下面了,其实呢,javac编译的时候是需要依赖jar包的,默认的classpath会自动记载${JAVA_HOME}/jar下的所有jar包。这就是我们在使用jdk内置java对象的时候,不会报错的原因,如果需要编译依赖spring包的类,那么classpath需要指定所需spring的jar包                        

    javac -classpath tbin/ -d tbin src/com/fjassa/domain/Chinese.java  #Ok

              注意一点:在linux下classpath用:分割,在windows下用;分割

              javac -classpath .:tbin/ -d tbin src/com/fjassa/domain/Chinese.java  #linux

         javac -classpath .;tbin/ -d tbin src/com/fjassa/domain/Chinese.java  #linux

       如何一次性编译上述这些互相依赖的类?

             javac -d sbin/ src/com/fjassa/*/*   # -d表示编译后存放的文件目录,上述存在依赖关系,也就是说如果要编译Chinese类必须先编译Human,要编译UserDao类必须编译Human,所以一次性编译这些类,让javac自己去判断依赖,如果单独编译一个Chinese.java,会报Human类未编译错误。

2、java(运行java对象)

  运行编译后的.class字节码java对象。       

       java -Xmx500m -Dlog.dir=/tmp/zzz -classpath .:/tmp/java/libb com.fjsaas.demo

       java jar test.jar #classpath在jar包中的META-INF/MANIFEST.MF Class-Path属性指定,-classpath指定无效,运行的java对象则由Main-Class属性指定

  例子:

    cd tbin/下

       java -classpath . com.fjassa.dao.UserDao #运行成功