内容发布更新时间 : 2024/11/17 4:35:40星期一 下面是文章的全部内容请认真阅读。
Java 常用API的运用,效率及技巧
1. Java面向对象基本概念 2. System
3. String, StringBuffer
4. 数值,字符,布尔对象与简单类型的操作 5. Class, ClassLoader 6. Java IO系统 7. Java集合类
8. ResourceBundle, Properties 9. Exceptions 10. JDBC类库 11. 常用设计模式
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 interface SuperInterface {
public staitc String SOME_FLAG = “1”; public void someMethod(); }
public Class SuperClass {
{ System.out.println(“init SuperClass field”);}
public SuperClass() {System.out.println(“init SuperClass Constructor”); } public void runMethod() { System.out.println(“run SuperClass runMethod()”); } }
public Class SubClass extends SuperClass implements SuperInterface { { System.out.println(“init SubClass field”); }
public SubClass() {System.out.println(“init SubClass Constructor”); } public void someMethod() {System.out.println(“run SubClass someMethod()”); } public void runMethod() {System.out.println(“run SubClass runMethod()”); } }
有以下test代码: public class Test {
public void main(String[] args) { SubClass sub = new SubClass(); 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的输出全部重定向至一文件中去。 System.setOut(PrintStream) 标准输出重定向 System.setErr(PrintStream) 标准错误输出重定向 System.setIn(InputStream) 标准输入重定向 ? 取当前时间:
System.currentTimeMillis() 所取到的时间是从1970/01/01以来1/1000秒计算的long型值。这个值可以转换至Date或Timestamp值。 它一般还可以用来计算程序执行的时间。例:
long beginTime = System. currentTimeMillis(); …
…
System.out.println(“run time = ” + (System. currentTimeMillis() – beginTime)); ? 数组拷贝:
System.arraycopy(Object src, int src_position, Object dst, int dst_position,
int length)
src: 源数组。
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 文件分隔符(\path.separator 路径分隔符(\line.separator 行分隔符 (%user.name 用户名 user.home 用户主目录
user.dir 用户当前工作目录
更详细的信息请参照Java API。 另外在起动一个java程序的时候可以通过-D来设置系统的Property, 比如 java –Dejb.file=ejb_Test PrintTest 在PrintTest里面就可以通过System.getProperty(“ejb.file”)来取得值ejb_Test。 ? 其它
System. loadLibrary(String libname): 加载native的动态库。 可以用C写JNI的库, 然后在java中通过native方法来调用。