Java常用API的运用,效率及技巧1. Java面向对象基本概念2. System3. String, StringBuffer4. 数值,字符,布尔对象与简单类型的操作5. Class, ClassLoader6. Java IO系统7. Java集合类8. ResourceBundle, Properties9. Exceptions10. 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 fieldinit SuperClass Constructorinit SubClass fieldinit SubClass Constructorrun SubClass runMethod()以下章节所讲述到的常用的Java API就是一些Java自带的一些Class或Interface的用法。
2.SystemSystem类位于package ng下面,凡是此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 directoryjava.class.path Java 的class pathjava.ext.dirs Java的扩展目录路径file.separator文件分隔符("/" on UNIX)path.separator路径分隔符(":" on UNIX)line.separator行分隔符 ("\n" on UNIX)用户名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方法来调用。
System.setSecurityManager(SecurityManager s)System.getSecurityManager():设置与取得系统的security class。
3.String, StringBuffer3.1基本用法String可以说是我们最常用的一个类,熟练掌握它的一些基本用法是很有用的。
String是由一组字符组成的字符串,下标由0开始。
一旦有必要改变原来的内容,每个String 方法都有返回了一个新的String对象。
char charAt(int index) 返回指定位置的字符。
int compareTo(Object o)int compareTo(String anotherString)与另外一个对象进行比较。
int compareToIgnoreCase(String str) 与另一个String进行比较,不区分大小写String concat(String str) 连接两字符串,可以直接用+,因为Java给String覆盖了+ static String copyValueOf(char[] data)static String copyValueOf(char[] data, int offset, int count)将data数组转换至Stringboolean endsWith(String suffix) 测试此String是否以suffix结尾。
boolean startsWith(String prefix) 测试此String是否以prefix开头。