成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java? 教程(系統(tǒng)實(shí)用工具)

leonardofed / 2045人閱讀

系統(tǒng)實(shí)用工具

System類實(shí)現(xiàn)了許多系統(tǒng)實(shí)用程序,其中一些已在上一節(jié)配置實(shí)用程序中介紹過(guò),本節(jié)介紹一些其他系統(tǒng)實(shí)用程序。

命令行I/O對(duì)象

系統(tǒng)提供了幾個(gè)預(yù)定義的I/O對(duì)象,這些對(duì)象在Java應(yīng)用程序中非常有用,可以從命令行啟動(dòng),它們實(shí)現(xiàn)了大多數(shù)操作系統(tǒng)提供的標(biāo)準(zhǔn)I/O流,以及用于輸入密碼的控制臺(tái)對(duì)象,有關(guān)更多信息,請(qǐng)參閱基礎(chǔ)I/O課程中的命令行I/O。

系統(tǒng)屬性

在屬性中,我們研究了應(yīng)用程序可以使用Properties對(duì)象來(lái)維護(hù)其配置的方式,Java平臺(tái)本身使用Properties對(duì)象來(lái)維護(hù)自己的配置,System類維護(hù)一個(gè)Properties對(duì)象,該對(duì)象描述當(dāng)前工作環(huán)境的配置,系統(tǒng)屬性包括有關(guān)當(dāng)前用戶、Java運(yùn)行時(shí)的當(dāng)前版本以及用于分隔文件路徑名的組件的字符的信息。

下表描述了一些最重要的系統(tǒng)屬性。

含義
"file.separator" 用于分隔文件路徑組件的字符,這在UNIX上是“/”,在Windows上是“”
"java.class.path" 用于查找包含類文件的目錄和JAR存檔的路徑,類路徑的元素由path.separator屬性中指定的特定于平臺(tái)的字符分隔
"java.home" Java Runtime Environment(JRE)的安裝目錄
"java.vendor" JRE vendor名稱
"java.vendor.url" JRE vendor URL
"java.version" JRE版本號(hào)
"line.separator" 操作系統(tǒng)用于分隔文本文件中的行的序列
"os.arch" 操作系統(tǒng)架構(gòu)
"os.name" 操作系統(tǒng)名稱
"path.separator" java.class.path中使用的路徑分隔符
"user.dir" 用戶工作目錄
"user.home" 用戶主目錄
"user.name" 用戶帳戶名稱
安全考慮:安全管理器可以限制對(duì)系統(tǒng)屬性的訪問(wèn),這通常是applet中的一個(gè)問(wèn)題,它無(wú)法讀取某些系統(tǒng)屬性,也無(wú)法寫(xiě)入任何系統(tǒng)屬性,有關(guān)訪問(wèn)applet中的系統(tǒng)屬性的更多信息,請(qǐng)參閱“使用Java Rich Internet Applications進(jìn)行更多操作”課程中的“系統(tǒng)屬性”。
讀取系統(tǒng)屬性

System類有兩個(gè)用于讀取系統(tǒng)屬性的方法:getPropertygetProperties。

System類有兩個(gè)不同版本的getProperty,兩者都檢索參數(shù)列表中指定的屬性的值,兩個(gè)getProperty方法中較簡(jiǎn)單的方法是使用單個(gè)參數(shù),即屬性鍵。例如,要獲取path.separator的值,請(qǐng)使用以下語(yǔ)句:

System.getProperty("path.separator");

getProperty方法返回包含屬性值的字符串,如果該屬性不存在,則此版本的getProperty返回null。

另一個(gè)版本的getProperty需要兩個(gè)String參數(shù):第一個(gè)參數(shù)是查找的鍵,如果無(wú)法找到鍵或沒(méi)有值,則第二個(gè)參數(shù)是要返回的默認(rèn)值。例如,以下對(duì)getProperty的調(diào)用會(huì)查找名為subliminal.messageSystem屬性,這不是有效的系統(tǒng)屬性,因此該方法不是返回null,而是返回作為第二個(gè)參數(shù)提供的默認(rèn)值:"Buy StayPuft Marshmallows!"。

