家庭佛教拜垫:Java常用API的运用,效率及技巧(1)

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 15:59:36
Java常用API的运用,效率及技巧(1)2011-02-14 12:35

Java常用API的运用,效率及技巧(1) 


1.    Java面向对象基本概念

2.    System

---本文档旨在对我们常用的一些Java API做一些总结,目的是让我们能够正确有效的使用Java的类库。技巧也就是前人经验的一种总结。

1.   Java面向对象基本概念

Java基本上是面向对象的程序设计语言,除了一些简单类型(primitive)的变量以外,一切都是对象,程序是对象的组合, 每个对象都有自己的空间,并且每个对象都有一种类型, 同一类所有对象都能接受相同的消息。下面只对Java中对象的结构作简单的说明:

        类(class): class是定义类的关键字, 类中包含类变量,方法, 内部类, 内部接口等。由class可以生成类的实例,即一个个对象。 如果一个类的成员被定义成static的,则这个成员不专属于任何对象,而是属于这个类, 所有的对象共享这个成员。

        抽象类(abstract class):抽象类不能直接生成一个实例,抽象类中必需有方法是abstract的,抽象类的意思就是它实现了一部分的方法,而定义为abstract的方法则需要在它的字类中去实现。

        接口(interface):接口可以理解为纯抽象的类,它的每个方法都是未实现的, 它可以有成员变量,但必须是static的。 一个类如果从这个接口继承(implements)则它必须实现这个接口的所有方法。

继承类用关键字:extends,继承接口用关键字:implements。一个类只能从一个类继承下来, 但可以从多个接口继承(类似于C++的多重继承)。字类可以覆盖父类的方法(method),但不能覆盖父类的成员变量(field)。如果父类的方法为final或static的则不能被覆盖。类的初始化顺序是,如果有父类, 则先初始化父类的field,然后执行父类的构造函数,如果子类没有显式的去调父类的构造函数则缺省的会去调父类的无参数构造函数。然后是子类的field与构造函数的初始化。

public interfaceSuperInterface {

            public staitcString SOME_FLAG = “1”;

            public voidsomeMethod();

}

public ClassSuperClass {

             {

                    System.out.println(“init SuperClass field”);

             }

            publicSuperClass() {

                    System.out.println(“init SuperClass Constructor”);

             }

            public voidrunMethod() {

                    System.out.println(“run SuperClass runMethod()”);

             }

}

public ClassSubClassextendsSuperClass implementsSuperInterface{

             {

                    System.out.println(“init SubClass field”);

             }

     publicSubClass() {

                    System.out.println(“init SubClass Constructor”);

             }

            public voidsomeMethod() {

                    System.out.println(“run SubClass someMethod()”);

             }

            public voidrunMethod() {

                    System.out.println(“run SubClass runMethod()”);

             }

}

有以下test代码:

public classTest {

public voidmain(String[] args) {

       SubClass sub =newSubClass();

       sub. runMethod();

}

}

则会输出:

init SuperClass field

init SuperClass Constructor

init SubClass field

init SubClass Constructor

run SubClass runMethod()

以下章节所讲述到的常用的Java API就是一些Java自带的一些Class或Interface的用法。

2.System

System类位于package java.lang下面,凡是此package下面的类我们可以直接引用无需先import进来,因为JVM缺省就load了这下面的所有class。

System包含了一些我们常用的方法与成员变量。 System不能被实例化,所有的方法都可以直接引用。 主要作用大致有:

        输入输出流:
(PrintStream) System.out (标准终端输出流),
(PrintStream) System.err(标准错误输出流),
(InputStream) System.in(标准输入流)。
我们还可以重定向这些流,比如将所有的System.out的输出全部重定向至一文件中去。
SystemsetOut(PrintStream) 标准输出重定向
System.setErr(PrintStream) 标准错误输出重定向
System.setIn(InputStream) 标准输入重定向

        取当前时间:
System.currentTimeMillis() 所取到的时间是从1970/01/01以来1/1000秒计算的long型值。这个值可以转换至Date或Timestamp值。它一般还可以用来计算程序执行的时间。例:
longbeginTime = System. currentTimeMillis();


System.out.println(“run time = ” + (System. currentTimeMillis() – beginTime));

        数组拷贝:
System.arraycopy(:源数组。
src_position:源数组拷贝的起始位置。
dst:目标数组
dst_position:拷贝至目标数组的起始位置
length:拷贝元素的长度
利用System.arraycopy进行数组的拷贝效率是最高的,一般情况下我们自己很少直接用到这个方法,但在集合类的内部中都大量使用了这个方法。
例:
int[] array1 = {1, 2, 3, 4, 5};
int[] array2 = {4, 5, 6, 7, 8};
int array3 = new int[8];
System.arraycopy(array1, 0, array3, 0, 5);
System.arraycopy(array2, 2, array3, 5, 3);
此时array3 = {1, 2, 3, 4, 5, 6, 7, 8}
这比用for循环来进行赋值效率要高。

        存取系统的Properties:
System.getProperties():取得当前所有的Properties, Properties将在后面的集合一节进行详细的论述。
System.setProperties(Properties props):设置系统的Properties。
System.getProperty(String key):根据一个键值来取得一个Property。
System.setProperty(String key, String value):设置系统的一个Property。
JVM起动的时候将会有一些缺省的Properties值,例如:
java.version Java运行环境版本
java.home Java主目录installation directory
java.class.path Java的class path
java.ext.dirs Java的扩展目录路径
file.separator 文件分隔符("/" on UNIX)
path.separator路径分隔符(":" on UNIX)
line.separator行分隔符("\n" on UNIX)
user.name用户名
user.home 用户主目录
user.dir用户当前工作目录
更详细的信息请参照Java API。另外在起动一个java程序的时候可以通过-D来设置系统的Property,比如 java –Dejb.file=ejb_Test PrintTest在PrintTest里面就可以通过System.getProperty(来取得值ejb_Test。

        其它
System.: 加载native的动态库。可以用C写JNI的库,然后在java中通过native方法来调用。
System.setSecurityManager(SecurityManager s)
System.getSecurityManager():设置与取得系统的security class。