欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

java Runtime類

系統(tǒng) 1848 0

Java的類庫(kù)日益龐大,所包含的類和接口也不計(jì)其數(shù)。但其中有一些非常重要的類和接口,是Java類庫(kù)中的核心部分。常見的有String、 Object、Class、Collection、ClassLoader、Runtime、Process...,熟悉這些類是學(xué)好Java的基礎(chǔ)。而 這些類一般不容易理解,需要做深入的研究和實(shí)踐才能掌握。下面是我對(duì)這些類理解和使用的一些總結(jié)。歡迎你在閱讀后將你寶貴的意見和讀后感留下!

一、概述

????? Runtime類封裝了運(yùn)行時(shí)的環(huán)境。每個(gè) Java 應(yīng)用程序都有一個(gè) Runtime 類實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。

????? 一般不能實(shí)例化一個(gè)Runtime對(duì)象,應(yīng)用程序也不能創(chuàng)建自己的 Runtime 類實(shí)例,但可以通過(guò) getRuntime 方法獲取當(dāng)前Runtime運(yùn)行時(shí)對(duì)象的引用。

????? 一旦得到了一個(gè)當(dāng)前的Runtime對(duì)象的引用,就可以調(diào)用Runtime對(duì)象的方法去控制Java虛擬機(jī)的狀態(tài)和行為。

????? 當(dāng)Applet和其他不被信任的代碼調(diào)用任何Runtime方法時(shí),常常會(huì)引起SecurityException異常。

二、API預(yù)覽

??? addShutdownHook(Thread hook)

????? 注冊(cè)新的虛擬機(jī)來(lái)關(guān)閉掛鉤。 www.87717.com

??? availableProcessors()

????? 向 Java 虛擬機(jī)返回可用處理器的數(shù)目。

??? exec(String command)

????? 在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令。

??? exec(String[] cmdarray)

????? 在單獨(dú)的進(jìn)程中執(zhí)行指定命令和變量。

??? exec(String[] cmdarray, String[] envp)

????? 在指定環(huán)境的獨(dú)立進(jìn)程中執(zhí)行指定命令和變量。

??? exec(String[] cmdarray, String[] envp, File dir)

????? 在指定環(huán)境和工作目錄的獨(dú)立進(jìn)程中執(zhí)行指定的命令和變量。

??? exec(String command, String[] envp)

????? 在指定環(huán)境的單獨(dú)進(jìn)程中執(zhí)行指定的字符串命令。

??? exec(String command, String[] envp, File dir)

????? 在有指定環(huán)境和工作目錄的獨(dú)立進(jìn)程中執(zhí)行指定的字符串命令。

??? exit(int status)

????? 通過(guò)啟動(dòng)虛擬機(jī)的關(guān)閉序列,終止當(dāng)前正在運(yùn)行的 Java 虛擬機(jī)。

??? freeMemory()

????? 返回 Java 虛擬機(jī)中的空閑內(nèi)存量。

??? gc()

????? 運(yùn)行垃圾回收器。

??? InputStream getLocalizedInputStream(InputStream in)

????? 已過(guò)時(shí)。 從 JDK 1.1 開始,將本地編碼字節(jié)流轉(zhuǎn)換為 Unicode 字符流的首選方法是使用 InputStreamReader 和 BufferedReader 類。

??? OutputStream getLocalizedOutputStream(OutputStream out)

????? 已過(guò)時(shí)。 從 JDK 1.1 開始,將 Unicode 字符流轉(zhuǎn)換為本地編碼字節(jié)流的首選方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 類。

??? getRuntime()

????? 返回與當(dāng)前 Java 應(yīng)用程序相關(guān)的運(yùn)行時(shí)對(duì)象。

?

??? halt(int status)

????? 強(qiáng)行終止目前正在運(yùn)行的 Java 虛擬機(jī)。

??? load(String filename)

????? 加載作為動(dòng)態(tài)庫(kù)的指定文件名。

??? loadLibrary(String libname)

????? 加載具有指定庫(kù)名的動(dòng)態(tài)庫(kù)。

maxMemory()

????? 返回 Java 虛擬機(jī)試圖使用的最大內(nèi)存量。

??? removeShutdownHook(Thread hook)

????? 取消注冊(cè)某個(gè)先前已注冊(cè)的虛擬機(jī)關(guān)閉掛鉤。

??? runFinalization()

????? 運(yùn)行掛起 finalization 的所有對(duì)象的終止方法。

??? runFinalizersOnExit(value)

????? 已過(guò)時(shí)。 此方法本身具有不安全性。它可能對(duì)正在使用的對(duì)象調(diào)用終結(jié)方法,而其他線程正在操作這些對(duì)象,從而導(dǎo)致不正確的行為或死鎖。

??? totalMemory()

????? 返回 Java 虛擬機(jī)中的內(nèi)存總量。

??? traceInstructions(on)

????? 啟用/禁用指令跟蹤。

??? traceMethodCalls(on)

????? 啟用/禁用方法調(diào)用跟蹤。

