Java部分基礎知識(1)
Java中的預設值:
基本資料型別:char預設型別: ’\u0000’
boolean預設型別:false
其他預設值 0
引用資料型別:null,用的會引起空指標異常
Static 靜態修飾詞:
修飾方法:修飾的方法得用類名訪問。
靜態方法只能訪問靜態變數,,靜態方法沒有this指標 //類名.靜態方法
修飾變數:靜態成員變數在方法區(堆裡)裡存在,無論多少物件,只有一份(歸類所有) // 類名.count
非靜態成員變數:位於“堆”,每new一個物件建立一個,因此有多少物件該變數就有多少份。
補充:
JVM:區域性變數儲存在棧中,靜態變數儲存在方法區。區域性變量出了方法被回收,而靜態變數不會,所以區域性變數前不加static。
final修飾關鍵字:
修飾變數:必須初始化,且不能改變
修飾方法:不能被重寫
修飾類: 不能被繼承
Java記憶體分配之棧、堆、常量池:
Java記憶體分配主要包括以下幾個區域:
暫存器:我們在程式中無法控制
棧:存放基本型別的資料和物件的引用,但物件本身不存放在棧中,而是存放在堆中
.堆:存放用new產生的資料
靜態域:存放在物件中用static定義的靜態成員
常量池:存放常量
非RAM(隨機存取儲存器)儲存:硬碟等永久儲存空間
Java棧:基本資料型別的變數和引用變數
Java堆:堆記憶體用來存放由new建立的物件和陣列。 在堆中分配的記憶體,在陣列和物件沒有變數指向的時候,才由Java虛擬機器的自動垃圾回收器來管理。
常量池 (constant pool)、棧和堆的區別:
棧,堆和常量池,對於棧和常量池中的物件可以共享,對於堆中的物件不可以共享。棧中的資料大小和生命週期是可以確定的,當沒有引用指向資料時,這個資料就會消失。堆中的物件的由垃圾回收器負責回收,因此大小和生命週期不需要確定,具有很大的靈活性。
訪問許可權:
同包子類 同包非子類 不同包子類 不同包非子類
public ∨ ∨ ∨ ∨
protect ∨ ∨ ∨ ×
private × × × ×
在前面都不加時,預設包訪問許可權 (src包) ,就算繼承也不行
建立字串兩種方法及比較:
String str1="Hello World";//第一種方法
String str2=new String("Hello World");//第二種方法
1、string直接賦值:
String s = "haha";
s的引用存在java棧中,引用指向的“haha”存在方法區的常量池中(先判斷常量池中是否有一個“haha”,存在則直接指向)
2、string物件new建立
String s = new String("haha");
s的引用存在於Iava棧中,引用指向的haha物件,存在Java堆記憶體中(每new一次,在堆中建立一個新的haha物件)
String str = "Hello "; //此時str被初始化為“Hello”
str += "World!"; //此時str已經變成了“HelloWorld”
把str引用指向到"HelloWorld"字串的記憶體存放地址,但其實在記憶體空間中,"Hello"這個字串還存在,只是str不指向它了,而指向了"HelloWorld"這個新的字串。
在前面都不加時,預設包訪問許可權 (src包) ,就算繼承也不行。
在前面都不加時,預設包訪問許可權 (src包) ,就算繼承也不行。