第二章(基本資料型別與陣列)
識別符號
識別符號由字母,下劃線,美元符號和數字組成,第一個字元不能是數字, f a l s e false false不是識別符號。
關鍵字
關鍵詞是Java語言中已經被賦予特定意義的一些單詞,不可以把關鍵詞作為名字來用。true 和 false 都不是關鍵詞
基本資料型別
boolean , char , byte , short , int , long ,float , double
char 型別是兩個位元組的,在unicode表是從0開始到65535,在java裡面是沒有unsigned型別的
float型常量和double型常量
float常量必須用F或者f作為字尾。double常量用D或者d為字尾。但double常量允許省略字尾
獲取陣列的長度
獲得一維陣列的長度,獲取二維陣列中一維陣列的個數。一維陣列名。length 二維陣列名。length
Example1
裡面程式碼2錯誤:因為int轉byte,由大轉小,需要強制轉換。同理程式碼3 long long 轉 int ,程式碼3不能把浮點型別變數賦給整型變數,程式碼5需要有後綴 f ,否則就預設是double型別,需要進行強制轉換。
Example2
先把 b陣列填完,當前的 b陣列是:
然後進行操作相當於把a的引用賦值給b[0] , 現在就變成了:
再進行一個賦值操作,就變成了:
這個時候輸出b[0][3] 的值為30,同時a[1] 的值也變成了7,因為a中的值也被修改了,
在於a的引用賦值給了b[0],那麼b[0] 和 a 指向同一塊記憶體地址
,那麼如果修改了b[0] 中的值,a的值也會跟著相應的改變。
Example3
btye取值範圍-128至127
short取值範圍-32768至32767
int取值範圍-2147483648至2147483647
long取值範圍-9223372036854775808至9223372036854775807
float取值範圍1。4E-45至3。4028235E38
double取值範圍4。9E-324至1。79769E308
char 型別是兩個位元組的,在unicode表是從0開始到65535,在java裡面是沒有unsigned型別的
第三章(運算子,表示式,語句)
在
精度
上 char 的精度比 short 高,當 (char) + (int)時 ,最後的結果答案應該為 (char) ,兩個(char)型別相加可能會爆 (char) 型別,最後的答案可以用 (int) 來接收。
精度遞增的話:(從低到高)
byte -> short -> char -> int -> long -> float -> double
Java在計算算術表示式的時候,遵守以下的規則:
如果表示式裡面有 double,則按 double 進行運算。
如果表示式的最高精度是 float ,則按 float 進行運算。
如果表示式的最高精度是 long ,則按 long 進行運算。
如果表示式的最高精度低於int , 則按 int 進行運算。
這道題的答案應該選C 因為A選項97+12是可以賦給short型別的,D選項與A選項同理,可以賦給byte型別,B選項和C選項差的只有一個常數,B和C ,B對的原因在於1是數字常量。編譯器編譯的時候,會進行自動合併,不會做型別轉換。在編譯階段就能完成。C錯的原因在於,x是變數,在編譯階段無法合併,只能在執行的時編譯,執行時發現x是整型,‘a’+x自動轉換成整型,無法直接賦值給char型別,需要進行強制轉換(char)(‘a’+x)
example1
輸出答案為:
switch語句如果某個case中沒有break的話,就會一直執行後面case的相關語句,知道遇到break為止。
第四章(類與物件)
面嚮物件語言特點分為 1。 封裝性 2。 繼承 3。 多型
類是一種用於建立具體例項(物件)的資料型別、類體中主要由兩部分構成:
變數的宣告:用來儲存屬性的值(體現物件的屬性)
方法的宣告:方法可以對類中宣告的變數進行操作,給出演算法(體現物件所具有的行為)
宣告變數部分所宣告的變數被稱為成員變數或域變數
成員變數包括基本型別:整型、浮點型、字元型、邏輯型別 ; 還包括引用型別:陣列、物件和介面
成員變數的預設值:java編譯器會為其指定預設值。對於boolean變數,預設值是false;對於byte,short, int, long變數,預設值是0,對於float 和double 變數預設值是0。0;對於“引用型”變數(陣列以及物件),預設值是null
方法的定義
區域性變數只在方法內有效,而且與其宣告的位置有關。方法的引數在整個方法內都有效,方法內的區域性變數從宣告它的位置開始有效。
區分成員變數和區域性變數:成員變數和區域性變數名字相同,成員變數被隱藏,即該成員變數在這個方法內失效,如果想使用隱藏的成員變數,必須使用關鍵字 this,區域性變數沒有預設值
類圖的畫法
第一層是:名字層 如果該名字是常規字形表明該類是具體類;如果類的名字是斜體字形表明該類是抽象類
第二層是:變數層 列出類的成員變數及型別 格式是 變數名字:型別
第三層是:方法層 列出類中的方法,格式是 方法名字:型別
構造方法
類中的構造方法的名字必須和它所在的類的名字完全相同,而且沒有型別。允許一個類中編寫若干個構造方法,但必須保證它們的引數不同,引數不同是指引數的個數不同,或引數的個數相同,但對應列表中的某個引數型別不同。
若類中沒有編寫構造方法,系統會預設該類只有一個構造方法,該預設的構造方法是無引數的,且方法體裡面沒有語句。
建立物件
如果在類中定義了一個或多個構造方法,那麼java不提供預設的構造方法
物件的引用和實體
一個類宣告的兩個物件如果具有相同的引用,兩者就具有相同的引用,兩者就具有完全相同的變數。且java裡面存在垃圾收集機制,這種機制週期的檢測某個實體是否已不在被任何物件所擁有,如發現,則釋放實體佔用的記憶體。引用
方法過載
方法過載要求方法名相同,引數列表不同,可以是引數個數或者型別不同。構造方法也可以是過載的
類宣告
類宣告只能有public和友好類進行宣告
protect 允許在同一個包中或者是子類呼叫
私有變數,私有方法 不能直接使用物件呼叫
第五章(子類與繼承)
子類與繼承
如果子類和父類在同一個包裡,那麼子類繼承其父類中不是private的成員變數作為自己的成員變數,並且也自然地繼承了父類中不是private的方法不是private的方法,繼承的成員變數和方法的訪問許可權保持不變。
當子類和父類不在同一個包裡時,父類中的private和友好訪問許可權的成員變數不會被子類繼承,也就是說,子類只繼承父類的protected和public訪問許可權的成員變數作為子類的成員變數,同理方法一樣。
方法重寫需滿足
父類中的方法和子類中的方法
方法名必須一致
方法引數必須一致
子類的方法的訪問修飾符不能縮小訪問許可權
返回值型別要一致
成員變數的隱藏和方法重寫
宣告的成員變數的名字和從父類繼承來的成員變數的名字相同(宣告的型別可以不同),在這種情況下子類就會隱藏所繼承類來的成員變數。
方法重寫,子類一旦重寫了父類的方法f(),就隱藏了繼承的繼承的方法f(),那麼子類物件呼叫方法f()呼叫的一定是重寫方法。如果子類想使用被隱藏的成員變數或方法,必須使用關鍵詞super
如果子類隱藏了繼承的成員變數m,那麼子類繼承的方法中操作的m,是被子類隱藏的m,而子類新增或重寫的方法中操作的m一定是子類新宣告的成員變數m。
重寫的語法規則 重寫的方法的名字,引數個數,引數的型別和父類的方法完全相同。
在重寫父類的方法時,不允許降低方法的訪問許可權,但可以提高訪問許可權。
用super操作被隱藏的成員變數和方法
如果在子類中使用被子類隱藏的成員變數或方法,就需要使用關鍵詞super 。例如super。x 、super。play() 就是訪問和呼叫的被子類隱藏的成員變數 x 和方法 play() 。
使用super呼叫父類的構造方法,由於子類不繼承父類的構造方法,所以子類在其構造方法中需使用super來呼叫父類的構造方法。
上轉型物件
上轉型物件不能使用子類新增成員(包括成員變數,成員方法),只能使用子類重寫父類的方法,被子類隱藏的父類變數;子類未重寫的父類方法,未被隱藏的父類成員變數。
abstract類
使用關鍵詞abstract修飾的類被稱為abstract類(抽象類)
用關鍵詞abstract修飾的方法稱為abstract方法(抽象方法)
只有abstract類才可以有abstract方法,也可以擁有非abstract方法,只有abstract類不能用new識別符號建立物件,且abstract的物件可以為上轉型物件
private :因為一個abstract方法需要被重寫,所以不能修飾為private
final:因為一個abstract方法需要被重寫。被final修飾的方法是不能被重寫的,所以不能同final共存
static:因為一個abstract方法沒有方法體。靜態方法需要對方法體執行內容分配空間,所以不能同static共存;(abstract是沒有實現的,不能產生物件,而是static是屬於類的,類本身是已經存在的物件)
上轉型物件訪問的是被隱藏的成員變數 呼叫的是子類重寫的方法
【程式碼1】呼叫b物件的f方法,b物件是B類例項化的,呼叫的是B類自己的f方法,傳入10。0和8。0後,用super關鍵字呼叫了父類的f方法,得到18。0賦值給m,最後返回18。0+10。0*8。0也就是98。0。
【程式碼2】呼叫B類中的靜態方法g傳入3,方法內又去呼叫父類中的g方法傳入3,得到9賦值給m後,輸出9+3也就是12。
【程式碼3】a物件是上轉型物件,上轉型物件可以呼叫重寫父類的方法以及父類派生的方法,所以a呼叫的f方法是它重寫的方法,那麼具體過程就跟【程式碼1】相同,答案為98。0
【程式碼4】在於g方法是靜態方法,靜態方法是不允許被重寫的,所以B類中的g方法相當於該類特有的方法,那麼a呼叫的g方法實際上是父類的,輸出結果為9 。
第六章(介面與實現)
介面的意義
使 java 程式間接實現了多繼承
介面更加直接的設計了整個程式的結構,方便程式的擴充套件和維護
程式的設計人員可以透過面向介面程式設計減少設計工作的複雜度
介面代表一種能力,實現介面的同時就代表這個型別的物件擁有了這種能力
介面的語法規則
介面中所有屬性都是:共有靜態常量 public,會預設加上public static final 修飾
介面中所有方法都是:共有抽象方法 public
介面中不允許有構造方法
介面不能例項化
只有default方法和static方法可以新增方法體
實現介面的類如果不能實現所有介面中待重寫的方法,則必須設定為抽象類
介面可以實現多繼承,即一個子介面可以同時繼承多個父介面
一個類可以繼承自一個父類,同時實現多個介面
當一個類同時實現多介面,且其中同時具有相同方法時,實現類需要重寫該方法,否則會編譯報錯
介面中的抽象方法預設是public類,那麼類在重寫介面方法時不僅要去掉abstract修飾符,給出方法體,而且方法的訪問許可權一定要明顯地用public來修飾(不能降低訪問許可權)
面向介面程式設計
使用介面進行程式設計的核心思想是使用介面回撥,即介面變數存放實現該介面的類的物件的引用,從而介面變數就可以回撥類實現的介面方法
第七章(異常類)
異常類就是程式執行時可能出現的一些錯誤,Exception是所有異常的父類,Java使用throw關鍵詞丟擲一個Exception子類的例項表示異常發生
java。lang包中的Integer類呼叫其類方法可以將“數字”格式的字串,如“6789”,轉化成int型別,但是試圖將字串“ab89”轉化成數字時,方法parseInt()在執行過程中就會丟擲NumberFormatException物件,及程式執行出現NumberFormatException異常
java允許定義方法時宣告該方法呼叫過程的可能出現的異常,即允許方法呼叫過程中丟擲異常物件,終止當前方法的繼續執行。
try-catch語句
Java使用try-catch語句來處理異常,將可能出現的異常操作放在try-catch語句的try部分,一旦try部分丟擲異常物件,或呼叫某個可能丟擲異常物件的方法,並且該方法丟擲了異常物件,那麼try部分將立刻結束執行,轉向執行相應的catch部分。所以程式可以將發生異常後的處理放在catch部分。try-catch語句可以由幾個catch組成,分別處理發生的相應異常。
各個catch引數中的異常類都是Exception的某個子類,表明try部分可能發生的異常,這些子類之間不能有父子關係,否則保留一個含有父類引數的catch即可。自定義異常類
在編寫程式時可以拓展Exception類定義自己的異常類
一個方法在宣告時可以使用throws關鍵詞宣告要產生的若干個異常
使用throw關鍵詞丟擲該異常物件,至該方法結束
答案:你好
fine thanks
一個方法在宣告時可以使用throws關鍵字宣告要產生的若干個異常,並在該方法的方法體中具體給出產生異常的操作,即用相應的異常類建立物件,並使用throw關鍵字丟擲異常物件,導致該方法結束執行。try-catch語句捕獲到這個異常,輸出你好。
在執行try-catch語句後,執行finally子語句,也就是說,無論在try部分是否發生過異常,finally子語句都會被執行。
如果在try-catch語句中執行了return語句,那麼finally子語句依然會被執行,
try-catch語句中執行了程式退出程式碼,即執行System。exit(0);,則不執行finally子語句。
第八章(常用實用類)
String類
String 類在java。lang包中,由於java。lang包中的類被預設引入,java把String 類定義為 final 類,因此使用者不能拓展String 類,即String 類不可以有子類
String 物件可以用“+”進行並置運算,即首尾相接得到一個新的String 物件
length()方法用來獲取一個String物件的字元序列的長度
equals(string s)方法比較當前 String 物件的字元序列是否引數s指定的String 物件的字元序列相同,一樣的話返回true
startWith(String s),endWith(String s),判斷當前字元序列字首是否是引數指定的String 物件s的字元序列
compareTo(String s)相同返回0,當前String物件的字元序列與s的相同,返回0,如果大於s的字元序列,該方法返回正值,不然返回-1
contains(String s)方法判斷當前String物件的字元序列是否包含引數s的字元序列
ndexOf(String s)找到首次檢測到出現str的字元序列的位置,並返回該位置,沒有檢索到返回-1
substring(int startpoint)複製當前String 物件的字元序列中的startpoint位置到最後位置上的字元所得到的字元序列。
如果是substring(int start ,int end)的方法獲得一個新的物件,新的String 物件的字元序列從start到end-1的位置上的字元
trim()這樣是去掉前後空格的字元序列
字串與基本資料的相互轉換 int x=parseInt(s);string s=valueOf(int m);
StringTokenizer類
StringTokenizer(String s):為String物件s構造一個分析器。使用預設的分隔符標記,即換行符,回車符,tab符,空格符,進紙符做分隔標記
StringTokenizer(String s,String delim):為String物件s構造一個分析器。引數delim的字元序列中的字元的任意排列作為分隔標記