三、常見的應(yīng)用

1、內(nèi)存管理:

Java提供了無(wú)用單元自動(dòng)收集機(jī)制。通過(guò)totalMemory()和freeMemory()方法可以知道對(duì)象的堆內(nèi)存有多大,還剩多少。

Java會(huì)周期性的回收垃圾對(duì)象(未使用的對(duì)象),以便釋放內(nèi)存空間。但是如果想先于收集器的下一次指定周期來(lái)收集廢棄的對(duì)象,可以通過(guò)調(diào)用gc()方法 來(lái)根據(jù)需要運(yùn)行無(wú)用單元收集器。一個(gè)很好的試驗(yàn)方法是先調(diào)用gc()方法,然后調(diào)用freeMemory()方法來(lái)查看基本的內(nèi)存使用情況,接著執(zhí)行代 碼,然后再次調(diào)用freeMemory()方法看看分配了多少內(nèi)存。下面的程序演示了這個(gè)構(gòu)想。

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);

?

??????? 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);

??? }

}

編譯后運(yùn)行結(jié)果如下(不同的機(jī)器不同時(shí)間運(yùn)行的結(jié)果也不一定一樣):

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

?

2、執(zhí)行其他程序

在安全的環(huán)境中,可以在多任務(wù)操作系統(tǒng)中使用Java去執(zhí)行其他特別大的進(jìn)程(也就是程序)。ecec()方法有幾種形式命名想要運(yùn)行的程序和它的輸入?yún)?數(shù)。ecec()方法返回一個(gè)Process對(duì)象,可以使用這個(gè)對(duì)象控制Java程序與新運(yùn)行的進(jìn)程進(jìn)行交互。ecec()方法本質(zhì)是依賴于環(huán)境。

下面的例子是使用ecec()方法啟動(dòng)windows的記事本notepad。這個(gè)例子必須在Windows操作系統(tǒng)上運(yùn)行。

?

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對(duì)象后,在新程序開始運(yùn)行后就可以使用Process的 方法了。可以用destory()方法殺死子進(jìn)程,也可以使用waitFor()方法等待程序直到子程序結(jié)束,exitValue()方法返回子進(jìn)程結(jié)束 時(shí)返回的值。如果沒有錯(cuò)誤,將返回0,否則返回非0。下面是關(guān)于ecec()方法的例子的改進(jìn)版本。例子被修改為等待,直到運(yùn)行的進(jìn)程退出:

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());

??? }

}

下面是運(yùn)行的結(jié)果(當(dāng)關(guān)閉記事本后,會(huì)接著運(yùn)行程序,打印信息):

Notepad returned 0 www.87717.com

按任意鍵繼續(xù). . .

?

當(dāng)子進(jìn)程正在運(yùn)行時(shí),可以對(duì)標(biāo)準(zhǔn)輸入輸出進(jìn)行讀寫。getOutputStream()方法和getInPutStream()方法返回對(duì)子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。

?

增加的內(nèi)容:

使用Runtime.getRuntime().exec()方法可以在java程序里運(yùn)行外部程序。
? 1. exec(String command)
? 2. exec(String command, String envp[], File dir)
? 3. exec(String cmd, String envp[])
? 4. exec(String cmdarray[])
? 5. exec(String cmdarray[], String envp[])
? 6. exec(String cmdarray[], String envp[], File dir)
一般的應(yīng)用程序可以直接使用第一版本,當(dāng)有環(huán)境變量傳遞的時(shí)候使用后面的版本。其中2和6版本可以傳遞一個(gè)目錄,標(biāo)識(shí)當(dāng)前目錄,因?yàn)橛行┏绦蚴鞘褂孟鄬?duì)目錄的,所以就要使用這個(gè)版本。

cmd.exe /c start <FileName>
使用DOS命令(比如dir)時(shí)也要使用到調(diào)用。如果想與調(diào)用的程序進(jìn)行交互,那么就要使用該方法的返回對(duì)象Process了,通過(guò)Process的 getInputStream(),getOutputStream()和getErrorStream()方法可以得到輸入輸出流,然后通過(guò) InputStream可以得到程序?qū)刂婆_(tái)的輸出信息,通過(guò)OutputStream可以給程序輸入指令,這樣就達(dá)到了程序的交換功能。

用Java編寫應(yīng)用時(shí),有時(shí)需要在程序中調(diào)用另一個(gè)現(xiàn)成的可執(zhí)行程序或系統(tǒng)命令,這時(shí)可以通過(guò)組合使用Java提供的Runtime類和Process類的方法實(shí)現(xiàn)。下面是一種比較典型的程序模式:

