轉自:http://blog.csdn.net/lastsweetop/article/details/3961911html
前言:Java的類庫日益龐大,所包含的類和接口也不可勝數。但其中有一些很是重要的類和接口,是Java類庫中的核心部分。常見的有String、Object、Class、Collection、ClassLoader、Runtime、Process...,熟悉這些類是學好Java的基礎。而這些類通常不容易理解,須要作深刻的研究和實踐才能掌握。下面是我對這些類理解和使用的一些總結。歡迎你在閱讀後將你寶貴的意見和讀後感留下!windows
1、概述
Runtime類封裝了運行時的環境。每一個 Java 應用程序都有一個 Runtime 類實例,使應用程序可以與其運行的環境相鏈接。
通常不能實例化一個Runtime對象,應用程序也不能建立本身的 Runtime 類實例,但能夠經過 getRuntime 方法獲取當前Runtime運行時對象的引用。
一旦獲得了一個當前的Runtime對象的引用,就能夠調用Runtime對象的方法去控制Java虛擬機的狀態和行爲。
當Applet和其餘不被信任的代碼調用任何Runtime方法時,經常會引發SecurityException異常。api
2、API預覽
addShutdownHook(Thread hook)
註冊新的虛擬機來關閉掛鉤。
availableProcessors()
向 Java 虛擬機返回可用處理器的數目。
exec(String command)
在單獨的進程中執行指定的字符串命令。
exec(String[] cmdarray)
在單獨的進程中執行指定命令和變量。
exec(String[] cmdarray, String[] envp)
在指定環境的獨立進程中執行指定命令和變量。
exec(String[] cmdarray, String[] envp, File dir)
在指定環境和工做目錄的獨立進程中執行指定的命令和變量。
exec(String command, String[] envp)
在指定環境的單獨進程中執行指定的字符串命令。
exec(String command, String[] envp, File dir)
在有指定環境和工做目錄的獨立進程中執行指定的字符串命令。
exit(int status)
經過啓動虛擬機的關閉序列,終止當前正在運行的 Java 虛擬機。
freeMemory()
返回 Java 虛擬機中的空閒內存量。
gc()
運行垃圾回收器。
InputStream getLocalizedInputStream(InputStream in)
已過期。 從 JDK 1.1 開始,將本地編碼字節流轉換爲 Unicode 字符流的首選方法是使用 InputStreamReader 和 BufferedReader 類。
OutputStream getLocalizedOutputStream(OutputStream out)
已過期。 從 JDK 1.1 開始,將 Unicode 字符流轉換爲本地編碼字節流的首選方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 類。
getRuntime()
返回與當前 Java 應用程序相關的運行時對象。
halt(int status)
強行終止目前正在運行的 Java 虛擬機。
load(String filename)
加載做爲動態庫的指定文件名。
loadLibrary(String libname)
加載具備指定庫名的動態庫。
maxMemory()
返回 Java 虛擬機試圖使用的最大內存量。
removeShutdownHook(Thread hook)
取消註冊某個先前已註冊的虛擬機關閉掛鉤。
runFinalization()
運行掛起 finalization 的全部對象的終止方法。
runFinalizersOnExit(value)
已過期。 此方法自己具備不安全性。它可能對正在使用的對象調用終結方法,而其餘線程正在操做這些對象,從而致使不正確的行爲或死鎖。
totalMemory()
返回 Java 虛擬機中的內存總量。
traceInstructions(on)
啓用/禁用指令跟蹤。
traceMethodCalls(on)
啓用/禁用方法調用跟蹤。數組
3、常見的應用
安全
一、內存管理:
Java提供了無用單元自動收集機制。經過totalMemory()和freeMemory()方法能夠知道對象的堆內存有多大,還剩多少。
Java會週期性的回收垃圾對象(未使用的對象),以便釋放內存空間。可是若是想先於收集器的下一次指定週期來收集廢棄的對象,能夠經過調用gc()方法來根據須要運行無用單元收集器。一個很好的試驗方法是先調用gc()方法,而後調用freeMemory()方法來查看基本的內存使用狀況,接着執行代碼,而後再次調用freeMemory()方法看看分配了多少內存。下面的程序演示了這個構想。數據結構
//此實例來自《java核心技術》卷一
class MemoryDemo{
public static void main(String args[]){
Runtime r = Runtime.getRuntime();
long mem1,mem2;
Integer someints[] = new Integer[1000];
System.out.println("Total memory is :" + r.totalMemory());
mem1 = r.freeMemory();
System.out.println("Initial free is : " + mem1);
r.gc();
mem1 = r.freeMemory();
System.out.println("Free memory after garbage collection : " + mem1);
//allocate integers
for(int i=0; i<1000; i++) someints[i] = new Integer(i);ui
mem2 = r.freeMemory();
System.out.println("Free memory after allocation : " + mem2);
System.out.println("Memory used by allocation : " +(mem1-mem2));編碼
//discard Intergers
for(int i=0; i<1000; i++) someints[i] = null;
r.gc(); //request garbage collection
mem2 = r.freeMemory();
System.out.println("Free memory after collecting " + "discarded integers : " + mem2);
}
}spa
編譯後運行結果以下(不一樣的機器不一樣時間運行的結果也不必定同樣):
Total memory is :2031616
Initial free is : 1818488
Free memory after garbage collection : 1888808
Free memory after allocation : 1872224
Memory used by allocation : 16584
Free memory after collecting discarded integers : 1888808
二、執行其餘程序
在安全的環境中,能夠在多任務操做系統中使用Java去執行其餘特別大的進程(也就是程序)。ecec()方法有幾種形式命名想要運行的程序和它的輸入參數。ecec()方法返回一個Process對象,可使用這個對象控制Java程序與新運行的進程進行交互。ecec()方法本質是依賴於環境。
下面的例子是使用ecec()方法啓動windows的記事本notepad。這個例子必須在Windows操做系統上運行。
//此實例來自《Java核心技術》卷一
class ExecDemo {
public static void main(String args[]){
Runtime r = Runtime.getRuntime();
Process p = null;
try{
p = r.exec("notepad");
} catch (Exception e) {
System.out.println("Error executing notepad.");
}
}
}
ecec()還有其餘幾種形式,例子中演示的是最經常使用的一種。ecec()方法返回Process對象後,在新程序開始運行後就可使用Process的方法了。能夠用destory()方法殺死子進程,也可使用waitFor()方法等待程序直到子程序結束,exitValue()方法返回子進程結束時返回的值。若是沒有錯誤,將返回0,不然返回非0。下面是關於ecec()方法的例子的改進版本。例子被修改成等待,直到運行的進程退出:
//此實例來自《Java核心技術》卷一
class ExecDemoFini {
public static void main(String args[]){
Runtime r = Runtime.getRuntime();
Process p = null;
try{
p = r.exec("notepad");
p.waitFor();
} catch (Exception e) {
System.out.println("Error executing notepad.");
}
System.out.println("Notepad returned " + p.exitValue());
}
}
下面是運行的結果(當關閉記事本後,會接着運行程序,打印信息):
Notepad returned 0
請按任意鍵繼續. . .
當子進程正在運行時,能夠對標準輸入輸出進行讀寫。getOutputStream()方法和getInPutStream()方法返回對子進程的標準輸入和輸出。
4、來自SUN公司的java.long.Runtime類的API文檔,網上有chm中文版的,很好找。爲了查閱方便,我從SUN公司的JavaDoc站點上覆製出來了Runtime類的API文檔。
java.lang.Object
java.lang.Runtime
public class Runtimeextends Object
每一個 Java 應用程序都有一個 Runtime
類實例,使應用程序可以與其運行的環境相鏈接。能夠經過 getRuntime
方法獲取當前運行時。
應用程序不能建立本身的 Runtime 類實例。
getRuntime()
方法摘要 | |
---|---|
void |
addShutdownHook(Thread hook) 註冊新的虛擬機來關閉掛鉤。 |
int |
availableProcessors() 向 Java 虛擬機返回可用處理器的數目。 |
Process |
exec(String command) 在單獨的進程中執行指定的字符串命令。 |
Process |
exec(String[] cmdarray) 在單獨的進程中執行指定命令和變量。 |
Process |
exec(String[] cmdarray, String[] envp) 在指定環境的獨立進程中執行指定命令和變量。 |
Process |
exec(String[] cmdarray, String[] envp, File dir) 在指定環境和工做目錄的獨立進程中執行指定的命令和變量。 |
Process |
exec(String command, String[] envp) 在指定環境的單獨進程中執行指定的字符串命令。 |
Process |
exec(String command, String[] envp, File dir) 在有指定環境和工做目錄的獨立進程中執行指定的字符串命令。 |
void |
exit(int status) 經過啓動虛擬機的關閉序列,終止當前正在運行的 Java 虛擬機。 |
long |
freeMemory() 返回 Java 虛擬機中的空閒內存量。 |
void |
gc() 運行垃圾回收器。 |
InputStream |
getLocalizedInputStream(InputStream in) 已過期。 從 JDK 1.1 開始,將本地編碼字節流轉換爲 Unicode 字符流的首選方法是使用 InputStreamReader 和 BufferedReader 類。 |
OutputStream |
getLocalizedOutputStream(OutputStream out) 已過期。 從 JDK 1.1 開始,將 Unicode 字符流轉換爲本地編碼字節流的首選方法是使用 OutputStreamWriter 、BufferedWriter 和 PrintWriter 類。 |
static Runtime |
getRuntime() 返回與當前 Java 應用程序相關的運行時對象。 |
void |
halt(int status) 強行終止目前正在運行的 Java 虛擬機。 |
void |
load(String filename) 加載做爲動態庫的指定文件名。 |
void |
loadLibrary(String libname) 加載具備指定庫名的動態庫。 |
long |
maxMemory() 返回 Java 虛擬機試圖使用的最大內存量。 |
boolean |
removeShutdownHook(Thread hook) 取消註冊某個先前已註冊的虛擬機關閉掛鉤。 |
void |
runFinalization() 運行掛起 finalization 的全部對象的終止方法。 |
static void |
runFinalizersOnExit(boolean value) 已過期。 此方法自己具備不安全性。它可能對正在使用的對象調用終結方法,而其餘線程正在操做這些對象,從而致使不正確的行爲或死鎖。 |
long |
totalMemory() 返回 Java 虛擬機中的內存總量。 |
void |
traceInstructions(boolean on) 啓用/禁用指令跟蹤。 |
void |
traceMethodCalls(boolean on) 啓用/禁用方法調用跟蹤。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
方法詳細信息 |
---|
public static Runtime getRuntime()
Runtime
類的大多數方法是實例方法,而且必須根據當前的運行時對象對其進行調用。
Runtime
對象。
public void exit(int status)
虛擬機的關閉序列包含兩個階段。在第一個階段中,會以某種未指定的順序啓動全部已註冊的關閉掛鉤
(若是有的話),而且容許它們同時運行直至結束。在第二個階段中,若是已啓用退出終結
,則運行全部未調用的終結方法。一旦完成這個階段,虛擬機就會暫停
。
若是在虛擬機已開始其關閉序列後才調用此方法,那麼若正在運行關閉掛鉤,則將無限期地阻斷此方法。若是已經運行完關閉掛鉤,而且已啓用退出終結 (on-exit finalization),那麼此方法將利用給定的狀態碼(若是狀態碼是非零值)暫停虛擬機;不然將無限期地阻斷虛擬機。
System.exit
方法是調用此方法的一種傳統而便捷的方式。
status
- 終止狀態。按照慣例,非零的狀態碼代表非正常終止。
SecurityException
- 若是安全管理器存在,而且其
checkExit
方法不容許存在指定的狀態
SecurityException
,
SecurityManager.checkExit(int)
,
addShutdownHook(java.lang.Thread)
,
removeShutdownHook(java.lang.Thread)
,
runFinalizersOnExit(boolean)
,
halt(int)
public void addShutdownHook(Thread hook)
Java 虛擬機會爲了響應如下兩類事件而關閉:
exit
(等同於System.exit
)方法時。或者,
關閉掛鉤 只是一個已初始化但還沒有啓動的線程。虛擬機開始啓用其關閉序列時,它會以某種未指定的順序啓動全部已註冊的關閉掛鉤,並讓它們同時運行。運行完全部的掛鉤後,若是已啓用退出終結,那麼虛擬機接着會運行全部未調用的終結方法。最後,虛擬機會暫停。注意,關閉序列期間會繼續運行守護線程,若是經過調用 exit
方法來發起關閉序列,那麼也會繼續運行非守護線程。
一旦開始了關閉序列,則只能經過調用 halt
方法來中止這個序列,此方法可強行終止虛擬機。
一旦開始了關閉序列,則不可能註冊新的關閉掛鉤或取消註冊先前已註冊的掛鉤。嘗試執行這些操做會致使拋出 IllegalStateException
。
關閉掛鉤可在虛擬機生命週期中的特定時間運行,所以應保護性地對其進行編碼。特別是應將關閉掛鉤編寫爲線程安全的,並儘量地避免死鎖。關閉掛鉤還應該不盲目地依靠某些服務,這些服務可能已註冊了本身的關閉掛鉤,因此其自己可能正處於關閉進程中。
關閉掛鉤應該快速地完成其工做。當程序調用 exit
時,虛擬機應該迅速地關閉並退出。因爲用戶註銷或系統關閉而終止虛擬機時,底層的操做系統可能只容許在固定的時間內關閉並退出。所以在關閉掛鉤中嘗試進行任何用戶交互或執行長時間的計算都是不明智的。
與其餘全部線程同樣,經過調用線程 ThreadGroup
對象的 uncaughtException
方法,可在關閉掛鉤中處理未捕獲的異常。此方法的默認實現是將該異常的堆棧跟蹤 (stack trace) 打印至 System.err
並終止線程;它不會致使虛擬機退出或暫停。
僅在不多的狀況下,虛擬機可能會停止,也就是沒有徹底關閉就中止運行。虛擬機被外部終止時會出現這種現象,好比在 Unix 上使用 SIGKILL 信號或者在 Microsoft Windows 上調用 TerminateProcess。若是因爲內部數據結構損壞或試圖訪問不存在的內存而致使本機方法執行錯誤,那麼可能也會停止虛擬機。若是虛擬機停止,則沒法保證是否將運行關閉掛鉤。
hook
- 一個已初始化但還沒有啓動的
Thread
對象
IllegalArgumentException
- 若是指定的掛鉤已註冊,或者能夠肯定掛鉤正在運行或者已運行完畢
IllegalStateException
- 若是虛擬機已經處於關閉進程中
SecurityException
- 若是安全管理器存在而且拒絕
RuntimePermission
("shutdownHooks")
removeShutdownHook(java.lang.Thread)
,
halt(int)
,
exit(int)
public boolean removeShutdownHook(Thread hook)
hook
- 要刪除的掛鉤
IllegalStateException
- 若是虛擬機已經處於關閉進程中
SecurityException
- 若是安全管理器存在而且拒絕
RuntimePermission
("shutdownHooks")
addShutdownHook(java.lang.Thread)
,
exit(int)
public void halt(int status)
應當心使用此方法。與 exit
方法不一樣,此方法不會啓動關閉掛鉤,而且若是已啓用退出終結,此方法也不會運行未調用的終結方法。若是已經發起關閉序列,那麼此方法不會等待全部正在運行的關閉掛鉤或終結方法完成其工做。
status
- 終止狀態。按照慣例,非零的狀態碼代表非正常終止。若是已經調用了
exit
(
System.exit
也同樣)方法,那麼該狀態碼將重寫已傳遞至此方法的狀態碼。
SecurityException
- 若是安全管理器存在,而且其
checkExit
方法不容許具備指定狀態時退出
exit(int)
,
addShutdownHook(java.lang.Thread)
,
removeShutdownHook(java.lang.Thread)
@Deprecated public static void runFinalizersOnExit(boolean value)
若是有安全管理器,則首先使用 0 做爲變量來調用其 checkExit
方法,以確保容許退出。這可能會致使 SecurityException。
value
- 若是啓用退出時終結,則該參數爲 true,若是禁用退出時終結,則該參數爲 false
SecurityException
- 若是安全管理器存在而且其
checkExit
方法不容許退出。
exit(int)
,
gc()
,
SecurityManager.checkExit(int)
public Process exec(String command) throws IOException
這是一個頗有用的方法。對於 exec(command) 形式的調用而言,其行爲與調用 exec
(command, null, null) 徹底相同。
command
- 一條指定的系統命令。
Process
對象,用於管理子進程
SecurityException
- 若是安全管理器存在,而且其
checkExec
方法不容許建立子進程
IOException
- 若是發生 I/O 錯誤
NullPointerException
- 若是
command
爲
null
IllegalArgumentException
- 若是
command
爲空
exec(String[], String[], File)
,
ProcessBuilder
public Process exec(String command, String[] envp) throws IOException
這是一個頗有用的方法。對於 exec(command, envp) 形式的調用而言,其行爲與調用 exec
(command, envp, null) 徹底相同。
command
- 一條指定的系統命令。
envp
- 字符串數組,其中每一個元素的環境變量的設置格式爲
name=
value;若是子進程應該繼承當前進程的環境,或該參數爲
null。
Process
對象,用於管理子進程
SecurityException
- 若是安全管理器存在,而且其
checkExec
方法不容許建立子進程
IOException
- 若是發生 I/O 錯誤
NullPointerException
- 若是
command
爲
null
,或
envp
的元素之一爲
null
IllegalArgumentException
- 若是
command
爲空
exec(String[], String[], File)
,
ProcessBuilder
public Process exec(String command, String[] envp, File dir) throws IOException
這是一個頗有用的方法。對於 exec(command, envp, dir) 形式的調用而言,其行爲與調用 exec
(cmdarray, envp, dir) 徹底相同,其中 cmdarray
是 command
中全部標記的數組。
更準確地說,可使用經過調用 new
建立的 StringTokenizer
(command)StringTokenizer
將 command
字符串拆解成標記,調用時不對字符類別作進一步的修改。而後將標記生成器所生成的標記以相同的順序放入新的字符串數組 cmdarray
中。
command
- 一條指定的系統命令。
envp
- 字符串數組,其中每一個元素的環境變量的設置格式爲
name=
value;若是子進程應該繼承當前進程的環境,或該參數爲
null。
dir
- 子進程的工做目錄;若是子進程應該繼承當前進程的工做目錄,則該參數爲
null。
Process
對象,用於管理子進程
SecurityException
- 若是安全管理器存在,而且其
checkExec
方法不容許建立子進程
IOException
- 若是發生 I/O 錯誤
NullPointerException
- 若是
command
爲
null
,或者
envp
的某個元素爲
null
IllegalArgumentException
- 若是
command
爲空
ProcessBuilder
public Process exec(String[] cmdarray) throws IOException
這是一個頗有用的方法。對於 exec(cmdarray) 形式的調用而言,其行爲與調用 exec
(cmdarray, null, null) 徹底相同。
cmdarray
- 包含所調用命令及其參數的數組。
Process
對象,用於管理子進程
SecurityException
- 若是安全管理器存在,而且其
checkExec
方法不容許建立子進程
IOException
- 若是發生 I/O 錯誤
NullPointerException
- 若是
cmdarray
爲
null
,或者
cmdarray
的某個元素爲
null
IndexOutOfBoundsException
- 若是
cmdarray
是一個空數組(長度爲
0
)
ProcessBuilder
public Process exec(String[] cmdarray, String[] envp) throws IOException
這是一個頗有用的方法。對於 exec(cmdarray, envp) 形式的調用而言,其行爲與調用 exec
(cmdarray, envp, null) 徹底相同。
cmdarray
- 包含所調用命令及其參數的數組。
envp
- 字符串數組,其中每一個元素的環境變量的設置格式爲
name=
value;若是子進程應該繼承當前進程的環境,或該參數爲
null。
Process
對象,用於管理子進程
SecurityException
- 若是安全管理器存在,而且其
checkExec
方法不容許建立子進程
IOException
- 若是發生 I/O 錯誤
NullPointerException
- 若是
cmdarray
爲
null
,或者
cmdarray
的某個元素爲
null
,或者
envp
的某個元素爲
null
IndexOutOfBoundsException
- 若是
cmdarray
是一個空數組(長度爲
0
)
ProcessBuilder
public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException
給定的字符串數組 cmdarray
表示一個命令行標記,字符串數組 envp
則表示「環境」變量設置,此方法會建立一個新進程,而指定的命令就在這個進程中執行。
此方法檢查 cmdarray
是不是一條有效的操做系統命令。哪些命令有效取決於系統,可是該命令至少必須有一個非 null 字符串的非空列表。
若是 envp 爲 null,那麼子進程會繼承當前進程的環境設置。
ProcessBuilder.start()
如今是啓用一個具備已修改環境的進程的首選方法。
dir 指定了新子進程的工做目錄。若是 dir 爲 null,那麼子進程會繼承當前進程的當前工做目錄。
若是安全管理器存在,則用數組 cmdarray
的第一個元素做爲變量來調用安全管理器的 checkExec
方法。這可能致使拋出 SecurityException
。
啓動操做系統進程的方式徹底取決於系統。其中有不少方面會致使錯誤:
這些狀況都會拋出一個異常。該異常的具體特性取決於系統,但它老是 IOException
的一個子類。
cmdarray
- 包含所調用命令及其參數的數組。
envp
- 字符串數組,其中每一個元素的環境變量的設置格式爲
name=
value,若是子進程應該繼承當前進程的環境,或該參數爲
null。
dir
- 子進程的工做目錄;若是子進程應該繼承當前進程的工做目錄,則該參數爲
null。
Process
對象,用於管理子進程
SecurityException
- 若是安全管理器存在,而且其
checkExec
方法不容許建立子進程
IOException
- 若是發生 I/O 錯誤
NullPointerException
- 若是
cmdarray
爲
null
,或者
cmdarray
的某個元素爲
null
,抑或
envp
的某個元素爲
null
IndexOutOfBoundsException
- 若是
cmdarray
是一個空數組(長度爲
0
)
ProcessBuilder
public int availableProcessors()
該值在特定的虛擬機調用期間可能發生更改。所以,對可用處理器數目很敏感的應用程序應該不按期地輪詢該屬性,並相應地調整其資源用法。
public long freeMemory()
gc
方法可能致使
freeMemory
返回值的增長。
public long totalMemory()
注意,保存任意給定類型的一個對象所需的內存量可能取決於實現方法。
public long maxMemory()
Long.MAX_VALUE
。
public void gc()
名稱 gc
表明「垃圾回收器」。虛擬機根據須要在單獨的線程中自動執行回收過程,甚至不用顯式調用 gc
方法。
方法 System.gc()
是調用此方法的一種傳統而便捷的方式。
public void runFinalization()
finalize
方法,可是這些對象的
finalize
方法尚未運行。當控制從方法調用中返回時,Java 虛擬機已經盡最大努力去完成全部未執行的終止方法。
若是不顯式調用 runFinalization
方法,則 Java 虛擬機會根據須要在單獨的線程中自動執行此終止過程。
方法 System.runFinalization()
是調用此方法的一種傳統而便捷的方式。
Object.finalize()
public void traceInstructions(boolean on)
boolean
變量爲
true
,則執行此方法意味着讓 Java 虛擬機發送虛擬機中每條指令執行的調試信息。該信息的格式,以及虛擬機所發送的文件或其餘輸出流的格式取決於主機的環境。若是虛擬機不支持此功能,則忽略這一 請求。跟蹤輸出的目的地取決於系統。
若是 boolean
變量爲 false
,則執行此方法時將使 Java 虛擬機中止執行詳細的指令跟蹤。
on
- 爲
true
時啓用指令跟蹤;爲
false
時則禁用此功能。
public void traceMethodCalls(boolean on)
boolean
變量爲
true
,則執行此方法意味着讓 Java 虛擬機發送虛擬機中每一個方法的調試信息。該信息的格式,以及虛擬機所發送的文件或其餘輸出流的格式取決於主機的環境。若是虛擬機不支持此功能,則忽略這一請求。
使用變量 false 調用此方法意味着虛擬機中止發送每一個調用的調試信息。
on
- 爲
true
時啓用指令跟蹤;爲
false
時則禁用此功能。
public void load(String filename)
java_g
,會自動在 "_g" 前面插入 ".so"(例如
Runtime.getRuntime().load("/home/avh/lib/libX11.so");
)。
首先,若是有安全管理器,則用 filename
做爲參數調用 checkLink
方法。這可能致使安全異常。
這與 loadLibrary(String)
方法相似,但它接受通用文件名做爲變量,而不只僅是庫名,從而可以加載全部的本機代碼文件。
方法 System.load(String)
是調用此方法的一種傳統而便捷的方式。
filename
- 要加載的文件。
SecurityException
- 若是安全管理器存在,而且其
checkLink
方法不容許加載指定的動態庫
UnsatisfiedLinkError
- 若是文件不存在。
NullPointerException
- 若是
filename
爲
null
getRuntime()
,
SecurityException
,
SecurityManager.checkLink(java.lang.String)
public void loadLibrary(String libname)
首先,若是有安全管理器,則用 libname
做爲參數調用 checkLink
方法。這可能致使安全性異常。
方法 System.loadLibrary(String)
是調用此方法的一種傳統而便捷的方式。若是在某個類實現中使用本機方法,則標準的策略是將本機代碼放入一個庫文件中(稱爲 LibFile
),而後在類聲明中放入一個靜態的初始值設定項:
當加載並初始化這個類時,也將加載實現本機方法所需的本機代碼。static { System.loadLibrary("LibFile"); }
若是用相同庫名屢次調用此方法,則忽略第二次及後續的調用。
libname
- 庫名。
SecurityException
- 若是安全管理器存在,而且其
checkLink
方法不容許加載指定的動態庫
UnsatisfiedLinkError
- 若是庫不存在。
NullPointerException
- 若是
libname
爲
null
SecurityException
,
SecurityManager.checkLink(java.lang.String)
@Deprecated public InputStream getLocalizedInputStream(InputStream in)
InputStreamReader
和 BufferedReader
類。
InputStream
,並返回除本地化外其餘全部方面都和變量等效的
InputStream
,這些方面包括:做爲本地字符集中的字符從流中被讀取,並將它們從本地字符集自動轉換爲 Unicode。
若是參數已是本地化流,則可做爲結果返回。
in
- 要本地化的 InputStream
InputStream
,
BufferedReader.BufferedReader(java.io.Reader)
,
InputStreamReader.InputStreamReader(java.io.InputStream)
@Deprecated public OutputStream getLocalizedOutputStream(OutputStream out)
OutputStreamWriter
、BufferedWriter
和 PrintWriter
類。
OutputStream
,並返回除本地化外其餘全部方面都和變量等效的
OutputStream
,這些方面包括:做爲 Unicode 字符被寫入流中,並被自動轉換爲本地字符集。
若是參數已是本地流,則可做爲結果返回。
out
- 要本地化的 OutputStream
OutputStream
,
BufferedWriter.BufferedWriter(java.io.Writer)
,
OutputStreamWriter.OutputStreamWriter(java.io.OutputStream)
,
PrintWriter.PrintWriter(java.io.OutputStream)