知識點
關鍵字,常用類(super,static,final):
super
- 子類對父類的參考,只能在非靜態方法中使用
- 參考父類的成員變數的格式為 super.成員變數名稱
- 參考父類的非靜態方法的格式為 super.方法名(引數串列)
- 參考父類的構造方法的格式為 super(引數串列)
final
- final修飾類這個類就不能被繼承,但不影響創建物件,如系統的String類
- final修飾的方法不能被重寫,但父類中沒有被final修飾方法,子類覆寫后可以加final,
- final修飾區域變數,只能夠賦值一次,當修飾的是參考的型別時,不能被重新賦值,但是可以修改物件的屬性
- final修飾成員變數,最終的變數,常量,固定的值,一定要初始化,不能被二次賦值,
static(開發中慎用,會很耗記憶體)
- 靜態的,成員資訊在類中在方法區中,常量池(常量值),靜態記憶體區(靜態成員資訊),
- 不能修飾類,但是可以修飾方法,該方法是靜態方法,在類中,通過類區執行呼叫,
- 被static修飾的變數,是靜態變數,在類中,靜態全域變數:靜態屬性-->在類中存盤,被所有物件共享,
思考:super,this 與 static 為什么不能共存????
static靜態的,是不變的,在java中static修飾成員屬性,方法時,表示該屬性/方法可以被類名直接呼叫,如工具類等
而this代表本類物件的參考,通常用與成員變數與區域變數重名時,
super代表子類對父類滿參建構式的初始化,也是需要產生物件才可以使用但是考慮到虛擬機加載順序為先加載類,當被實體化才產生物件,所以如果并存則表示類和物件同時加載,顯然是不合邏輯的,
代碼塊:
- 區域代碼塊
- 定義在方法中,用戶劃磁區域的,( {}:作用域啊,劃定作業區間 )
- 構造代碼塊
- 構造代碼塊和方法并列,定義在類成員變數位置的代碼塊,每次創建物件的時候都會執行,優先于構造方法
- 內容寫的是陳述句,宣告變數,不能實作功能體(方法),
- 靜態代碼塊
- 定義在類的成員變數位置的用static修飾的代碼塊,
- 它優先于當前類主方法執行、優先于構造代碼塊執行,當以任意形式第一次使用到該類時執行,
- 該類不管創建多少物件,靜態代碼塊只執行一次,
- 可用于給靜態變數賦值,用來給類進行初始化,初始化成員變數,加載一些成員資訊,
執行順序:父類靜態代碼塊>子類靜態代碼塊>main函式>構造代碼塊>構造方法
(注意:方法只能并列使用,不能嵌套使用!!!!!!!!!)
訪問修飾符
| –-------------- | public | protected | default | private |
| 同一類中 | ? | ? | ? | ? |
|
同一包中 (子類與無關類) |
? | ? | ? | |
| 不同包的子類 | ? | ? | ||
| 不同包中的無 關類 | ? |
注意:
-
對于protected不同包中的子類只能在子類內部呼叫,在外部子類是無法呼叫成員變數和方法的
-
在不同包下的無關類中,只能訪問public修飾的成員資訊
-
在不同包的子類中,子類的物件是可以訪問被protected修飾的父類的成員資訊的
系統常用類:
API ---> Application Interface 應用程式介面
java中的五大常用包: java.lang、 java.util、 java.io、 java.net、 java.sql
object類
equals方法在非空物件參考上實作等價關系:
- 自反性 :對于任何非空的參考值
x,x.equals(x)應該回傳true, - 它是對稱的 :對于任何非空參考值
x和y,x.equals(y)應該回傳true當且僅當y.equals(x)回報true, - 傳遞性 :對于任何非空參考值
x,y和z,如果x.equals(y)回報true個y.equals(z)回報true,然后x.equals(z)應該回傳true, - 它是一致的 :對于任何非空參考值
x和y,多次呼叫x.equals(y)始侄訓傳true或始侄訓傳false,沒有設定中使用的資訊equals比較上的物件被修改, - 對于任何非空的參考值
x,x.equals(null)應該回傳false, - 該
equals類方法Object實作物件上差別可能性最大的相等關系; 也就是說,對于任何非空的參考值x和y,當且僅當x和y參考相同的物件(x == y具有值true)時,該方法回傳true, - 請注意,無論何時覆寫該方法,通常需要覆寫
hashCode方法,以便維護hashCode方法的通用合同,該方法規定相等的物件必須具有相等的哈希碼,
toString方法回傳一個“textually代表”這個物件的字串, 結果應該是一個簡明扼要的表達,容易讓人閱讀, 建議所有子類覆寫此方法,
該toString類方法Object回傳一個由其中的物件是一個實體,該符號字符`的類的名稱的字串@ ”
和物件的哈希碼的無符號的十六進制表示,
換句話說,這個方法回傳一個等于下列值的字串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
string類
-
String類代表字串, Java程式中的所有字串文字(例如"abc")都被實作為此類的實體, -
字串不變; 它們的值在創建后不能被更改, 字串緩沖區支持可變字串,
-
因為String物件是不可變的,它們可以被共享,
練習代碼:
/*
自己創建一個類,寫一個靜態方法,傳入一個int陣列,得 到一個字串[元素1,元素2,….]
*/
public class HomeWork02 {
public static void main(String[] args) {
int[] arr = new int[]{1,55,66,99,88,74,22,44,32,22};
System.out.print("[");
for (int i = 0;i<arr.length;i++){
if (i!=arr.length-1){
System.out.print(arr[i]+",");
}else {
System.out.print(arr[i]);
}
}
System.out.println("]");
}
}
public class HomeWork01 {
public static void main(String[] args) {
// 在控制臺輸入字串,統計出大寫的字符的個數,小寫的字符個數,數字型別的字符個數,以及其他字符的個數
Scanner sc = new Scanner(System.in);
int big = 0;
int small = 0;
int num = 0;
int other = 0;
System.out.println("請輸入一串字串");
String str = sc.next();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) >= 65 && str.charAt(i) <= 90) {
big++;
} else if (str.charAt(i) >= 97 && str.charAt(i) <= 122) {
small++;
} else if (str.charAt(i) >= 48 && str.charAt(i) <= 57) {
num++;
} else {
other++;
}
}
System.out.println("大寫字母有:" + big + "個");
System.out.println("小寫字母有:" + small + "個");
System.out.println("數字有:" + num + "個");
System.out.println("其他字符有:" + other + "個");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154806.html
標籤:Java
