java封裝、String類
1. 類和物件
1.1 類和物件的理解
類和物件的關係
類:類是對現實生活中一類具有共同屬性和行為的事物的抽象
物件:是能夠看得到摸的著的真實存在的實體
簡單理解:類是物件的資料型別,類是具有相同屬性和行為的一組物件的集合
1.2 類的定義
類的組成是由屬性和行為兩部分組成
屬性:在類中通過成員變數來體現(類中方法外的變數)行為:在類中通過成員方法來體現(和前面的方法相比去掉static關鍵字即可)
1.3 成員變數和區域性變數
1.3.1 成員變數和區域性變數的區別
(1)類中位置不同:
成員變數(類中方法外)
區域性變數(方法內部或方法宣告上)
(2)記憶體中位置不同:
成員變數(堆記憶體)區域性變數(棧記憶體)
(3)生命週期不同:
成員變數(隨著物件的存在而存在,隨著物件的消失而消失)區域性變數(隨著方法的呼叫而存在,醉著方法的呼叫完畢而消失)
(4)初始化值不同:成員變數(有預設初始化值)區域性變數(沒有預設初始化值,必須先定義,賦值才能使用)
2. 封裝
2.1 private關鍵字
private是一個修飾符,可以用來修飾成員(成員變數,成員方法)
(1)被private修飾的成員,只能在本類進行訪問。針對private修飾的成員變數,如果需要被其他類使用,提供public 修飾的get/set方法。
2.2 this關鍵字
this修飾的變數指代成員變數,其主要作用是(區分區域性變數和成員變數的重名問題)
public class Student {
private String name;
public void setName(String name) {
this.name = name;
}
}
2.3 封裝思想
(1)封裝概述 是面向物件三大特徵之一(封裝,繼承,多型) 是面向物件程式語言對客觀世界的模擬,客觀世界裡成員變數都是隱藏在物件內部的,外界是無法直接操作的
(2) 封裝原則 將類的某些資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類提供的方法來實現對隱藏資訊的操作和訪問 成員變數private,提供對應的getXxx()/setXxx()方法
(3)封裝好處 通過方法來控制成員變數的操作,提高了程式碼的安全性 把程式碼用方法進行封裝,提高了程式碼的複用性
3. 構造方法
3.1 構造方法的注意事項
(1) 構造方法的建立
如果沒有定義構造方法,系統將給出一個預設的無引數構造方法 如果定義了構造方法,系統將不再提供預設的構造方法
(2)構造方法的過載
如果自定義了帶參構造方法,還要使用無引數構造方法,就必須再寫一個無引數構造方法
(3)推薦的使用方式
無論是否使用,都手工書寫無引數構造方法
(4)重要功能
可以使用帶參構造,為成員變數進行初始化
4. API
4.1 API概述
API (Application Programming Interface) :應用程式程式設計介面
java中的API指的就是 JDK 中提供的各種功能的 Java類,這些類將底層的實現封裝了起來,我們不需要關心這些類是如何實現的,只需要學習這些類如何使用即可。
5 String類
5.1 String類特點
字串不可變,它們的值在建立後不能被更改
雖然 String 的值是不可變的,但是它們可以被共享
字串效果上相當於字元陣列( char[] ),但是底層原理是位元組陣列( byte[] )
5.2建立字串物件兩種方式的區別(1)通過構造方法建立通過 new 建立的字串物件,每一次 new 都會申請一個記憶體空間,雖然內容相同,但是地址值不同
(2)直接賦值方式建立以“”方式給出的字串,只要字元序列相同(順序和大小寫),無論在程式程式碼中出現幾次,JVM 都只會建立一個 String 物件,並在字串池中維護
例如:char [] ch={‘a’,’b’};
String str1=new String(ch);
String str2=new String(ch);
String str3=”abc”;
String str4=”abc”;
棧記憶體 |
堆記憶體 |
||||
char[] ch ---001 |
001--
|
||||
String str1 --002 |
002--new String—ref 001 |
||||
String str2 --003 |
003--new String—ref 001 |
||||
String str3--004 |
常量池 004 -”abc” |
||||
String str4--004 |
5.3字串的比較【理解】
(1 )使用==
基本型別:比較數值
引用型別:比較的是物件地址值
(2)equals方法的作用
比較物件的內容是否相同
注意:String是物件,比較內容用equals
5.3字串拼接
5.3.1String拼接
每次拼接都會新建一個string物件,耗時浪費空間。
String s=”hello”;
S+=”world”;
棧記憶體 |
堆記憶體 |
main() String s |
常量池 001 hello 002 world 003 helloworld |
5.3.2 StringBuilder類概述
StringBuilder是一個可變的字串類,這裡的可變指的是 StringBuilder 物件中的內容是可變的.
StringBuilder是非同步,運行於多執行緒中就需要使用著單獨同步處理,但是速度就比StringBuffer快多了;
StringBuffer是執行緒安全的。