標籤:防止 system 最大的 參考型別 order 16進位 不能 原因 封裝
1: java 單根繼承的優點?
方便記憶體回收: 記憶體回收的設計會方便實現。
多重繼承的函數重名的問題。
2: 向下轉型和向上轉型?
向下轉型不安全,向上轉型安全。
3: system.gc() ?
只是提醒JVM做垃圾處理。不保證一定做。
4:ArrayList VS LinkedList?
5: java 基本類型大小? 對應的封裝類用處?
boolean(沒有明確指定) char(2) byte(1) short(2) int(4) long(8) float(4) double(8) : 每個基本類型都有對應的封裝類。
封裝類用處:
作為和基礎資料型別 (Elementary Data Type)對應的類類型存在,方便涉及到對象的操作;
包含每種基礎資料型別 (Elementary Data Type)的相關屬性如最大值、最小值等,以及相關的操作方法;
|
基礎資料型別 (Elementary Data Type) |
封裝類 |
|
byte |
Byte |
|
boolean |
Boolean |
|
short |
Short |
|
char |
Character |
|
int |
Integer |
|
long |
Long |
|
float |
Float |
|
double |
Double |
6: JAVA堆和棧?
一:在方法中聲明的變數,即該變數是局部變數,每當程式調用方法時,系統都會為該方法建立一個方法棧,其所在方法中聲明的變數就放在方法棧中,當方法結束系統會釋放方法棧,其對應在該方法中聲明的變數隨著棧的銷毀而結束,這就局部變數只能在方法中有效原因
在方法中聲明的變數可以是基本類型的變數,也可以是參考型別的變數。
(1)當聲明是基本類型的變數的時,其變數名及值(變數名及值是兩個概念)是放在JAVA虛擬機器棧中
(2)當聲明的是引用變數時,所聲明的變數(該變數實際上是在方法中儲存的是記憶體位址值)是放在JAVA虛擬機器的棧中,該變數所指向的對象是放在堆類存中的。
二:在類中聲明的變數是成員變數,也叫全域變數,放在堆中的(因為全域變數不會隨著某個方法執行結束而銷毀)。
同樣在類中聲明的變數即可是基本類型的變數 也可是參考型別的變數
(1)當聲明的是基本類型的變數其變數名及其值放在堆記憶體中的
(2)參考型別時,其聲明的變數仍然會儲存一個記憶體位址值,該記憶體位址值指向所引用的對象。引用變數名和對應的對象仍然儲存在相應的堆中
7: 將字串“12”轉成16進位數?
int a = Integer.parseInt("12", 16) ;
8: 整數轉String?
String a1 = Integer.toString(5); // 其他類型都可以轉String
String a2 = String.valueOf(5); // String本身也有函數可以把其他類型轉string
9:在精度要求高的計算中用浮點數?
浮點數值不適合用于禁止出現舍入誤差的金融計算中。例如System.out.println( 2.0 - 1.1);將列印0.899999999999999,而不是0.9。因為浮點數值採用二進位系統資料表示,而二進位無法精確表示分數1/10,就像十進位無法精確表示1/3一樣。如果需要在數值計算中不含有舍入誤差,就應該使用BigDecimal類和BigInteger。
BigDecimal類: 支援任何精度的定點數。
BigInteger類:支援任何精度的整數。
10: 當float, double轉int時,都是截尾操作,如果想四捨五入,用java.lang.Math.round(5.8)方法
int a3 = (int) java.lang.Math.round(5.8); // 6
11:資料提升:
如果對基礎資料型別 (Elementary Data Type)執行算術運算貨按位元運算,只要類型比INT 小(char,byte,short),在運算前,會自動轉成int.。如果想把結果轉成較小類型,必須使用類型轉換。通常運算中最大的類型決定了結果的類型。
12:switch的類型?
int , char, enum, String
13: 類的驚天資料成員的初始化?
靜態成員只被初始化一次; 當首次產生這個類的執行個體或首次訪問類的靜態成員時;先初始化靜態,然後是非靜態
14: 子類如何調用父類建構函式?
super(x)
15: @override註解的作用?
想在子類中覆寫某個函數,添加這個註解,在不小心重載的時候,編譯器會提示錯誤。
16:final用法?
當修飾引用時,表示永遠指向這個引用,但是指向的對象可以變化。
final List<String > list = new ArrayList<String>(); list.add("afa"); // 正確 list = new LinkedList<String>(); // 錯誤
final Person p1 = new Person(a2, a);
p1.setAge(5); // 正確
final String s= "fsdf";
s = "fsdfsdfsdfdsf"; // 錯誤, 因為String是不可變對象,重新賦值導致new了新對象,與final衝突。
final 可以是空白的,在建構函式的時候進行初始化。
當修飾函數參數的時候,無法更改參數引用指向的對象(可以改變對象的值,但是不能重新指向其他的對象)。
final方法:防止繼承。
類中所有的private 方法都隱式的指定為final。
final類:不能有子類(不能被繼承)
17:抽象類別特性?
抽象類別可以沒有抽象方法; 抽象方法沒有函數體,子類必須實現,如果不實現,子類也是抽象類別; 抽象類別不能執行個體化;
18: 介面中屬性?
介面中如果定義屬性是static final的,所以一般不定義屬性;
19: 介面中的方法是public的,預設是public的; 實現介面的類的函數是public的。
20: 抽象列和介面都是為了實現多態,向上轉型,解耦合。
JAVA 編程思想二