java基礎知識(一)

1、雜貨

一、邏輯運算符的區別與做用面試

邏輯運算符算法

做用數組

&安全

與做用,左右兩邊兩個判斷結果都爲true就是true,不然是falsedom

|ide

或左右,左右兩邊兩個判斷結果只要有一邊爲true,結果就是true,不然就是false工具

^學習

異或,你爲true我就是false測試

&&ui

左右兩邊,左邊若是爲false,右邊不執行,直接返回結果false

||

同理:左邊若是爲true,右邊不執行直接返回true

二、判斷過程當中:出現了問題,當前的問題就是咱們在判斷中內容輸入的都是正確的,結果仍是爲false

         分析:由於咱們原來使用==判斷是判斷的基本數據類型。若是換成引用數據類型了,咱們在方法中引用的實際上是對象的地址值。若是使用的是==判斷對象的話,那麼判斷的就是對象的地址值。

 

         解決辦法:在Java中 ,判斷基本數據類型的值,使用的是==。可是判斷對象的值使用的就是equals,將具體的值放入小括號中,經過hashCode生成進行判斷。

三、位移總結:

         左位移:會將正數移動成負數。一位數據二進制是從右往左位移,會觸碰二進制的符號位。

    右位移:不會再符號位補數據,負數仍是1,正數仍是0。因此咱們操做右位移的時候,數據正負不會變。

    無符號右位移:能夠將負數移動成正數,可是正數不會移動成負數,由於右位移,補的是0,不會補1。

   4.基本數據類型

①、可否拼接?

                   不能作拼接,基本數據類型,進行拼接,就至關因而加法運算,將內容進行編號相加。

 

 

         ②、後期咱們還會學習引用數據類型

                   一、如何區分引用數據類型和基本數據類型:基本數據類型,是定義類型的工做,沒有對應的方法也沒有對應的操做,只能定義類型和賦值存儲類型。

                   二、當前基本數據類型格式是全小寫命名,引用數據類型是首字母大寫,其他小寫命名格式。

 

         ③、運算過程當中咱們會設計到類型轉換。

                   高類型轉換成低類型:強制類型轉換,若是不使用強制類型轉換,Java默認是不讓你轉換的。

                   低類型轉換成高類型:自動類型轉換。Java默認就採起的是自動類型轉換。

                   爲何字符類型在相加的時候,使用的是數字。由於字符默認大小沒有int高,在加法操做的時候,默認就轉換成了int類型。

         注意:若是是強制類型轉換,就會損失精度,和你想要的數據,相差比較大。這也是爲何Java默認不使用強制類型轉換的緣由,由於損失精度,影響結果。

 

五、字符類型

數據類型

字節數

二進制位數

byte

1

8

short

2

16

int

4

32

long

8

64

float

4

32

double

8

64

char

2

16

boolean

1

1

boolean類型的值只有true和false兩種邏輯值,在編譯後會使用1和0來表示,這兩個數在內存中按位算,僅需1位(bit)便可存儲,位是計算機最小的存儲單位。

六、簡單運算:+ - * \

         你們在操做的時候,須要注意一個小細節,容器不一樣的狀況下,整數類型,會默認自動轉換成int類型。

七、若是當前的屬性,沒有賦值,請問是什麼值?

                   String類型默認值是:null

                   Int類型默認值是:0

 

2、Java關鍵字

一、引用數據類型,String類:字符串類型,咱們若是設置的是字符串,也就是帶有雙引號(全部的數據都要」」)的內容,就須要用到容器:String

二、  隨機數對象:Random(使用時須要導包)

三、當前Scanner輸入對象,對輸入的信息很是嚴格

整數類型:只能輸入整數,輸入其餘的數據就會報錯。

小數類型:能夠輸入整數,也能夠輸入小數。

字符串類型:輸入啥均可以拿到,能夠輸入數字,能夠輸入小數,也能夠輸入字母。

    四、建立出當前的對象,建立對象,咱們須要提供一個關鍵字:new