1 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ?? [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載)
2 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??Process?process? = ?Runtime.getRuntime().exec( " .\p.exe "
);
3
[轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??process.waitfor();
4 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ?? [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載)


在上面的程序中,第一行的“.\p.exe”是要執(zhí)行的程序名,Runtime.getRuntime()返回當(dāng)前應(yīng)用程序的Runtime對(duì)象,該對(duì)象 的exec()方法指示Java虛擬機(jī)創(chuàng)建一個(gè)子進(jìn)程執(zhí)行指定的可執(zhí)行程序,并返回與該子進(jìn)程對(duì)應(yīng)的Process對(duì)象實(shí)例。通過(guò)Process可以控制 該子進(jìn)程的執(zhí)行或獲取該子進(jìn)程的信息。第二條語(yǔ)句的目的等待子進(jìn)程完成再往下執(zhí)行。
但在windows平臺(tái)上,如果處理不當(dāng),有時(shí)并不能得到預(yù)期的結(jié)果。下面是筆者在實(shí)際編程中總結(jié)的幾種需要注意的情況:
? 1、執(zhí)行DOS的內(nèi)部命令
? 如果要執(zhí)行一條DOS內(nèi)部命令,有兩種方法。一種方法是把命令解釋器包含在exec()的參數(shù)中。例如,執(zhí)行dir命令,在NT上,可寫成exec("cmd.exe?? /c dir"),在windows95/98下,可寫成“command.exe /c dir”,其中參數(shù)“/c”表示命令執(zhí)行后關(guān)閉DOS立即關(guān)閉窗口。另一種方法是,把內(nèi)部命令放在一個(gè)批命令my_dir.bat文件中,在Java程序 中寫成exec("my_dir.bat")。如果僅僅寫成exec("dir"),Java虛擬機(jī)則會(huì)報(bào)運(yùn)行時(shí)錯(cuò)誤。前一種方法要保證程序的可移植性, 需要在程序中讀取運(yùn)行的操作系統(tǒng)平臺(tái),以調(diào)用不同的命令解釋器。后一種方法則不需要做更多的處理。
? 2、打開一個(gè)不可執(zhí)行的文件
? 打開一個(gè)不可執(zhí)行的文件,但該文件存在關(guān)聯(lián)的應(yīng)用程序,則可以有兩種方式。以打開一個(gè)word文檔a.doc文件為例,Java中可以有以下兩種寫法:

1 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??exec( " start?.\a.doc " );
2 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??exec( " Files\Microsoft?Office\office\winword.exe?.\a.doc " );

? 顯然,前一種方法更為簡(jiǎn)捷方便。
? 3、執(zhí)行一個(gè)有標(biāo)準(zhǔn)輸出的DOS可執(zhí)行程序
? 在Windows平臺(tái)上,運(yùn)行被調(diào)用程序的DOS窗口在程序執(zhí)行完畢后往往并不會(huì)自動(dòng)關(guān)閉,從而導(dǎo)致Java應(yīng)用程序阻塞在waitfor()語(yǔ)句。導(dǎo)致 該現(xiàn)象的一個(gè)可能的原因是,該可執(zhí)行程序的標(biāo)準(zhǔn)輸出比較多,而運(yùn)行窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)不夠大。解決的辦法是,利用Java中Process類提供的方法 讓Java虛擬機(jī)截獲被調(diào)用程序的DOS運(yùn)行窗口的標(biāo)準(zhǔn)輸出,在waitfor()命令之前讀出窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)中的內(nèi)容。一段典型的程序如下:

1 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ?? [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載)
2
[轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??String?s;
3 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??Process?process? = ?Runtime.getRuntime().exec( " cmd?/c?dir?\windows "
);
4 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??BufferedReader?bufferedReader? = ? new ?BufferedReader( new
?InputStreamReader(process.getInputStream());
5 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ?? while ((s = bufferedReader.readLine())? != ? null
)
6
[轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??System.out.println(s);
7 [轉(zhuǎn)載]Java?<wbr>RunTime類?<wbr>(轉(zhuǎn)載) ??process.waitfor();

java Runtime類


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲免费在线观看 | 日日爽天天操 | 午夜电影合集 | v片在线免费观看 | 激情成人综合网 | 久草资源总站 | 色综合久久天天综合观看 | 日日摸夜夜摸狠狠摸日日碰夜夜做 | 九九导航| 日本在线视频网 | 欧美第一区 | 国产亚洲欧美日本一二三本道 | 中文一级毛片 | 欧美日韩一二区 | 精品久久九九 | 九九国产在线视频 | 色综合久久精品中文字幕首页 | 7777精品伊人久久久大香线蕉 | 久久精品99| 国产91久久最新观看地址 | 亚洲成人动漫在线观看 | 一区二区三区视频免费 | 三极片免费看 | 成人爽A毛片免费啪啪 | 免费一级做a爰片性色毛片 狠狠色欧美亚洲狠狠色www | 国产精品一区二区久久久久 | 免费人成网站线观看合集 | 亚洲精品综合网 | 剑来在线观看 | 奇米影视7777久久精品人人爽 | 亚洲日韩中文字幕 | 日韩在线观看中文 | 波多野结衣在线观看一区 | 国产日产亚洲欧美综合另类 | 成人午夜视频免费 | 粉嫩粉嫩芽的虎白女18在线视频 | 一级片免费在线播放 | 青草视频网 | 久久中文字幕一区二区 | 一区二区三区日 | 国产在线第一区 |