黑馬程序員 java基礎--其它對象System、Runtime(1)

                                                                     -------android培訓java培訓java學習型技術博客、期待與您交流! ----------

一:System類:

Java中使用的System對象,我們經常使用的是System.out.print ,而且也僅僅知道這是一個可以在控制檯打印出語句,而沒有去深究它的內在實現原理。下面我就詳細地介紹System對象。 

1.JDK中有如下定義:.The System class contains several useful class fields and methods. It cannot be instantiated. 
也就是說System對象是不能被實例化的,只能通過調用它的屬性和方法來使用它。 

2.System中的屬性 Systme.in 是InputStream類型的,可以接受控制檯輸入的信息; System.out 和 System.err 都是PrintStream類型的 ,可以在控制檯輸出信息。 

3.System.getProperties() 返回的是Properties類型的對象,而返回的信息是Java虛擬機啓動過程中所要加載的環境配置信息。可以通過下面的代碼獲取和輸出信息,由於Properties是HashTable的一個子類,因此可以通過Map方法取出該集合中的元素 :

import java.util.*;  
  
public class SystemDemo {  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        Properties prop=System.getProperties();  
        for(Object key:prop.keySet()){  
            String keyStr=(String)key;  
            String value=prop.getProperty(keyStr);  
            System.out.println(keyStr+" --- "+value);  
        }  
    }  
}  

使用以下代碼也可以使控制檯輸出系統環境配置信息:

public class SystemDemo {
	public static void main(String[] args) {
		System.getProperties().list(System.out);
	}
}

可以通過System對象在系統中自定義一些特有的信息: 

System.setProperty(myKey , myValue); 

另外需要注意的一點是: 所謂的 system porperty,system 指的是 JRE (runtime)system,不是指 OS。 

System.setProperty("net.jxta.tls.principal", "client"); 
System.setProperty("net.jxta.tls.password", "password"); 
System.setProperty("JXTA_HOME",System.getProperty("JXTA_HOME","client")); 
可以利用系統屬性來加載多個驅動

下面給出一個完整的代碼和註釋程序:

/*
System:類中的方法和屬性都是靜態的static。
out:標準輸出,默認是控制檯
in:標準輸出,默認是鍵盤
描述系統屬性信息:Properties getProperties();
*/
import java.util.*;
class SystemDemo
{
    public static void main(String[] args)
	{
	   //雙類集合
	   Properties prop=System.getProperties();
       //因爲Properties是HashMap的子類,也就是Map集合的一個子對象
	   //那麼可以通過map方法取出該集合中的元素。
	   //該集合中存儲的都是字符串,沒有泛型定義
	   
	   
	   //如何在系統中自定義一些特有信息
	   System.setProperty("myKey","myValue");
	   //獲取指定屬性信息
       String value=System.getProperty("os.name");
	 
      System.out.println("value=:"+value);	 
	  
	  //可不可以在jvm啓動時,動態的加載一些屬性信息
	  String v=System.getProperty("haha");
	  
	  System.out.println("v=:"+v);
	   /*
	    //獲取所有屬性信息
       for(Object obj: prop.keySet()) 
	   {
	        String value =(String)prop.get(obj);
			
			System.out.println(obj+"::"+value);
	   }
       */   
	
	}
}
二:Runtime類:

Java中的Runtime對象並沒有提供構造函數 

(1)說明該類不可使用new 來創造對象

(2) 該類的方法可能都是靜態的

(3)發現該類的API中還有非靜態方法

(4) 說明該類肯定提供了方法來獲取本類對象,而且該方法是靜態的,並返回值類型是本類類型

(5)由以上信息可以看出該類使用了單例設計模式來完成

使用Runtime對象可以打開程序可執行文件(exe文件),啓動該應用程序 。

下面給出完整的代碼和註釋:

/*
Runtime對象
該類中並沒有提供構造函數,說明不可以new對象,那麼會直接想到該類中的方法都是靜態的
發現該類中還有非靜態方法
說明該類肯定會提供了方法獲取本類對象。而且該方法是靜態的,並且返回值類型是本類類型

由這個特點可以看出該類使用了單例設計模式

該方法是static Runtime getRuntime();

*/

class RuntimeDemo
{
    public static void main(String[] args) throws Exception
	{
	  Runtime r=Runtime.getRuntime();
	  Process p=r.exec("notepad.exe");
	  
	  //殺掉子進程
	  Thread.sleep(4000);
	  p.destroy();
	  System.out.println("Hello World!");
	}
}

補充幾個知識點:

(1):單例設計模式:單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱爲單例類的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。


(2)\是轉義字符,把後面緊跟的字母轉義了,所以文件的路徑要用\\或者是/分割


(3)abstract抽象類不能創建對象


最新最全的的java學習視頻教程:http://pro.net.itcast.cn/View-22-1458.aspx

                                             -------android培訓java培訓java學習型技術博客、期待與您交流! ----------

詳細請查看:http://edu.csdn.net/heima

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章