System.getProperty("subliminal.message", "Buy StayPuft Marshmallows!");

System類提供的訪問(wèn)屬性值的最后一個(gè)方法是getProperties方法,該方法返回一個(gè)Properties對(duì)象,該對(duì)象包含一組完整的系統(tǒng)屬性定義。

寫(xiě)入系統(tǒng)屬性

要修改現(xiàn)有的系統(tǒng)屬性集,請(qǐng)使用System.setProperties,此方法采用已初始化為包含要設(shè)置的屬性的Properties對(duì)象,此方法使用Properties對(duì)象表示的新集替換整個(gè)系統(tǒng)屬性集。

更改系統(tǒng)屬性可能存在危險(xiǎn),應(yīng)謹(jǐn)慎處理,許多系統(tǒng)屬性在啟動(dòng)后不會(huì)重新讀取,而是用于提供信息,更改某些屬性可能會(huì)產(chǎn)生意外的副作用。

下一個(gè)示例PropertiesTest創(chuàng)建一個(gè)Properties對(duì)象,并從myProperties.txt初始化它。

subliminal.message=Buy StayPuft Marshmallows!

然后,PropertiesTest使用System.setProperties將新的Properties對(duì)象安裝為當(dāng)前的系統(tǒng)屬性集。

import java.io.FileInputStream;
import java.util.Properties;

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

        // set up new properties object
        // from file "myProperties.txt"
        FileInputStream propFile =
            new FileInputStream( "myProperties.txt");
        Properties p =
            new Properties(System.getProperties());
        p.load(propFile);

        // set the system properties
        System.setProperties(p);
        // display new properties
        System.getProperties().list(System.out);
    }
}

注意PropertiesTest如何創(chuàng)建Properties對(duì)象p,它被用作setProperties的參數(shù):

Properties p = new Properties(System.getProperties());

此語(yǔ)句使用當(dāng)前系統(tǒng)屬性集初始化新屬性對(duì)象p,在此小應(yīng)用程序的情況下,該屬性是由運(yùn)行時(shí)系統(tǒng)初始化的屬性集。然后,應(yīng)用程序從文件myProperties.txt將其他屬性加載到p中,并將系統(tǒng)屬性設(shè)置為p。這具有將myProperties.txt中列出的屬性添加到運(yùn)行時(shí)系統(tǒng)在啟動(dòng)時(shí)創(chuàng)建的屬性集的效果,請(qǐng)注意,應(yīng)用程序可以創(chuàng)建沒(méi)有任何默認(rèn)Properties對(duì)象的p,如下所示:

Properties p = new Properties();

另請(qǐng)注意,系統(tǒng)屬性的值可以被覆蓋!例如,如果myProperties.txt包含以下行,則將覆蓋java.vendor系統(tǒng)屬性:

java.vendor=Acme Software Company

通常,請(qǐng)注意不要覆蓋系統(tǒng)屬性。

setProperties方法更改當(dāng)前正在運(yùn)行的應(yīng)用程序的系統(tǒng)屬性集,這些變化并不持久。也就是說(shuō),更改應(yīng)用程序中的系統(tǒng)屬性不會(huì)影響將來(lái)對(duì)此解釋程序或任何其他應(yīng)用程序的Java解釋程序的調(diào)用,運(yùn)行時(shí)系統(tǒng)每次啟動(dòng)時(shí)都會(huì)重新初始化系統(tǒng)屬性,如果要保持對(duì)系統(tǒng)屬性的更改,則應(yīng)用程序必須在退出之前將值寫(xiě)入某個(gè)文件,并在啟動(dòng)時(shí)再次讀取它們。

安全管理器

