SCJP笔记_章十_开发

第十章 开发

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是编译将要开始的位置,[color=red]这个目录必须是已经存在的,否则会出现编译错误;后面的com/javaeye/目录如果不存在,会自动创建.[/color]

10.1.2 用java命令启动应用程序

java [options] class [args]
class文件写.class扩展名
例如: java -DmyProp=myValue HelloJava x 1
意思是:创建名为myProp的系统属性([color=red]必须紧跟D,不能有空[/color]格),并将其值设置为myValue.然后,启动名为HelloJava.class的文件,并向它发送两个String变元,其值为x和1.

使用系统属性
java.util.Properties类
Properties p = System.getProperties(); //获得系统属性
p.setProperty("key","value"); //添加属性
p.list(System.out) //打印到系统控制台上

[color=red]设置属性可以用两种方式:java -DmyProp=myValue,或者p.setProperty("key","value");[/color]

处理命令行变元
public static void main(String[] args) ,[color=red]args就是命令行变元数组.也可以写成String...args[/color]

10.1.3 查找其它类

声明并使用类路径
UNIX -classpath /com/foo/acct : /com/foo 两个目录,以冒号分开
WINDOWS -classpath \com\foo\acct ; \com\foo
-classpath简写为-cp

java和JavaC都是用相同的基本查找算法:

一旦发现所查找的类,就不会再查找这个类。如果包含具有相同名称的两个或多个文件,则会使用找到的第一个文件。
最为命令行选项声明的类路径,回复该作为环境变量声明的类路行,但命令行中的类路径只会在调用期间存在。
查找文件是,默认不查找当前目录。如要查找,则在类路径中添加一个点。

[color=red]-classpath /com/foo/acct:/com/foo:.最后的点时要求Java或者Javac命令,还需要在当前目录下查找类文件。(此时,我们是在讨论类文件,当你告诉Javac要编译哪个.java文件时,默认情况下,javac会在目录中查找,不用加点)[/color]

包与查找
在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文件

javac -classpath ws/myApp.jar UseStuff.java
javac -classpath wa UseStuff.java

[color=red]当使用类路径时,路径中的最后一个目录必须是包的根目录的父目录,这样该目录中所有的类都可以找到。[/color]
[color=red]-classpath可以导入根包下所有的包
Import只能导入根包下所有的类,不能导入子包。Import每次只能导入一个包[/color]

在开发和测试的时候,可以将Jar文件放到.../jre/lib/ext目录下,这样就可以通过Java来进行查找,不必在使用的时候再次加入这些包。


10.3.1 静态导入
注意:只能是import static,而不能是static import. 对于有相同常量名,方法名的类型要慎用静态导入,编译器分不清楚你到底想用哪一个.比如Integer类和Long类都执行静态导入。
Java代码
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));
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值