導航🚀
- ?前言?
- 🌲類
- 普通成員
- 靜態成員變數
- 🌲封裝
- private實作封裝
- getter和setter方法
- 🌲構造方法
- 🌲關鍵字this
- 🌲代碼塊
- 💎結尾語💎
?前言?
本文將介紹Java中的類和物件,
🎉歡迎關注🔎點贊👍收藏??留言📝
🔑GithubJava倉庫,歡迎點擊訪問🔑
📝博主的筆記鏈接,第一時間更新📝
🌲類
類是構造物件的模板或藍圖,由類構造物件的程序稱為創建類的實體,
類的成員可以包含以下:
-
欄位
屬性或者成員,又分普通成員變數和靜態成員變數
普通成員變數:屬于物件,放在堆區,通過物件訪問
靜態成員變數:屬于類,放在方法區,又稱類變數,通過類名訪問
-
方法
-
代碼塊
-
內部類
-
介面
普通成員
class Person{
public String name;
public int age;
public void eat(){
System.out.println(name+" is eat");
}//方法
}
public class Main {
public static void main(String[] args) {
Person play1=new Person();//類實體化為物件
System.out.println(play1.name);
System.out.println(play1.age);
play1.eat();
}
}

我們在使用時沒有初始化,參考型別默認字串為null,整型為0,布爾型為false
我們對其初始化后,再進行訪問

public class Main {
public static void main(String[] args) {
Person play1=new Person();
play1.name="number1";
play1.age=18;
Person play2=new Person();
play2.name="number2";
play2.age=19;
System.out.println("名字:"+play1.name+" 年齡:"+play1.age);
System.out.println("名字:"+play2.name+" 年齡:"+play2.age);
}
}
名字:number1 年齡:18
名字:number2 年齡:19
由此我們看出,普通成員變數是屬于物件,我們對實體化第二個物件并且初始化賦值的時候并不會影響第一個物件的值,

靜態成員變數
普通成員變數屬于物件,而靜態成員屬于類
class Person{
public String name;
public int age;
public static int count;
}
public class Main {
public static void main(String[] args) {
Person play1=new Person();
Person play2=new Person();
play1.count=1;
play2.count=2;
System.out.println(play1.count);
System.out.println(play2.count);
}
}

我們看見
- 通過物件訪問靜態變數有警告
- “初始化”不同但是輸出結果相同并且以結果第二個
事實上,靜態成員變數屬于類,我們可以通過類直接訪問靜態變數而不需要實體化一個物件

我們知道參考放在堆疊區上,物件放在堆區,那么靜態變數放在那里?放在方法區
與此對應的還有靜態方法,我們通過類就能直接訪問方法,
static定義的變數屬于類,叫做類變數;定義的方法叫做類方法,
需要注意的是
-
普通成員方法內不能定義靜態變數,(可以看見直接報錯,語法不支持,)
-
靜態方法內部不可以呼叫普通方法(呼叫普通方法需要物件)
-
普通方法內部可以呼叫靜態方法
-
靜態方法內部可以訪問靜態變數但是不能定義靜態變數
🌲封裝
private實作封裝
private和public這兩個關鍵字表示"訪問權限控制",
- 被public修飾的成員變數或者成員方法,可以被類直接呼叫者呼叫,
- 被private修飾的成員變數或者成員方法,不能被類的呼叫者呼叫,
換句話說, 類的使用者根本不需要知道, 也不需要關注一個類都有哪些 private 的成員. 從而讓類呼叫者以更低的成本來使用類,
getter和setter方法
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person person =new Person();
person.setAge(18);
person.setName("number");
System.out.println(person.getAge());
System.out.println(person.getName());
}
}
需要注意的是
set和get方法再idea編譯器中提供,可以直接生成,
注意以下錯誤
public void setAge(int age) {
age = age;//不會賦值,兩個age是相同age(區域變數有限)
}
🌲構造方法
定義:方法名和類名是相同的,并且構造方法沒有回傳值,
步驟:為物件分配記憶體---->呼叫合適的分配方法
合適的意味著呼叫方法不止一個,
需要注意的有
- 方法名稱必須與類名稱相同
- 構造方法沒有回傳值型別宣告
- 每一個類中一定至少存在一個構造方法(沒有明確定義,則系統自動生成一個無參構造)
- 如果類中沒有提供任何的建構式,那么編譯器會默認生成一個不帶有引數的建構式
- 若類中定義了構造方法,則默認的無參構造將不再生成.
- 構造方法支持多載. 規則和普通方法的多載一致.
class Person{
public String name;
public int age;
public Person(String name,int age){
this.age=age;
this.name=name;
}
public Person(String name){
this.name=name;
}
public Person(){
System.out.println("無引數");
}
}
public class Main {
public static void main(String[] args) {
Person person1 =new Person();
Person person2 =new Person("zhangsan");
Person person3 =new Person("lisi",18);
System.out.println(person1.name+" "+person1.age);
System.out.println(person2.name+" "+person2.age);
System.out.println(person3.name+" "+person3.age);
}
}
無引數
null 0
zhangsan 0
lisi 18
🌲關鍵字this
this和super有什么區別?
this.data--------呼叫當前物件的屬性
this.func()------呼叫當前物件的方法
this()-------------呼叫當前物件的其他構造方法,只能存放在建構式中
必須放到第一行
🌲代碼塊
本地代碼塊
實體代碼塊
靜態代碼塊
同步代碼塊
class Person{
public String name;
public int age;
{
System.out.println("實體代碼塊");
}
static {
System.out.println("靜態代碼塊");
}
static int a=0;
}
public class Main {
public static void main(String[] args) {
Person person=new Person();
System.out.println(person);
}
}
靜態代碼塊
實體代碼塊
Person@1b6d3586
我們可以看見靜態代碼塊是最先被執行的并且靜態代碼塊只會被執行一次
并且靜態代碼塊不用實體化物件也會被執行
代碼塊怎么被呼叫?
靜態代碼塊執行在實體代碼塊前,并且靜態代碼塊只執行一次
就算不用實體化為物件也會執行一次
💎結尾語💎
博客根據筆記改動而來,如有錯誤歡迎評論指正,感激不敬,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/342189.html
標籤:java