安全管理器是定義應(yīng)用程序安全策略的對(duì)象,此策略指定不安全或敏感的操作,安全策略不允許的任何操作都會(huì)導(dǎo)致拋出SecurityException,應(yīng)用程序還可以查詢其安全管理器以發(fā)現(xiàn)允許的操作。

通常,Web applet與瀏覽器或Java Web Start插件提供的安全管理器一起運(yùn)行,其他類型的應(yīng)用程序通常在沒(méi)有安全管理器的情況下運(yùn)行,除非應(yīng)用程序本身定義了安全管理器。如果沒(méi)有安全管理器,則該應(yīng)用程序沒(méi)有安全策略,并且沒(méi)有任何限制。

本節(jié)介紹應(yīng)用程序如何與現(xiàn)有安全管理器進(jìn)行交互,有關(guān)更多詳細(xì)信息,包括有關(guān)如何設(shè)計(jì)安全管理器的信息,請(qǐng)參閱安全指南。

與安全管理器交互

安全管理器是SecurityManager類型的對(duì)象,要獲取對(duì)此對(duì)象的引用,請(qǐng)調(diào)用System.getSecurityManager。

SecurityManager appsm = System.getSecurityManager();

如果沒(méi)有安全管理器,則此方法返回null

一旦應(yīng)用程序具有對(duì)安全管理器對(duì)象的引用,它就可以請(qǐng)求執(zhí)行特定事務(wù)的權(quán)限,標(biāo)準(zhǔn)庫(kù)中的許多類都是這樣做的。例如,以退出狀態(tài)終止Java虛擬機(jī)的System.exit調(diào)用SecurityManager.checkExit以確保當(dāng)前線程具有關(guān)閉應(yīng)用程序的權(quán)限。

SecurityManager類定義了許多用于驗(yàn)證其他類型操作的其他方法。例如,SecurityManager.checkAccess驗(yàn)證線程訪問(wèn),SecurityManager.checkPropertyAccess驗(yàn)證對(duì)指定屬性的訪問(wèn),每個(gè)操作或一組操作都有自己的checkXXX()方法。

此外,checkXXX()方法集表示已受安全管理器保護(hù)的操作集,通常,應(yīng)用程序不必直接調(diào)用任何checkXXX()方法。

確認(rèn)安全違規(guī)

在沒(méi)有安全管理器的情況下,許多常規(guī)操作在使用安全管理器運(yùn)行時(shí)都會(huì)拋出SecurityException,即使在調(diào)用未記錄為拋出SecurityException的方法時(shí)也是如此,例如,請(qǐng)考慮以下用于讀取文件的代碼:

reader = new FileReader("xanadu.txt");

在缺少安全管理器的情況下,如果xanadu.txt存在且可讀,則此語(yǔ)句無(wú)錯(cuò)誤地執(zhí)行,但是假設(shè)此語(yǔ)句插入到Web applet中,該applet通常在不允許文件輸入的安全管理器下運(yùn)行,可能會(huì)導(dǎo)致以下錯(cuò)誤消息:

appletviewer fileApplet.html
Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.io.FilePermission characteroutput.txt write)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
        at java.security.AccessController.checkPermission(AccessController.java:546)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkWrite(SecurityManager.java:962)
        at java.io.FileOutputStream.(FileOutputStream.java:169)
        at java.io.FileOutputStream.(FileOutputStream.java:70)
        at java.io.FileWriter.(FileWriter.java:46)
...

請(qǐng)注意,在這種情況下拋出的特定異常java.security.AccessControlException是SecurityException的子類。

系統(tǒng)中的其他方法

本節(jié)介紹了前面幾節(jié)中未介紹的System中的一些方法。

arrayCopy方法有效地在數(shù)組之間復(fù)制數(shù)據(jù),有關(guān)更多信息,請(qǐng)參閱語(yǔ)言基礎(chǔ)知識(shí)課程中的數(shù)組。

