夜光:Java成神之路(五)擅長的語言

夜光序言:

 

僞裝的人 都認爲每個人都在僞裝

 

 

 

 
 
正文:
 
                                              以道御術 / 以術識道



 

2. Java8 方法概覽

 

java.time 包下的方法概覽


 

 

六、Java 的數據類型

 

1. Java 的基本數據類型都有哪些各佔幾個字節

如下表所示:

 


 

2. String 是基本數據類型嗎?

 

String 是引用類型,底層用 char 數組實現的。

 


 

3. short s1 = 1; s1 = s1 + 1; 有錯嗎?short s1 = 1; s1 += 1 有錯嗎;

 

前者不正確,後者正確。

 
對於 short s1 = 1; s1 = s1 + 1;由於 1 是 int 類型
 
 
因此 s1+1 運算結果也是 int 型,需要強制轉換類型才能賦值給 short 型。而 short s1 = 1; s1 += 1;
 
 
可以正確編譯,因爲 s1+= 1;相當於 s1 = (short)(s1 + 1);其中有隱含的強制類型轉換。

 


 

4. int 和 和 Integer 有什麼區別?

 

Java 是一個近乎純潔的面向對象編程語言,但是爲了編程的方便還是引入了基本數據類型,爲了能夠將這些基本數據類型當成對象操作,Java 爲每一個基本數據類型都引入了對應的包裝類型(wrapper class)
 
 
int 的包裝類就是 Integer,從 Java 5 開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。
Java 爲每個原始類型提供了包裝類型:
 
- 原始類型: boolean,char,byte,short,int,long,float,double
 
- 包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

 

 


 

5. 下面 Integer 類型的數值比較輸出的結果爲?

如果不明就裏很容易認爲兩個輸出要麼都是 true 要麼都是 false。
 
首先需要注意的是 f1、f2、f3、f4 四個變量都是 Integer 對象引用,所以下面的==運算比較的不是值而是引用。
 
 
裝箱的本質是什麼呢?
 
當我們給一個 Integer 對象賦一個 int 值的時候,會調用 Integer 類的靜態方法 valueOf,如果看看 valueOf 的源代碼就知道發生了什麼。
 

 

源碼:

簡單的說,如果整型字面量的值在-128 到 127 之間,那麼不會 new 新的 Integer 對象,而是直接引用常量池中的 Integer 對象,
 

 

所以上面的試題中 f1==f2 的結果是 true,而 f3==f4 的結果是 false。

 


 

 

7. String、StringBuffer、StringBuilder 的區別?

 

(1)、可變不可變

 
String:字符串常量,在修改時不會改變自身;若修改,等於重新生成新的字符串對象。
 
StringBuffer:在修改時會改變對象自身,每次操作都是對 StringBuffer 對象本身進行修改,不是生成新的對象;使用場景:對字符串經常改變情況下,主要方法:append(),insert()等。
 

(2)、線程是否安全

 
String:對象定義後不可變,線程安全。
 
StringBuffer:是線程安全的(對調用方法加入同步鎖),執行效率較慢,適用於多線程下操作字符串緩衝區大量數據。
 
StringBuilder:是線程不安全的,適用於單線程下操作字符串緩衝區大量數據。

 

(3)、共同點

 
StringBuilder 與 StringBuffer 有公共父類 AbstractStringBuilder(抽象類)。
 
 
StringBuilder、StringBuffer 的方法都會調用 AbstractStringBuilder 中的公共方法,如 super.append(...)。
 
只是 StringBuffer 會在方法上加 synchronized 關鍵字,進行同步。
 
 
最後,如果程序不是多線程的,那麼使用 StringBuilder 效率高於 StringBuffer。

 


 

8. 數據類型之間的轉換

 

(1)、字符串如何轉基本數據類型?
 
調用基本數據類型對應的包裝類中的方法 parseXXX(String)或 valueOf(String)即可返回相應基本類型。
 
(2)、基本數據類型如何轉字符串?
 
一種方法是將基本數據類型與空字符串(“”)連接(+)即可獲得其所對應的字符串;另一種方法是調用 String 類中的 valueOf()方法返回相應字符串。

 


 

七、Java 的 IO

 

1. Java 中有幾種類型的流

按照流的方向:輸入流(inputStream)和輸出流(outputStream)。

 
按照實現功能分:節點流(可以從或向一個特定的地方(節點)讀寫數據。如 FileReader)和處理流(是對一個已存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀寫。
 
 
如 BufferedReader。處理流的構造方法總是要帶一個其他的流對象做參數。一個流對象經過其他流的多次包裝,稱爲流的鏈接。)
 
 
按照處理數據的單位:字節流和字符流。
 
 
字節流繼承於 InputStream 和 OutputStream,字符流繼承於InputStreamReader 和 OutputStreamWriter。
 

 


 

2. 字節流如何轉爲字符流

 

字節輸入流轉字符輸入流通過 InputStreamReader 實現,該類的構造函數可以傳入 InputStream 對象。
 
 
字節輸出流轉字符輸出流通過 OutputStreamWriter 實現,該類的構造函數可以傳入 OutputStream 對象。

 


 

3. 如何將一個 java 對象序列化到文件裏

 

在 java 中能夠被序列化的類必須先實現 Serializable 接口,該接口沒有任何抽象方法只是起到一個標記作用。

 

1. //對象輸出流
2. ObjectOutputStream objectOutputStream = 
3. new ObjectOutputStream(new FileOutputStream(new File("D://obj")));
4. objectOutputStream.writeObject(new User("zhangsan", 100));
5. objectOutputStream.close();
6. //對象輸入流
7. ObjectInputStream objectInputStream = 
8. new ObjectInputStream(new FileInputStream(new File("D://obj")));
9. User user = (User)objectInputStream.readObject();
10. System.out.println(user);
11. objectInputStream.close();

 

 

 

 

 

 

 

 

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