Step By Step(Java 常用对象篇<二>) (五)

2014-11-24 03:21:36 · 作者: · 浏览: 1
被初始化,只有在执行c.newInstance()后才能够初始化类。因此我们可以将loadClass()等同于Class.forName(name,false,cl)的调用。从上面的例子我们也可以看出,MyApp对象的静态块初始化代码的调用是在main函数执行了newInstance之后完成的。

下面的示例代码为通过手工方式加载Oracle的JDBC驱动jar包,以便我们更清楚的区分两者之间的差异:

1 public static void main(String[] args) {

2 String filename = "file:///C:/oracle/product/10.2.0/db_1/jdbc/lib/ojdbc14.jar";

3 URL u = new URL(filename);

4 URLClassLoader cl = new URLClassLoader(new URL[]{u});

5 Class< > c = cl.loadClass("oracle.jdbc.driver.OracleDriver");

6 System.out.println(c.getClassLoader());

7 c.newInstance();

8 System.out.println("Over.");

9 }

复制代码

如果替换为我们熟悉的Class.forName()加载方式,见如下代码:

1 public static void main(String[] args) throws Exception {

2 String filename = "file:///C:/oracle/product/10.2.0/db_1/jdbc/lib/ojdbc14.jar";

3 URL u = new URL(filename);

4 URLClassLoader cl = new URLClassLoader(new URL[]{u});

5 Class< > c = Class.forName("oracle.jdbc.driver.OracleDriver");

6 System.out.println(c.getClassLoader());

7 System.out.println("Over.");

8 }

9 /* 输出结果均为:

10 sun.misc.Launcher$AppClassLoader@ad3ba4

11 Over.

12 */

复制代码

4. ProcessBuilder:

在实际开发中,我们常常为了节省开发成本和缩短开发周期,会充分利用操作系统为我们提供的shell命令来获取一些和系统相关的信息,同时导入他们的输出结果并加以分析,这样做不仅降低了开发的难度,也节省了大量的开发时间。这里我们将提供一段示例代码来演示Java的程序如何利用这些shell命令来完成自己的功能需求。

1 public class MyTest {

2 private static void execNotepadAndWait() {

3 try {

4 ProcessBuilder proc = new ProcessBuilder("notepad.exe", "testfile");

5 proc.start();

6 //阻塞父进程直到子进程结束。

7 proc.wait();

8 } catch (Exception e) {

9 System.out.println("Error executing notepad.");

10 }

11 }

12 private static void forkProcessAndGetInputStream() throws IOException {

13 //启动子进程

14 Process process = new ProcessBuilder("java","-h").start();

15 //从子进程中获取其输出信息作为当前程序的输入流。

16 InputStream is = process.getInputStream();

17 //以文本字符的方式读入,以便后面可以按行读取。

18 InputStreamReader isr = new InputStreamReader(is);

19 BufferedReader br = new BufferedReader(isr);

20 String line = null;

21 while ((line = br.readLine()) != null) {

22 System.out.println(line);

23 }

24 }

25 public static void main(String args[]) throws IOException {

26 forkProcessAndGetInputStream();

27 execNotepadAndWait();

28 }

29 }

复制代码

5. 正则表达式:

这里给出的基本都是Java中正则表达式的示例代码,至于基础的语法规则,只是通过在代码中加上适当的注释,再结合输出结果的方式予以介绍,如果确实需要系统学习的,网上有很多很多优秀的文章详细介绍了这方面的知识。好吧,现在让我们开始吧。

1) 通用的规则和使用方法:

1 public static void main(String[] args) {

2 //这里\表示转义符,双斜杠\\表示一个\,\w表示所有的字母,

3 //不分大小写,\s表示空格符,如" \n\r\t",\d表示数字

4 Pattern patt = Pattern.compile("(\\w+)\\s(\\d+)");

5 Matcher matcher = patt.matcher("Bananas 123");

6 matcher.lookingAt();

7 System.out.println("Name: " + matcher.group(1));

8 System.out.println("Number: " + matcher.group