currentTimeMillis和nanoTime方法可用于測(cè)量應(yīng)用程序執(zhí)行期間的時(shí)間間隔。要以毫秒為單位測(cè)量時(shí)間間隔,請(qǐng)?jiān)陂g隔的開(kāi)始和結(jié)束時(shí)調(diào)用currentTimeMillis兩次,并從第二個(gè)返回值中減去第一個(gè)值。同樣,調(diào)用nanoTime兩次測(cè)量一個(gè)納秒的間隔。

currentTimeMillisnanoTime的準(zhǔn)確性受操作系統(tǒng)提供的時(shí)間服務(wù)的限制,不要假設(shè)currentTimeMillis精確到最接近的毫秒,或者nanoTime精確到最接近的納秒。此外,currentTimeMillisnanoTime都不應(yīng)用于確定當(dāng)前時(shí)間,使用高級(jí)方法,例如java.util.Calendar.getInstance。

exit方法使Java虛擬機(jī)關(guān)閉,并使用參數(shù)指定的整數(shù)退出狀態(tài),退出狀態(tài)可用于啟動(dòng)應(yīng)用程序的進(jìn)程,按照慣例,退出狀態(tài)為0表示應(yīng)用程序正常終止,而任何其他值都是錯(cuò)誤代碼。、

上一篇:配置實(shí)用工具 下一篇:PATH和CLASSPATH

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73909.html

相關(guān)文章

  • Java? 教程(目錄)

    Java? 教程 Java教程是為JDK 8編寫(xiě)的,本頁(yè)面中描述的示例和實(shí)踐沒(méi)有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語(yǔ)言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書(shū)籍的形式提供,如Java教程,第六版,前往Amazon.com購(gòu)買。 入門 介紹Java技術(shù)和安裝Java開(kāi)發(fā)軟件并使用...

    lifesimple 評(píng)論0 收藏0
  • 【精致Java教程】03:安裝JDK和配置Java環(huán)境變量

    摘要:運(yùn)行環(huán)境,它是程序運(yùn)行的所必需的環(huán)境集合。安裝下一步下一步即可,要記得安裝路徑。配置環(huán)境變量安裝完以后需要對(duì)系統(tǒng)的環(huán)境變量進(jìn)行配置才能開(kāi)發(fā)。之所以不能運(yùn)行是因?yàn)檠b類之后還得配置環(huán)境變量。 在了解了Java歷史、特性、作用和跨平臺(tái)原理之后,我們可以開(kāi)始為Java開(kāi)發(fā)做準(zhǔn)備工作了,只是在此之前我們還需要了解Java的兩大基礎(chǔ)概念JDK(Java Development kit)和JRE(J...

    CoyPan 評(píng)論0 收藏0
  • Java? 教程Java技術(shù)現(xiàn)象)

    Java技術(shù)現(xiàn)象 關(guān)于Java技術(shù)的討論似乎無(wú)處不在,但究竟是什么呢?下面幾節(jié)將解釋Java技術(shù)如何既是一種編程語(yǔ)言又是一種平臺(tái),并概述該技術(shù)可以為你做什么。 關(guān)于Java技術(shù) Java技術(shù)既是編程語(yǔ)言又是平臺(tái)。 Java編程語(yǔ)言 Java編程語(yǔ)言是一種高級(jí)語(yǔ)言,可以用以下所有流行語(yǔ)來(lái)描述它: 簡(jiǎn)單的 體系結(jié)構(gòu)中立的 面向?qū)ο蟮?輕便的 分布式的 高性能的 多線程 健壯的 動(dòng)態(tài)的 安全的 前面...

    haobowd 評(píng)論0 收藏0
  • Java? 教程(PATH和CLASSPATH)

    PATH和CLASSPATH 本節(jié)介紹如何在Microsoft Windows,Solaris和Linux上使用PATH和CLASSPATH環(huán)境變量,有關(guān)最新信息,請(qǐng)參閱安裝Java Development Kit(JDK)軟件包中隨附的安裝說(shuō)明。 安裝軟件后,JDK目錄將具有如下所示的結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbqpb7?w=282&h...

    Ku_Andrew 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<