1. 程式人生 > >Java部分基礎知識(1)

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包) ,就算繼承也不行。