這個月的計劃由于博主的個人原因,有不少都沒有實作,只能在下個月抓緊時間,
本篇博文是在牛客上刷的題,基本是JAVA的基礎知識,筆者JAVA還沒有學完,所以這里先把博主會的寫上,之后此系列的文章還會出現,繼續彌補JAVA里的核心知識點,
NO.1

super:
1.子類的建構式呼叫父類的建構式需要使用super
2.子類將父類的方法進行了重寫,如果子類想呼叫父類里面被重寫的方法,需要super
3.子類如果沒有重寫父類的方法,那么用不用super都是一樣的結果,此時可以直接呼叫,
NO.2

首先,不能思維定勢,題里是return i / 10 ,i位于分子而不是分母,所以可以為0,
然后,對于拋出的關系,我們的程式首先進入main函式,然后進入try當中,呼叫上面的aMethod(0)的方法,
進入之后,發現我們的i是可以為0的,所以未拋出例外,catch陳述句將不再執行,但是仍需要走一遍finally,列印出結果,
我們此時再回到main函式里面,catch塊也是不會執行的,直接進入輸出列印,所以結果為B
NO.3

這個題的關鍵在于能否看懂輸出里面的那個式子,首先我們看一下常規解法:
我們應當知道,計算機本身存盤的就是補碼,我們先把10換位二進制,也就是:0000 0000 0000 1010,然后 ~ 代表按位取反,那么我們可以得到 1111 1111 1111 0101 這個就是~10的補碼,現在我們讓補碼減去一,得到的是 ~10的反碼,那么 ~10的原碼就是反碼取反,最高位符號位保持不變,也就是: 1000 0000 0000 1011 ,然后轉換為正常的整數為 -11,然后帶入運算,結果是 -6,
然后看一下第二種方法:
公式 - n= ~ n+1可推出~ n= - n-1,所以~10= - 11,一步搞定,
NO.4

A.我們子類的第一行都是默認為了super(),那么它可以默認呼叫父類的無參構造,題里面說是必然會呼叫,我們子類的有參建構式和是否呼叫父類的有參的建構式之間無必然聯系,
B.我們的介面只能繼承介面,但是是不能繼承類的,介面可以多繼承,但是我們的類都是單繼承,
C.介面里面的放方法都是抽象的,介面可以實作多繼承,
D.我們的一個類里面沒有顯式定義任何構造方法的時候,JVM會默認給我們一個無參構造,且第一行默認為super(),
NO.5

題目里面問,什么是選擇陳述句,做題的時候一點反應都沒有…
選擇陳述句:if,switch
回圈陳述句:while ,for ,do while
跳轉陳述句: break , continue
例外處理陳述句: try ,catch ,finally ,throw
NO.6

首先Employee類繼承了Person類,那么我們知道,先父類的構造方法,再子類,那么我們需要在Employee類中有一個方法來呼叫父類的建構式,但是由題目得,Person類里面,并沒有無參構造方法,所以,我們可以在父類里面增加無參構造方法,但是最好的方法是,在Employee里面加一個super(“nm”); 也就是子類在自己的建構式里面顯示的呼叫父類的建構式,
NO.7

直接看下面這位大佬的圖:

NO.8
選出錯誤的選項,答案是 ABC

A.final修飾的類是終態類,是不能夠被繼承的,但是我們的抽象類只有被繼承之后才是有意義的,所以用final是不能用來修飾抽象類的,
B.我們定義的抽象方法是為了被重寫,但是final定義的方法不能夠被重寫,故矛盾,
C.抽象方法只是宣告,并不能夠做出實作的方法,
NO.9

1.final修飾的變數等同于常量,
2.如果final修飾了類,那么類不能夠被繼承,
3.final如果修飾了方法,那么方法不能被重寫,
4.final不能用來修飾抽象類,
5.final的方法可以被多載,但是不能被重寫,
6.多載是指同樣的修飾符,方法名,回傳值,但是引數的個數或者順序不同,
7.重寫是指子類繼承了父類之后,重寫父類里面的方法,
NO.10

靜態的方法使用不依賴于物件,只看型別,在編譯的時候就已經確定了,
NO.11

