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是编译将要开始的位置, 这个目录必须是已经存在的,否则会出现编译错误;后面的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)   //打印到系统控制台上

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

处理命令行变元
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

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

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

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

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

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


在开发和测试的时候,可以将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)); 
    } 

你可能感兴趣的:(java,windows,算法,unix,ext)