第十章 开发
10.1 使用javac和java命令
考试目标7.1 给定一段代码示例和一个场景,编写代码,使用恰当的访问修饰符、包声明和导入语句,与示例中的代码交互(通过访问或继承)。
考试目标7.2 给定类的一个示例和一个命令行,确定期望的运行时行为。
考试目标7.5 给定类的一个完全限定名称,该类在JAR文件的内部和/或外部部署,为该类构造适当的目录结构。给定一个代码示例和一个类路径,确定类路径是否允许代码成功地编译。
10.1.1 用javac编译
考试要求掌握的是 javac [options] [source files]
用-d选项编译,可以改变类文件的目标位置.
例如
myProject
|
|--source
| |
| |--com
| |
| |--javaeye
| |
| |--HelloJava.java
|
|--classes
| |
| |--com
| |
| |--javaeye
| |
| |--(HelloJava.class goes here)
如果你在source目录中编译HelloJava.java,并想将结果文件HelloJava.class放入class/com/javaeye目录,则命令如下:
javac -d ../classes com/javaeye/HelloJava.java
其中../classes是编译将要开始的位置,这个目录必须是已经存在的,否则会出现编译错误;后面的com/javaeye/目录如果不存在,会自动创建.
10.1.2 用java命令启动应用程序
java [options] class [args]
class文件写.class扩展名
例如: java -DmyProp=myValue HelloJava x 1
意思是:创建名为myProp的系统属性(必须紧跟D,不能有空格),并将其值设置为myValue.然后,启动名为HelloJava.class的文件,并向它发送两个String变元,其值为x和1.
使用系统属性
java.util.Properties类
Properties p = System.getProperties(); //获得系统属性
p.setProperty("key","value"); //添加属性
p.list(System.out) //打印到系统控制台上
处理命令行变元
public static void main(String[] args) ,args就是命令行变元数组.也可以写成String...args
10.1.3 查找其它类
声明并使用类路径
UNIX -classpath /com/foo/acct : /com/foo
WINDOWS -classpath \com\foo\acct ; \com\foo
-classpath简写为-cp
包与查找
在package和import中使用的路径是绝对路径.
相对路性与绝对路径
10.2 JAR文件
考试目标7.5 给定类的一个完全限定名称,该类在JAR文件的内部和/或外部部署,为该类构造适当的目录结构。给定一个代码示例和一个类路径,确定类路径是否允许代码成功地编译。
10.2.1 JAR文件与查找
创建jar文件: jar -cf MyJar.jar myApp 将myApp下的所有文件打到MyJar.jar中
查看jar中的文件: jar -tf MyJar.jar
jar命令会自动创建META-INF目录,并在它里面建立MANIFEST.MF文件.
编译一个jar包中的.java文件: javac -cp jar包的相对路径 java文件
10.3 使用静态导入
考试目标7.1 给定一段代码示例和一个场景,编写代码,使用恰当的访问修饰符、包声明和导入语句,与示例中的代码交互(通过访问或继承)。
10.3.1 静态导入
注意:只能是import static,而不能是static import. 对于有相同常量名,方法名的类型要慎用静态导入,编译器分不清楚你到底想用哪一个.
public class TestStatic { public static void main(String[] args) { System.out.println(Integer.MAX_VALUE); System.out.println(Integer.toHexString(42)); } } //使用静态导入之后,变成这样 import static java.lang.System.out; import static java.lang.Integer.*; public class TestStatic { public static void main(String[] args) { out.println(MAX_VALUE); out.println(toHexString(42)); } }