一、java和javac命令行
(1)javac命令行
javac.exe用于编译java源文件,生成.class文件
语法:javac [option] source
常用的[option]选项:
A、-classpath <路径>(-cp缩写):指定要使用的类路径或要使用的jar包的路径(jar文件、zip文件(里面都是错啦搜索文件)),使用后
会覆盖CLASSPATH的设定
B、-d <路径> :指定源文件编译后生成.class文件的存放位置
(2)java命令行
java.exe用于运行javac编译后生成的.class文件
语法:java [option] classname [arguments]
常用的[option]选项:
A、-classpath <路径>(-cp缩写):指定要使用的类路径或要使用的jar包的路径(jar文件、zip文件(里面都是错啦搜索文件)),使用后
会覆盖CLASSPATH的设定
B、[arguments]:传递给main函数的参数二、例子
(1)单独一个java程序
Demo.java
public class Demo{ public static void main(String args[]){ System.out.println("This is a test"); } }
javac Demo.java-----------在当前目录下生成Demo.class文件
java Demo-------------------执行Demo.class
也可以通过-d选项指定生成.class文件的位置,如:
javac -d .. Demo.java ,则就会在当前目录的上一级目录上生成Demo.class文件,那么执行的时候,就要指定class的路径
java -cp .. Demo,表示让java在上一级目录搜索类文件
(2)一个带包的java程序
Demo.java
package com.demo; public class Demo{ public static void main(String args[]){ System.out.println("This is a test"); } }同样,现编译文件:
javac Demo.java-----------在当前目录下生成Demo.class文件
java Demo-------------------执行Demo.class
也可以通过-d选项指定生成.class文件的位置,如:
javac -d . Demo.java-----------按照com.demo的包路径保存.class文件
则会在当前目录下生成一个com/demo/Demo.class文件,如下图:
那么在执行的时候,也要指定类文件的路径:
javac com/demo/Demo或者javac com.demo.Demo
(3)同一个包下,一个类调用另一个类
Tom.java
package com.demo; public class Tom{ public String getMyname(){ return "This is Tom!"; } }
Friend.java
package com.demo; import com.demo.Tom; public class Friend{ public static void main(String args[]){ Tom tom = new Tom(); System.out.println("hello "+tom.getMyname()); } }由于Friend类条用了Tom类,首先要现编译Tom.java:javac -d . Tom.java,然会会按照包结构生成com/demo/Tom.class文件。
接下来编译Friend.java文件:javac -cp . -d . Friend.java,javac会根据,import com.demo.Tom;这个路径到 -cp 指示的 "."当前目录下寻找,然后按照包结构生成com/demo/Friend.class,见下图:
运行:java com.demo.Friend
(4)一个包下的类条用另一个包下的类
Tom.java
package com.demo1; public class Tom{ public String getMyname(){ return "This is Tom!"; } }
Friend.java
package com.demo2; import com.demo1.Tom; public class Friend{ public static void main(String args[]){ Tom tom = new Tom(); System.out.println("hello "+tom.getMyname()); } }还是一样,现编译Tom.java,javac -d . Tom.java,生成com/demo1/Tom.class;
然后编译Friend.java,javac -cp . -d . Friend.java,生成com/demo2/Friend.class;
运行:java com.demo2.Friend;
(5)更接近项目的java工程
一般,一个工程下面都会有lib(引入的必要jar包),classes(保存.class文件),src(.java源代码)三个文件夹。
java文件夹的目录结构如下,文件之间的关系是Client.java调用了DemoService.java的方法;ServerImpl.java调用了DemoService.java的方法;Server.java调用了ServerImpl.java和DemoService.java的方法;
下面的文件,我只显示他们引用的包和类。
src/com/client/Client.java:
package com.client; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import com.demo.DemoService; public class Client { ................................................................................. }src/com/demo/DemoService.java:
/** * Autogenerated by Thrift Compiler (0.9.0) * * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING * @generated */ package com.demo; import org.apache.thrift.scheme.IScheme; import org.apache.thrift.scheme.SchemeFactory; import org.apache.thrift.scheme.StandardScheme; import org.apache.thrift.scheme.TupleScheme; import org.apache.thrift.protocol.TTupleProtocol; import org.apache.thrift.protocol.TProtocolException; import org.apache.thrift.EncodingUtils; import org.apache.thrift.TException; import java.util.List; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import java.util.EnumMap; import java.util.Set; import java.util.HashSet; import java.util.EnumSet; import java.util.Collections; import java.util.BitSet; import java.nio.ByteBuffer; import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DemoService { ................................................................. }src/com/server/Server.java:
package com.server; import org.apache.thrift.TProcessor; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TSimpleServer; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException; import com.demo.DemoService; import com.server.ServerImpl; public class Server { .................................................................................. }make.sh脚本如下:
#!/bin/bash # Get current position TOP_DIR=$(pwd) # Add all necessary jars LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar:lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar:lib/junit-4.4.jar:lib/libthrift-1.0.0.jar:lib/log4j-1.2.14.jar:lib/servlet-api-2.5.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar #compile java file javac -cp $LIBPATH src/com/demo/DemoService.java -d ./classes/. javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/ServerImpl.java -d ./classes/. javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/Server.java -d ./classes/. javac -cp $TOP_DIR/classes:$LIBPATH src/com/client/Client.java -d ./classes/.
run.sh脚本如下:
#!/bin/bash #Get client/server SIDE=$1 # Get current position TOP_DIR=$(pwd) # Add all necessary jars LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar:lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar:lib/junit-4.4.jar:lib/libthrift-1.0.0.jar:lib/log4j-1.2.14.jar:lib/servlet-api-2.5.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar #run program if [ $SIDE == "server" ];then java -cp $TOP_DIR/classes:$LIBPATH com/server/Server else java -cp $TOP_DIR/classes:$LIBPATH com/client/Client fi进入thriftDemo文件夹下,执行./make.sh脚本,在classes文件夹下生成的文件如下:
参考:wenku.baidu.com/view/f4c19dbc65ce0508763213c6.html