操做對象咱們須要注意:對象類型首字母必須大寫,格式問題。

                   格式:對象類型 容器名稱 = new 對象類型();

五、提示補全:CTRL+1(數字)

六、封裝四個關鍵字使用的範圍

位置

private

默認的

protected

public

同一個類

同一個包內的類

不一樣包內的子類

不一樣包而且不是子類

         注意:當前屬性若是須要徹底給別人使用,咱們就須要設置公共的:public

         注意:當前屬性若是隻能本身完成,別人不能使用,咱們就須要設置私有的:private

 

         注意:private 使用:方法:get方法與set方法,能夠被別人使用。

 

七、在子類對象中,經過關鍵字:extends,定義繼承關係

 

3、快捷鍵

    一、查看源碼的方法:

         按着鍵盤中的:ctrl按鍵不動,點擊對象的引用名稱,也就是首字母大寫的那個對象左鍵。進入後對象文件名爲xxx.class就是源碼。

二、快速查詢方法:ctrl + o

三、刪除整行:CTRL+D

四、設置自動補全:WindowàPerferencesàJavaàEditoràContent Assist

 

不要刪除小點,直接添加:qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM

五、快捷鍵生成:alt + shift + s(快速生成get,set方法,構造方法)

                   若是不會用快捷鍵:source中也能夠找到,在左上角菜單中。

快捷鍵生成有參與空參:alt + shift + s

 

 

 

4、異常

 

一、by zero(零不能作除數)

二、索引角標越界異常(通常出如今數組中)

三、空指針異常(通常非法使用NULL)

5、方法和幫助工具類

一、length:動態獲取數組長度,長度從1開始計數。

二、數組幫助工具類:Arrays,是在當前的util包中,只要看見了util包,咱們就能夠判斷當前是一個工具類。

         例如:數組排序

    arrays.sort();

6、算法

一、冒泡排序算法

        //冒泡排序