我們看一下java的資料型別:它分為基本資料型別和參考資料型別,
對于equals方法而言,它不能用于基本資料型別的比較,只能用于物件的比較,比較二者的地址是否相同,
對于“==”而言,它是用來進行基本資料型別的比較,比較兩者值是否一樣,也用來進行參考資料型別相互比較,比較兩者的地址是否相等,但是不可以用來進行參考資料型別和基本資料型別的比較,簡單而言,B之所以錯,是因為型別并不匹配,
NO.12

靜態變數是屬于整個類的,而區域變數屬于方法,只在方法里面有效,所以不可以用static修飾區域變數,
NO.13

length()回傳的是字串的長度,本題沒有問占多少個位元組,
NO.14

直接補充大佬的筆記了:

NO.15

A.hello均存在于常量池當中,a和b均指向常量池中的hello,
B.題目沒有說a是區域變數,所以當作全域變數來處理,如果a是區域變數的話需要初始化,
C.int a = 1; 只是定義了一個值,它沒有參考地址,并不指向堆中,但是我們 Integer b = new Integer(1); 是指向了堆中地址為 1 的位置,
D.int a = 1; 只是定義了一個值,同上C選項,
NO.16

看大佬的總結:

NO.17

首先本題考察了string和char的區別,我們應當知道,string型別的值是不可變的,原因是因為在string的原始碼當中,使用char陣列來順序存盤字串當中的每一個字符,而且這個char陣列是用final來修飾的,所以我們賦值之后,它的值也就不會再發生改變了,所以題中的str是tarena, 然后char陣列的首元素被替換,所以是gbc,
NO.18

區域內部類放在代碼塊或者是方法當中,不能有訪問控制修飾符,而且不可以被static型別修飾,
NO.19

翻譯一下:
下面那個選項有關java.util.ArrayList是正確的?
A.集合中的元素是經過排序的,
B.集合是不可以被改變的,
C.集合當中的元素必須唯一,
D.集合元素的鍵值是唯一的,
E.集合當中的元素是執行緒同步的,
NO.20

題目所給是:(short)10/10.22,而不是(short)(10/10.22),兩者的區別顯而易見,前者是只把10給轉換為了short型別,但是后面由于出現了小數,所以進行了自動型別的提升,轉換為了double型別,后者的話是將運算完成后的結果轉換為了short型別,
NO.21

A,B的方法名和引數與父類是一樣的,但是回傳值與父類的回傳值之間沒有繼承關系,D的回傳值是一個類,C是多載,
看了一個大佬的筆記,再補充一下重寫與多載:
重寫:
方法名相同,引數型別相同,子類的回傳型別小于等于父類的回傳值型別,子類拋出的例外小于等于父類拋出的例外,子類的訪問權限大于等于父類方法的訪問權限,這里的回傳值型別必須要在有繼承關系下的情況,才可以進行比較,
多載:
方法名必須相同,引數型別必須不同,引數型別包括引數數目,引數型別,引數順序,
NO.22

A.Class類是Object的派生類,(超類是父類的意思)
B.每一個類都是用Object作為父類,但是用final修飾的類不能被繼承,
C.見下圖String的檔案,
D.Class類可以裝載其他類,

NO.23

JAVA程式初始化順序:
a. 父類的靜態代碼塊
b.子類的靜態代碼塊
c.父類的普通代碼塊
d.父類的構造方法
e.子類的普通代碼塊
f.子類的構造方法
NO.24

Base base = new Son();
base.method();
base.methodB();
父類的參考無法訪問子類獨有的方法,
NO.25

add(6)之后,變為{5,3,1,6}
add(0,4)之后,變為了{4,5,3,1,6}
remove(1)之后,變為了{4,3,1,6}
NO.26

A.抽象類里面可以有構造方法,但是不能直接創建抽象類的實體物件,
B.介面里面不可以有構造方法,
C.類是單繼承,
D.jdk1.8之后介面里面可以有方法體,之前的版本里面不可以有方法體,
實際錯的題還有好多,不過有的知識還沒有學,筆者先整理這些,日后及時補充!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/304747.html
標籤:java
上一篇:大二暑假結束我也真物體驗了一回企業中的Java開發【實習紀錄】
下一篇:Java方法(二)
