1、java.lang 研究
在本書的第1部分,我們提到因為性能的原因,Java使用簡單的類型,例如整型(int)和字符(char)。這些數(shù)據(jù)類型不是對象層次結(jié)構(gòu)的組成部分。它們通過值傳遞給方法而不能直接通過引用傳遞。而且,也沒有辦法使兩種方法對整型(int)引用同一實例(same instance)。有時需要對這些簡單的類型建立對象表達(dá)式。例如在第15章中討論的僅僅處理對象的枚舉類;如果要將簡單類型存儲到這些類中的一個,需要在類中包裝簡單類型。為了滿足這種需要,Java提供了與每一個簡單類型相應(yīng)的類。本質(zhì)上,這些類在類中包裝(wrap)簡單類型。因此,它們通常被稱作類型包裝器(wrappers)。
抽象類Number定義了一個由包裝數(shù)字類型字節(jié)型(byte),短整型(short),整型(int),長整型(long),浮點型(float)和雙精度型(double)的類實現(xiàn)的超類。Number有返回上面不同數(shù)字格式的對象值的抽象方法。也就是,doubleValue( )方法返回雙精度(double)值,floatValue( )方法返回浮點(float)值等。這些方法如下: byte byteValue( ) double doubleValue( ) float floatValue( ) int intValue( ) long longValue( ) short shortValue( ) 這些方法的返回值可以被舍入。 Number有6個具體的子類包含了6種數(shù)字類型的顯式值:雙精度型(Double),浮點型(Float),字節(jié)型(Byte),短整型(Short),整型(Integer)和長整型(Long)。
雙精度(Double)和浮點(Float)分別是對類型double和類型float的浮點值的包裝器。浮點(Float)構(gòu)造函數(shù)如下所示: Float(double num) Float(float num) Float(String str) 引發(fā)NumberFormatException異常 正如你所看到的,浮點(Float)對象可以由類型float或類型double的值創(chuàng)建。它們也能由浮點數(shù)的字符串表達(dá)式創(chuàng)建。 雙精度(Double)構(gòu)造函數(shù)如下: Double(double num) Double(String str) 引發(fā)NumberFormatException異常 雙精度(Double)對象可以被雙精度(double)值或包含了浮點值的字符串創(chuàng)建。 由浮點(Float)定義的方法在表14-1中列出。由雙精度(Double)定義的方法在表14-2中列出。浮點(Float)和雙精度(Double)都定義了下面的常數(shù): MAX_VALUE 最大正值 MIN_VALUE 最小正值 NaN 非數(shù)字 POSITIVE_INFINITY 正無窮 NEGATIVE_INFINITY 負(fù)無窮 TYPE 浮點(float)或雙精度(double)的類(Class)對象 表1 由Float定義的方法 方法 描述 byte byteValue() 返回調(diào)用對象的值(字節(jié)型) int compareTo(Float f) 將調(diào)用對象的數(shù)值與f中的數(shù)值進(jìn)行比較,如果兩者相等,返回0。如果調(diào)用對象的值小于f的值,則返回負(fù)值。如果調(diào)用對象的值大于f的值,則返回正值(在Java 2中新增加的) int compareTo(object obj) 當(dāng)obj是類Float中的對象時,該方法與compareTo(Float)的功能相同。否則,引發(fā)一個ClassCastException異常(在Java 2中新增加的) double doubleValue() 返回調(diào)用對象的值(雙精度型) boolean equals(Object FloatObj) 如果float調(diào)用對象與FloatObj相等,則返回true。否則返回false static int float ToIntBits(float num) 返回與num相應(yīng)的與IEEE兼容的單精度位模式 Float floatValue() 返回調(diào)用對象的值(浮點型) int hashCode() 返回調(diào)用對象的散列值 static float intBitsToFloat(int num) 返回由num指定的,與IEEE兼容的單精度位模式的等價浮點(float)值 int intValue() 返回整型(int)形式的調(diào)用對象值 boolean isInfinite() 如果調(diào)用對象包含有無窮大值,則返回true。否則返回false static boolean isInfinite(float num) 如果num指定了一個無窮大值,則返回true。否則返回false boolean isNaN() 如果調(diào)用對象中包含了非數(shù)字值,則返回true。否則返回false static boolean isNaN(float num) 如果num指定了一個非數(shù)字值,則返回true。否則返回false long longValue() 返回調(diào)用對象的值(長整型) static float parseFloat(String str) throws NumberFormatException 以10為基數(shù),返回包含在由str指定的字符串中的數(shù)字的等價浮點值(在Java 2中新增加的) short shortValue() 返回調(diào)用對象值(短整型) String toString() 返回調(diào)用對象的等價字符串形式 static String to String(float num) 返回由num指定的值的等價字符串 static Float valueOf(String str) throws NumberForamtException 返回包含了由str中的字符串指定的值的float對象 表2 由Double定義的方法 方法 描述 byte byteValue() 返回調(diào)用對象的值(字節(jié)型) int compareTo(Double d) 將調(diào)用對象的值與d的數(shù)值進(jìn)行比較。如果這兩個值相等,則返回0。如果調(diào)用對象的數(shù)值小于d的數(shù)值,則返回負(fù)值。如果調(diào)用對象的數(shù)值大于d的數(shù)值,則返回正值(在Java 2中新增加的) Int compareTo(Object obj) 如果obj屬于類Double,其操作與compareTo(Double)相同。否則,引發(fā)一個ClassCastException異常(在Java 2中新增加的) static long doubleToLongBits(double num) 返回與num相應(yīng)的與IEEE兼容的雙精度位模式 double doubleValue() 返回調(diào)用對象的值(雙精度) boolean equals(Object DoubleObj) 如果double調(diào)用對象與DoubleObj相等,則返回true。否則,返回false float floatValue() 返回調(diào)用對象的值(浮點型) int hashcode() 返回調(diào)用對象的散列碼 int intValue() 返回調(diào)用對象的值(整型) boolean isInfinite() 如果調(diào)用對象包含了一個無窮大值,則返回true。否則,返回false static boolean isInfinite(double num) 如果num指定了一個無窮大值,則返回true。否則,返回false boolean is NaN() 如果調(diào)用對象包含了一個非數(shù)字值,則返回true。否則,返回false static boolean isNaN(double num) 如果num指定了一個非數(shù)字值,則返回true。否則,返回false static double longBitsToDouble(long num) 返回由num指定的,與IEEE兼容的雙精度位模式的雙精度(double)等價值 long longValue() 返回調(diào)用對象的值(長整型) static double parseDouble(String str) throws NumberFormatException 以10為基數(shù),返回包含在由str指定的字符串中的數(shù)字的等價雙精度(double)形式(在Java 2中新增加的) short shortValue() 返回調(diào)用對象的值(短整型) String toString() 返回調(diào)用對象的等價字符串形式 Static String toString(double num) 返回由num指定的值的等價字符串形式 Static Double valueOf(String str) throws NumberFormatException 返回包含了由str中的字符串指定的值的double對象 在下面的例子中創(chuàng)建兩個double對象--一個通過使用雙精度(double)值實現(xiàn),另一個通過傳遞一個可以被解析為雙精度(double)的字符串來實現(xiàn)。 class DoubleDemo { public static void main(String args[]) { Double d1 = new Double(3.14159); Double d2 = new Double("314159E-5"); System.out.println(d1 + " = " + d2 + " -> " + d1.equals(d2)); } } 正如從下面的輸出中可以看到的那樣,如同通過equals( )方法返回true,兩種構(gòu)造函數(shù)創(chuàng)建相同的雙精度(double)實例。 3.14159 = 3.14159 -> true 理解isInfinite( )和isNaN( ) 浮點(Float)和雙精度(Double)提供了isInfinite( )和isNaN( )方法,這些方法會有助于操作兩個特殊的雙精度(double)和浮點(float)值,這些方法檢驗兩個由IEEE浮點規(guī)范定義的獨特的值:無窮和NaN(非具體數(shù)字)。當(dāng)被檢驗的值為無窮大或無窮小值時,isInfinite( )方法返回true。當(dāng)被檢驗值為非數(shù)字時,isNaN( )方法返回true。 在下面的例子中構(gòu)造了兩個Double對象;一個是無窮,另一個是非數(shù)字: // Demonstrate isInfinite() and isNaN() class InfNaN { public static void main(String args[]) { Double d1 = new Double(1/0.); Double d2 = new Double(0/0.); System.out.println(d1 + ": " + d1.isInfinite() + ", " + d1.isNaN()); System.out.println(d2 + ": " + d2.isInfinite() + ", " + d2.isNaN()); } } 程序運行產(chǎn)生如下的輸出: Infinity: true, false NaN: false, true Byte,Short,Integer,和Long類分別是字節(jié)型(byte),短整型(short),整型(int)和長整型(long)整數(shù)類型的包裝器。它們的構(gòu)造函數(shù)如下: Byte(byte num) Byte(String str) 引發(fā)一個NumberFormatException異常 Short(short num) Short(String str) 引發(fā)一個NumberFormatException異常 Integer(int num) Integer(String str) 引發(fā)一個NumberFormatException異常 Long(long num) Long(String str) 引發(fā)一個NumberFormatException異常 正如你能看到的,這些對象可由數(shù)值或含有有效整數(shù)值的字符串創(chuàng)建。 由這些類定義的方法列在表14-3到表14-6中。正如你能看到的,它們定義方法以便從字符串解析整數(shù)和將字符串轉(zhuǎn)換為整數(shù)。為方便起見,這些方法提供的變量可以用來指定radix,也稱為基數(shù)。通常二進(jìn)制(binary)的基數(shù)是2,八進(jìn)制(octal)的基數(shù)是8,十進(jìn)制(decimal)的基數(shù)是10,而十六進(jìn)制(hexadecimal)的基數(shù)為16。 表3 由Byte定義的方法 方法 描述 byte byteValue() 返回調(diào)用對象值(字節(jié)型) int compareTo(Byte b) 將調(diào)用對象的數(shù)值與b的數(shù)值進(jìn)行比較。如果這兩個數(shù)值相等,則返回0。如果調(diào)用對象的數(shù)值小于b的數(shù)值,則返回負(fù)值。如果調(diào)用對象的數(shù)值大于b的數(shù)值,則返回正值(在Java 2中新增加的) int compareTo(Object obj) 如果obj屬于類Byte,其操作與compareTo(Byte)相同。否則,引發(fā)一個ClassCastException異常(在Java 2中新增加的) static Byte decode(String str) throws NumberFormatException 返回一個包含了由str中的字符串指定的值的Byte對象 double doubleValue() 返回調(diào)用對象值(雙精度度型) boolean equals(Object ByteObj) 如果Byte調(diào)用對象與ByteObj相等,則返回true。否則,返回false float floatValue() 返回調(diào)用對象值(浮點型) int hashCode() 返回調(diào)用對象的散列碼 int intValue() 返回調(diào)用對象值(整型) long longValue() 返回調(diào)用對象值(長整型) static byte parseByte(String str) throws NumberFormatException 以10為基數(shù),返回包含在由str指定的字符串中的數(shù)字的等價字節(jié)(byte)形式 static byte parseByte(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回包含在由str指定的字符串中的數(shù)字的等價字節(jié) short shortValue() 返回調(diào)用對象值(短整型) String toString() 返回一個包含了調(diào)用對象的等價十進(jìn)制形式的字符串 static String toString(byte num) 返回一個包含了num的等價十進(jìn)制形式的字符串 static Byte valueOf(String str) throws NumberFormatException 返回一個包含了由str中的字符串指定的值的Byte對象 static Byte valueOf(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回一個包含了由str中的字符串指定的值的Byte對象 表4 由Short定義的方法 方法 描述 byte byteValue() 返回調(diào)用對象值(字節(jié)型) int compareTo(Short s) 將調(diào)用對象的數(shù)值和s的數(shù)值進(jìn)行比較。如果這兩個值相等,則返回0。如果調(diào)用對象的數(shù)值小于s的數(shù)值,則返回負(fù)值 如果調(diào)用對象的數(shù)值大于s的數(shù)值,則返回正值(在Java 2中新增加的) int compareTo(Object obj) 如果obj屬于類Short,其操作與compareTo(Short)相同。否則,引發(fā)一個ClassCastException異常(在Java 2中新增加的) static Short decode(String str) throws NumberFormatException 返回一個包含了由str中的字符串指定值的Short對象 double doubleValue() 返回調(diào)用對象值(雙精度型) boolean equals(Object ShortObj) 如果整型(Interger)調(diào)用對象與ShortObj相等,則返回true。否則,返回false float floatValue() 返回調(diào)用對象值(浮點值) int hashCode() 返回調(diào)用對象的散列碼 int intValue() 返回調(diào)用對象值(整型) long longValue() 返回調(diào)用對象值(長整型) static short parseShort(String str) throws NumberFormatException 以10為基數(shù),返回包含在由str指定的字符串中的數(shù)字的等價短整型(Short)數(shù) static short parseShort(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回包含在由str指定的字符串中的數(shù)字的等價短整型(Short)數(shù) short shortValue() 返回調(diào)用對象值(短整型) String toString() 返回一個包含了調(diào)用對象的等價十進(jìn)制形式的字符串 static String to String(short num) 返回一個包含了num的等價十進(jìn)制形式的字符串 static Shortvalue Of(Stringstr)throws NumberFormatException 以10為基數(shù),返回一個包含了由str中的字符串指定的值的Short對象 static Short valueOf(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回一個包含了由str中的字符串指定的值的Short對象 表5 由Integer定義的方法 方法 描述 byte byteValue() 返回調(diào)用對象值(字節(jié)型) int compareTo(Integer i) 將調(diào)用對象的數(shù)值與i的數(shù)值進(jìn)行比較。如果這兩個值相等,則返回0。如果調(diào)用對象的數(shù)值小于i的數(shù)值,則返回負(fù)值。如果調(diào)用對象的數(shù)值大于i的數(shù)值,則返回正值(在Java 2中新增加的) int compareTo(Object obj) 如果obj屬于類Integer,其操作與compareTo(Integer)相同。否則,引發(fā)一個ClassCastException異常(在Java 2中新增加的) static Integer decode(String str) throws NumberFormatException 返回一個包含了由str中的字符串指定值的Integer對象 double doubleValue() 返回調(diào)用對象值(雙精度型) boolean equals(Object IntegerObj) 如果調(diào)用Interger對象與IntegerObj相等,則返回true。否則,返回false float floatValue()static Integer getInteger (String propertyName) 返回調(diào)用對象值(浮點型) 返回與由propertyname指定的環(huán)境屬性相關(guān)聯(lián)的值,調(diào)用失敗返回null static Integer getInteger (String propertyName,int default) 返回與由propertyname指定的環(huán)境屬性相關(guān)聯(lián)的值,調(diào)用失敗返回default值 static Integer getInteger (String propertyName,Integer default) 返回與由propertyname指定的環(huán)境屬性相關(guān)聯(lián)的值,調(diào)用失敗返回default值 int hashCode() 返回調(diào)用對象的散列碼 int intValue() 返回調(diào)用對象值(整型) long longValue() 返回調(diào)用對象值(長整型) static int parseInt(String str) throws NumberFormatException 以10為基數(shù),返回包含在由str指定的字符串中的數(shù)字的等價整數(shù)(integer)值 static int parseInt(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回包含在由str指定的字符串中的數(shù)字的等價整數(shù)值 short shortValue() 返回調(diào)用對象值(短整型) static String toBinaryString(int num) 返回一個包含了num的等價二進(jìn)制形式的字符串 static String toHexString(int num) 返回一個包含了num的等價十六進(jìn)制形式的字符串 static String toOctalString(int num) 返回一個包含了num的等價八進(jìn)制形式的字符串 String toString() 返回一個包含了調(diào)用對象的等價十進(jìn)制形式的字符串 static String toString(int num) 返回一個包含了num的等價十進(jìn)制形式的字符串 static String toString(int num,int radix) 以指定的基數(shù)(radix)為底,返回一個包含了num的等價十進(jìn)制形式的字符串 static Integer valueOf(String str) throws NumberFormatException 返回一個包含了由str中的字符串指定的值的Integer對象 static Integer valueOf(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回一個包含了由str中的字符串指定的值的Integer對象 表6 由Long定義的方法 方法 描述 byte byteValue() 返回調(diào)用對象值(字節(jié)型) int compareTo(Long l) 將調(diào)用對象的數(shù)值和l的數(shù)值進(jìn)行比較,如果這兩個值相等,則返回0。如果調(diào)用對象的數(shù)值小于l的數(shù)值,則返回負(fù)值。如果調(diào)用對象的數(shù)值大于l的數(shù)值,則返回正值(在Java 2中新增加的) int compareTo(Object obj) 如果obj屬于類long,其操作與compareTo(Long)相同。否則,引發(fā)一個ClassCastException異常(在Java 2中新增加的) static Long decode(String str) throws NumberFormatException 返回一個包含了由str中的字符串指定的值的Long對象 double doubleValue() 返回調(diào)用對象值(雙精度型) boolean equals(Object LongObj) 如果調(diào)用Long對象與LongObj相等,則返回true。否則,返回false float floatValue() 返回調(diào)用對象值(浮點型) static Long getLong(String propertyname) 返回與由propertyname指定的環(huán)境屬性相關(guān)聯(lián)的值,調(diào)用失敗則返回null static Long getLong(String propertyname, long default) 返回與由propertyname指定的環(huán)境屬性相關(guān)聯(lián)的值,調(diào)用失敗則返回default的值 static long getLong(String propertyname, Long default) 返回與由propertyname指定的環(huán)境屬性相關(guān)聯(lián)的值,調(diào)用失敗則返回default的值 int hashcode() 返回調(diào)用對象的散列碼 int intValue() 返回調(diào)用對象值(整型) long longValue() 返回調(diào)用對象值(長整型) static long parseLong(String str) throws NumberFormatException 以10為基數(shù),返回包含在由str指定的字符串中的數(shù)字的等價長整型(Long)數(shù) static long parseLong(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回包含在由str指定的字符串中的數(shù)字的等價長整型(Long)數(shù) short shortValue() 返回調(diào)用對象值(短整型) static String toBinaryString(long num) 返回一個包含了num的等價二進(jìn)制形式的字符串 static String toHexString(long num) 返回一個包含了num的等價十六進(jìn)制形式的字符串 static String toOctalString(long num) 返回一個包含了num的等價八進(jìn)制形式的字符串 String toString() 返回一個包含了調(diào)用對象的等價十進(jìn)制形式的字符串 static String toString(long num) 返回一個包含了num的等價十進(jìn)制形式的字符串 static String toString(long num,int radix) 以指定的基數(shù)(radix)為底,返回一個包含了num的等價十進(jìn)制形式的字符串 static Long valueOf(String str) throws NumberFormatException 返回一個包含了由str中的字符串指定的值的Long對象 static Long valueOf(String str,int radix) throws NumberFormatException 以指定的基數(shù)(radix)為底,返回一個包含了由str中的字符串指定的值的Long對象 定義下面的常數(shù): MIN_VALUE 最小值 MAX_VALUE 最大值 TYPE 字節(jié)(Byte),短整型(short),整型(int)或長整型(long)的類(Class)對象 數(shù)字和字符串的轉(zhuǎn)換 程序設(shè)計中一個最常見的任務(wù)是將一個數(shù)字的字符串表達(dá)式轉(zhuǎn)換成內(nèi)部的二進(jìn)制格式。幸運的是Java提供了一個方便的方法去完成這項任務(wù)。Byte,Short,Integer和Long類分別提供了parseByte( ),parseShort( ),parseInt( )和parseLong( )方法。這些方法返回與調(diào)用它們的數(shù)值字符串相應(yīng)的字節(jié)(byte),短整型(short),整型(int)和長整型(long)值(在Float和Double類中也有相似的方法)。 下面的程序說明了parseInt( )方法。該程序完成對用戶輸入的一系列整數(shù)的求和。在程序中通過使用readLine( )方法讀取整數(shù),使用parseInt( )方法將這些字符串轉(zhuǎn)換成與之相應(yīng)的整型(int)值。 /* This program sums a list of numbers entered by the user. It converts the string representation of each number into an int using parseInt(). */ import java.io.*; class ParseDemo { public static void main(String args[]) throws IOException { // create a BufferedReader using System.in BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; int i; int sum=0; System.out.println("Enter numbers, 0 to quit."); do { str = br.readLine(); try { i = Integer.parseInt(str); } catch(NumberFormatException e) { System.out.println("Invalid format"); i = 0; } sum += i; System.out.println("Current sum is: " + sum); } while(i != 0); } } 為了將一個整數(shù)轉(zhuǎn)換為一個十進(jìn)制的字符串,可以使用在Byte,Short,Integer或Long類中定義的toString( )方法。Integer和Long類還同時提供了toBinaryString( ),toHexString( )和toOctalString( )方法,可以分別將一個值轉(zhuǎn)換成二進(jìn)制,十六進(jìn)制和八進(jìn)制字符串。 下面的程序說明了向二進(jìn)制,十六進(jìn)制和八進(jìn)制的轉(zhuǎn)換: /* Convert an integer into binary, hexadecimal, and octal. */ class StringConversions { public static void main(String args[]) { int num = 19648; System.out.println(num + " in binary: " + Integer.toBinaryString(num)); System.out.println(num + " in octal: " + Integer.toOctalString(num)); System.out.println(num + " in hexadecimal: " + Integer.toHexString(num)); } } 程序的輸出結(jié)果如下所示: 19648 in binary: 100110011000000 19648 in octal: 46300 19648 in hexadecimal: 4cc0
字符(Character)是圍繞字符型(char)的一個簡單的包裝器。字符(Character)的構(gòu)造函數(shù)如下: Character(char ch) 這里ch指定了被創(chuàng)建的字符(Character)對象所包裝的字符。 調(diào)用如下的charValue( )方法可以獲得包含在字符(Character)對象中的字符型(char)值。 char charValue( ) 調(diào)用的結(jié)果返回字符。 字符(Character)類定義了幾個常數(shù),包括下面這些: MAX_RADIX 最大基數(shù) MIN_RADIX 最小基數(shù) MAX_VALUE 最大字符值 MIN_VALUE 最小字符值 TYPE 字符型(char)的類(Class)對象 字符(Character)包括了幾個靜態(tài)方法,這些方法完成將字符分類并改變它們的大小寫。這些方法在表7中列出。下面的例子說明了這些方法。 // Demonstrate several Is... methods. class IsDemo { public static void main(String args[]) { char a[] = {‘a(chǎn)‘, ‘b‘, ‘5‘, ‘?‘, ‘A‘, ‘ ‘}; for(int i=0; i<a.length; i++) { if(Character.isDigit(a[i])) System.out.println(a[i] + " is a digit."); if(Character.isLetter(a[i])) System.out.println(a[i] + " is a letter."); if(Character.isWhitespace(a[i])) System.out.println(a[i] + " is whitespace."); if(Character.isUpperCase(a[i])) System.out.println(a[i] + " is uppercase."); if(Character.isLowerCase(a[i])) System.out.println(a[i] + " is lowercase."); } } } 程序的輸出結(jié)果如下所示: a is a letter. a is lowercase. b is a letter. b is lowercase. 5 is a digit. A is a letter. A is uppercase. is whitespace. 表7 各種字符(Character)方法 方法 描述 static boolean isDefined(char ch) 如果ch是由Unicode定義的,則返回true,否則,返回false static boolean isDigit(char ch) 如果ch是一個數(shù)字,則返回true,否則,返回false static boolean isIdentifierIgnorable(char ch) 如果在一個標(biāo)識符中ch應(yīng)被忽略,則返回true,否則,返回false static boolean isISOControl(char ch) 如果ch是一個ISO控制字符,則返回true,否則,返回false static boolean isJavaIdentifierPart(char ch) 如果ch被做為Java標(biāo)識符的一部分(除了第一個字符),則返回true。否則,返回false static boolean isJavaIdentifierStart(char ch) 如果ch被做為Java標(biāo)識符的首字符,則返回true。否則返回false static boolean isLetter(char ch) 如果ch是一個字母,則返回true。否則返回false static boolean isLetterOrDigit(char ch) 如果ch是一個字母或一個數(shù)字,則返回true。否則返回false static boolean isLowerCase(char ch) 當(dāng)ch是小寫字母時,返回true。否則返回false static boolean isSpaceChar(char ch) 如果ch是Unicode編碼的空格字符,則返回true。否則返回false static boolean isTitleCase(char ch) 如果ch是Unicode編碼的標(biāo)題字符,則返回true。否則返回false static boolean isUnicodeIdentifierPart (char ch) 如果ch被做為Unicode編碼標(biāo)識符的一部分(除了第一個字符),則返回true。否則,返回false static boolean isUnicodeIdentifierStart (char ch) 如果ch被做為一個Unicode標(biāo)識符的首字符,則返回true。否則返回false static boolean isUpperCase(char ch) 如果ch是一個大寫字母,則返回true。否則返回false static boolean isWhitespace(char ch) 如果ch是一個空白符,則返回true。否則,返回false static char toLowerCase(char ch) 返回ch的小寫等價形式 static char toTitleCase(char ch) 返回ch的標(biāo)題等價形式 static char toUpperCase(char ch) 返回ch的大寫等價形式 字符(Character)定義了如下形式的forDigit( )和digit( )方法: static char forDigit(int num, int radix) static int digit(char digit, int radix) forDigit( )方法返回與num的值關(guān)聯(lián)的數(shù)字字符。而轉(zhuǎn)換的基數(shù)由radix指定。digit( )方法按照給定的基數(shù),返回與指定字符(該字符可能是一個數(shù)字)相關(guān)聯(lián)的整數(shù)值。 由Character類定義的另一個方法是compareTo( ),該方法具有如下的兩種形式: int compareTo(Character c) int compareTo(Object obj) 第一種形式當(dāng)調(diào)用對象與c具有相同值時返回0。當(dāng)調(diào)用對象具有比c小的值時返回一個負(fù)值。否則它將返回一個正值。在第二種形式中,當(dāng)obj是對Character類的一個引用時,其功能與第一種形式一樣。否則它將引發(fā)一個ClassCastException異常。這些方法是在Java 2中新增加的。 Character類還定義了equals( )和hashCode( )方法。 另兩個與字符有關(guān)的類是Character.Subset和Character.UnicodeBlock,其中Character.Subset類用于描述Unicode編碼的一個子集,而Character.UnicodeBlock類中包含了Unicode 2.0編碼的字符塊。
Boolean是一個圍繞布爾(boolean)值的非常細(xì)小的包裝器,主要用在通過引用傳遞布爾(boolean)變量的場合。它包含了常數(shù)TRUE和FALSE,這些常數(shù)定義了布爾(Boolean)對象的真與假。Boolean也定義了TYPE域,它是boolean的Class對象。在Boolean中定義了如下的構(gòu)造函數(shù): Boolean(boolean boolValue) Boolean(String boolString) 在第一種形式中,boolValue要么是true,要么是false。在第二種形式中,如果在boolString中包含了字符串“true”(無論是大寫形式還是小寫形式),則新的布爾(Boolean)對象將為真,否則為假。 Boolean定義了如表14-8中列出的方法。 表8 由Boolean定義的方法 方法 描述 boolean booleanValue( ) 返回布爾(boolean)等價形式 boolean equals(Object boolObj) 如果調(diào)用對象與boolObj相等,則返回true。否則返回false static boolean getBoolean(String propertyName) 如果由propertyName指定的系統(tǒng)屬性為true,則返回true。否則返回false int hashCode( ) 返回調(diào)用對象的散列碼 String toString( ) 返回調(diào)用對象的字符串等價形式 static Boolean valueOf(String boolString) 如果在boolString中包含了“true”(以大寫或小寫形式),則返回true。否則返回false
Void類有一個TYPE域,該域保存對類型void的Class對象的引用。這樣做將不創(chuàng)建類的實例。
抽象類Process封裝了一個進(jìn)程(process)--也就是說一個正在執(zhí)行的程序。它主要被當(dāng)作由Runtime類中的exec( )方法所創(chuàng)建的對象的類型的超類。Runtime類將在下面介紹。在抽象類Process中,包含了如下表14-9中列出的抽象方法。 表9 由Process定義的抽象方法 方法 描述 void destroy( ) 中斷進(jìn)程 int exitValue( ) 返回一個從子進(jìn)程獲得的退出碼 InputStream getErrorStream( ) 返回一個從進(jìn)程的err輸出流中讀輸入的輸入流 InputStream getInputStream( ) 返回一個從進(jìn)程的out輸出流中讀輸入的輸入流 OutputStream getOutputStream( ) 返回一個從進(jìn)程的in輸入流中寫輸出的輸出流 Int waitFor( ) throws InterruptedException 返回由進(jìn)程返回的退出碼。這個方法直到調(diào)用它的進(jìn)程中止,才會返回
Runtime類封裝了運行時環(huán)境。一般不實例化一個Runtime對象。但是可以通過調(diào)用靜態(tài)方法Runtime.getRuntime( )而獲得對當(dāng)前Runtime對象的引用。一旦獲得了對當(dāng)前對象的引用,就可以調(diào)用幾個控制Java虛擬機的狀態(tài)和行為的方法。小應(yīng)用程序(Applets)和其他不可信賴的編碼由于沒有引起一個安全異常(SecurityException)而不能調(diào)用任何的Runtime方法。 表10給出了由Runtime定義的方法。Java 2中不贊成使用方法runFinalizersonExit( )。這種方法是在Java 1.1中增加的,但被認(rèn)為是一種不穩(wěn)定的方法。 表10 由Runtime定義的常用方法 方法 描述 void addShutdownHook(Thread thrd) 當(dāng)Java虛擬機終止時,寄存器thrd作為線程而運行 Process exec(String progName) throws IOException 將由progName指定的程序作為獨立的進(jìn)程來執(zhí)行。返回描述新進(jìn)程的類型Process的對象 Process exec(String progName, String environment[ ]) throws IOException 將由progName指定的程序作為獨立的進(jìn)程來執(zhí)行。該獨立進(jìn)程的環(huán)境由environment指定。返回描述新進(jìn)程的類型Process的對象 Process exec(String comLineArray[ ], String environment[ ]) throws IOException 將由comLineArray中的字符串指定的命令行作為獨立的進(jìn)程來執(zhí)行。運行環(huán)境由environment指定。返回描述新進(jìn)程的類型Process的對象 void exit(int exitCode) 暫停執(zhí)行并且向父進(jìn)程返回exitCode的值,按照約定,0表示正常中止,所有的其他值表示有某種形式的錯誤 long freeMemory( ) 返回Java運行系統(tǒng)可以利用的空閑內(nèi)存的大概字節(jié)數(shù) void gc( ) 初始化垃圾回收站 static Runtime getRuntime( ) 返回當(dāng)前的Runtime對象 void halt(int code) 立即終止Java虛擬機,不執(zhí)行任何的終止線程和善后處理程序。code的值返回給調(diào)用進(jìn)程(在Java 2的1.3版中新增加的) void load(String libraryFileName) 載入庫中文件由libraryFileName指定的動態(tài)庫,必須指定它的完全路徑 void loadLibrary(String libraryName) 載入庫名為libraryName的動態(tài)庫 boolean removeShutdownHook(Thread thrd) 當(dāng)Java虛擬機中止,從線程列表中移出thrd的運行。如果成功,也就是說如果線程被移出,則返回true(在Java 2的1.3版中新增加的) void runFinalization( ) 調(diào)用未用的但還不是回收站中對象的finalize()方法 long totalMemory( ) 返回程序可以利用的內(nèi)存的總字節(jié)數(shù) void traceInstructions(boolean traceOn) 根據(jù)traceOn的值,打開或關(guān)閉指令跟蹤。如果traceOn值為true,跟蹤被顯示。如果traceOn值為false,跟蹤被關(guān)閉 void traceMethodCalls(boolean traceOn) 根據(jù)traceOn的值,打開或關(guān)閉調(diào)用跟蹤的方法。如果traceOn的值為true,跟蹤被顯示。如果traceOn的值為false,跟蹤被關(guān)閉 讓我們來看一看Runtime類的兩個最普遍的用法:內(nèi)存管理和執(zhí)行附加進(jìn)程。
盡管Java提供了自動垃圾回收,有時也想知道對象堆的大小以及它還剩下多少??梢岳眠@些信息檢驗?zāi)愕拇a的效率,或估計對某些類型,有多少對象可以被實例化。為了獲得這些值,可以使用totalMemory( )和freeMemory( )方法。 正如我們在第1部分提及的,Java的垃圾回收器周期性地運行將不再使用的對象放入回收站。然而有時想在收集器的下一個指定循環(huán)之前收集被丟棄的對象。可以通過調(diào)用gc( )方法按照要求運行垃圾回收器。一個好的嘗試是調(diào)用gc( )方法,然后再調(diào)用freeMemory( )方法以獲得內(nèi)存使用的底線。接著執(zhí)行你的程序,并再一次調(diào)用freeMemory( )方法看分配了多少內(nèi)存。下面的例子說明了這個思想。 // Demonstrate totalMemory(), freeMemory() and gc(). 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 memory: " + mem1); r.gc(); mem1 = r.freeMemory(); System.out.println("Free memory after garbage collection: " + mem1); for(int i=0; i<1000; i++) someints[i] = new Integer(i); // allocate integers mem2 = r.freeMemory(); System.out.println("Free memory after allocation: " + mem2); System.out.println("Memory used by allocation: " + (mem1-mem2)); // discard Integers 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); } } 這個例子的一個輸出樣本如下(當(dāng)然,你的實際運行結(jié)果可能會與之不同): Total memory is: 1048568 Initial free memory: 751392 Free memory after garbage collection: 841424 Free memory after allocation: 824000 Memory used by allocation: 17424 Free memory after collecting discarded Integers: 842640
抽象類ClassLoader規(guī)定了類是如何加載的。應(yīng)用程序可以創(chuàng)建擴(kuò)展ClassLoader的子類,實現(xiàn)它的方法。這樣做允許使用不同于通常由Java運行時系統(tǒng)加載的另一些方法來加載類。由ClassLoader定義的一些方法列在表14-14中。
Math定義了下面的指數(shù)方法:
Math類定義了幾個提供不同類型舍入運算的方法。這些方法列在表15中。
Runnable接口必須由啟動執(zhí)行的獨立線程的類所實現(xiàn)。Runnable僅定義了一種抽象方法,叫做run( )。該方法是線程的入口點。它的形式如下所示:
在Java 2的java.lang中增加了兩個與線程有關(guān)的類:
在Java 2的java.lang中也新增加了RuntimePermission。它與Java的安全機制有關(guān),這里不做進(jìn)一步的討論。
在前面學(xué)到過,在Java中,垃圾回收工具自動確定何時對一個對象,沒有引用存在。然后這個對象就被認(rèn)為是不再需要的,同時它所占的內(nèi)存也被釋放。在Java 2中新增加的java.lang.ref包中的類對垃圾回收處理提供更加靈活的控制。例如,假設(shè)你的程序創(chuàng)建了大量的在后面某個時間又想重新使用的對象,可以持續(xù)保持對這些對象的引用,但是這可能需要更多的內(nèi)存開銷。
|
|