for(int i = 0; i < arr01.length; i++) {
for(int j = 0; j < arr01.length - i - 1; j++) {
if(arr01[j] > arr01[j + 1]) {
temp = arr01[j];
arr01[j] = arr01[j + 1];
arr01[j + 1] = temp;
}
}
二、選擇排序算法

//選擇排序
for(int i = 0; i < arr01.length; i++) {
for(int j = i + 1; j < arr01.length; j++) {
if(arr01[i] > arr01[j]) {
temp = arr01[i];
arr01[i] = arr01[j];
arr01[j] = temp;
}
}
}

       

 

7、數組

一、數組可否存儲多種類型在數組中:數組在Java中是能夠存儲不一樣類型的數據的,可是得須要建立數組的時候,將建立的類型,變成對象類型。而當前對象的類型必須是:Object

二、什麼是Object:當前Object是Java中的全部對象的爹!不論是String仍是後期的其餘引用數據類型,都是經過它來創造的,因此當前要想在數組中存儲不一樣類型的值,咱們就須要使用Object

三、具體使用

 

 

一、  後期在面試中若是被問道了

一、  數組是不容許存儲不一樣類型的元素的,必須得嚴格按照建立數組中類型的具體定義來 添加內容。

二、  若是當前真的須要存儲不一樣類型的數據在數組中,咱們其實能夠經過Object定義存儲。

三、  說白了,在Java中,部分的解釋不是絕對的。經過數組咱們獲得了啓發,能夠經過萬能對象的建立進行存儲。

五、數組建立後不能修改長度,也就意味着建立後不能增長新的容器長度,也不能刪除容器長度。

         數組建立後,不能增長也不能刪除。

六、若是須要去重,咱們須要建立新的數組進行存儲。

8、面向對象

      一、面向對象最基本的操做:

一、  如何建立對象:經過class對象,建立類名

二、如何設置屬性以及屬性的做用:屬性是對象內的參數,咱們能夠動態設置參數變量。

三、如何設置對象中的方法:對象中的方法,就是給別人調用使用的。方法有返回值和方法沒有返回值的區別。經過關鍵字,void和其餘的返回類型定義。

四、方法中小括號的做用:小括號的做用就是參數的傳遞,咱們方法中小括號內的參數通常命名爲:形參。形參中,能夠定義多個參數,參數與參數間使用逗號相隔。

      二、封裝其實就是對對象進行封裝工做

                   一、封裝屬性:對屬性的訪問權限進行了封裝,私有的只能本身用,公共的誰均可以用。

 

                   二、封裝方法:普通方法也可使用關鍵字進行封裝,效果同樣,私有的方法別人不能用。

 

                   三、對私有的屬性,能夠封裝一套獲取方法和設置方法,分別是set和get

                            Set別人設置我當前的私有屬性的數據。

                            Get別人獲取使用我當前的私有屬性的數據。

 

                   四、對建立對象的時候進行封裝:構造方法

                            建立對象的過程當中,我須要建立出來的對象是空對象,那麼就用空參構造方法。

                            建立對象的過程當中,我須要建立出來的對象是帶有數據的對象,不是一個空對象,那麼咱們就使用有參構造方法來建立。

 

                            若是對象中不寫構造方法,默認就有空參,若是寫了那麼就使用寫了的,若是隻寫有參不寫空參,那麼就沒法使用空參建立對象。默認的空參在你寫了有參的時候就會消失,須要手動在再寫空參才能正常使用。

 

                   五、構造方法和普通方法同樣,能夠方法名相同,可是參數數據類型與數量不能相同,必須在同一個對象中,咱們稱之爲是方法的重載。

                            重載:方法名必須相同,參數類型不一樣。

                            重載:能夠修改方法的訪問修飾符,能夠修改返回類型,無返回仍是有返回。

      三、輸出對象名稱顯示地址

         一、當前咱們輸出對象的名稱,顯示的是地址值,出現的緣由在於當前咱們打印出了對象的HashCode值

 

 

         二、解決辦法如何完成:咱們須要在對應的對象內,設置輸出格式才能解決,須要經過方法:toString完成(進入Student對象中,設置toString方法)

 

 

 

二、  toString方法,咱們依然能夠經過快捷鍵生成:alt + shift + s

 

 

三、繼承

一、重寫

一、方法的重寫,就是對父類的方法進行升級,若是子類和父類都有相同方法的時候,默認就會調用子類的重寫方法。

 

         重寫方法,爲何上面要有一個:@Override:實際上是註解,幫助咱們檢測當前的方法,是不是重寫方法,若是不是,那麼就報錯。

Override註解的功能:說白了,就是幫助咱們檢查方法是不是重寫方法,若是不是就報錯,其實咱們也能夠刪除當前的註解,刪除後就沒有檢查功能了。

 

方法的重寫,須要注意事項:

                   一、方法名必須相同。

                   二、必須是繼承或者實現關係。

                   三、重寫方法傳遞的形參必須與父類的方法保持一致,不能設置其餘形參。

                  

 

                   四、重寫的方法,訪問權限封裝關鍵字:子類的訪問權限能夠修改,可是權限的大小必定要比父類大。不能比父類小。

                   父類是:受保護的,子類可使用:受保護的和公共的。不能使用默認的,和私有的。

                   五、父類和子類重寫方法的返回值,要保持一致。

 

         二、繼承:在Java中是單繼承。能夠多重繼承,父類能夠有多個兒子,可是兒子只能有1個爹。

二、面向對象:繼承,使用構造方法

         一、有一種狀況:父類抽取共性,子類還有本身的特性,咱們能夠在建立子類的時候,將數據設置到父類中

                   方法一:使用this關鍵字,調用父類的方法進行設置。

 

 

                   方法二:使用super關鍵字,調用父類的構造方法存儲。

 

 

一、  super關鍵字

一、  在構造方法中,引用super就是去到父類的對應構造方法中。

 

二、  在普通方法中,引用super,那麼就是父類對象的引用。

 

三、  區分:看super調用的時候是否帶有小括號。

Super帶有小括號:引用構造方法。

 

 

Super不帶小括號:父類對象的引用。

 

 

         三、父類對象如何沒有繼承,那麼可否使用super,是可使用super關鍵字的。

 

 

         四、父類若是沒有繼承,super引用引用到哪去了呢?

                   父類若是沒有繼承,默認都是指向的Object對象

        

三、final關鍵字的使用

         一、final關鍵字:最終的,不可更改的。

 

         二、具體使用:(面試原題)

                   一、final能夠修飾對象:可是修飾後,當前的對象是不可以被繼承的。

 

 

                   二、final能夠修飾屬性:可是修飾後,屬性就會變成常量,不可以修改。

 

 

                   三、final能夠修飾方法,可是修飾後,方法不可以被重寫。

 

 

         三、final的做用是什麼

                   一、每一個用戶都會存在一個用戶id,這個屬性後期任何人都不能修改,因此用戶的屬性咱們後期要設置final變成常量。

 

                   二、方法呢:有些重要的方法,好比支付方法和退款方法,咱們是不容許隨便修改的,因此咱們當前支付的方法,是不容許重寫的。只要和錢打交道的方法,咱們都須要嚴謹對待。

 

                   三、對象,有些對象是不容許被繼承的,若是一旦繼承了,那麼當前對象裏面的方法以及操做,我不須要任何的判斷和權限,就可以直接使用了。若是是特殊對象,和高加密對象等等,咱們是不容許他被繼承的。

 

         四、後期你們碰見面試題問final,和筆試題問答題final。咱們就須要以下回答

                   一、屬性使用final:變常量,讓用戶權限等數據,變成不可修改的數據。

 

                   二、方法使用final:敏感操做的方法,通常狀況下是不予許被重寫的,那麼咱們就須要在方法上使用final。

 

                   三、對象使用final:項目的核心對象,敏感對象,通常狀況下都是不須要繼承的,一旦繼承,裏面的全部非私有的方法和屬性都可以直接被調用,。很是不安全。咱們須要將對象設置爲final修飾的,這樣對象就不能直接被繼承了。

四、static關鍵字的使用

         一、static是什麼:static是靜態的意思,它的主要做用就是讓程序的生命週期拉長,讓屬性能夠不經過new關鍵字建立就能直接使用。讓方法可以不經過關鍵字就能夠直接調用。

 

         二、static修飾的屬性和方法,咱們能夠不經過new對象,經過對應的類名直接調用

 

                   測試類:

 

 

         三、原理:當前對象若是設置了static修飾的關鍵字,那麼對象在new以前,靜態的屬性和方法,其實就已經加載到了內存中,加載是經過.class文件生成的時候就加載進入了。

 

 

         四、static修飾的優勢:訪問的權限比較大,能夠不經過new關鍵字建立對象就能直接使用了。並且數據,訪問的權限是全局的。

                   多個方法之間能夠共享數據,可是不能再多個程序中共享。

                   成員變量,若是使用static,那麼多個方法之間,拿到的數據就是共享的。

                   方法也是同理。

 

         方便對象的使用,快捷。減小new的使用。

 

         五、static修飾的缺點:

                   一、共享的數據,有一個方法進行修改了,其餘的方法拿到的數據都是修改後的。

 

                   二、共享的數據,聲明週期又長。也就意味着內存回收週期就長,長期使用比較佔用內存。

 

         六、靜態代碼塊使用:咱們對象在建立前就會直接調用

 

 

         七、查看誰先調用

 

 

         八、靜態代碼塊不論是在上面仍是下面,都會先構造方法執行,緣由就是靜態.class文件的時候就已經在了,準備執行了。而構造方法是new關鍵字運行的時候纔會調用。

 

         九、在當前的程序工做空間中,bin文件夾裏面都是class文件,可是須要注意,程序中的代碼,一旦出現錯誤,class文件就會自動刪除。沒有錯誤的狀況下後,文件又會自動生成。

相關文章
相關標籤/搜索