看前欣賞美圖
類就是一類物件的統稱,物件就是這一類具體化的一個實體,
文章目錄
- 類實體化
- 封裝
- 構造方法
- this
- 代碼塊
- 總結
類實體化
基本語法
// 創建類
class <class_name>{
field;//成員屬性
method;//成員方法
}
// 實體化物件
<class_name> <物件名> = new <class_name>();
class為定義類的關鍵字,ClassName為類的名字,{}中為類的主體,
類中的元素稱為:成員屬性,類中的函式稱為:成員方法,
示例:
class Person1{ //定義的類
public String name; //成員屬性 實體變數
public int age;
public void eat(){ //實作的方法
System.out.println(name+"正在吃飯!");
}
public void sleep(){
System.out.println(name+"正在睡覺!");
}
public void print(){
System.out.println("我叫"+name+" 今年"+age+"歲了!");
}
}
**提問:**為什么這里方法會沒有用static來修飾?
**解釋:**被static修飾的方法屬于類方法,可以通過類名.方法名直接參考,而不需要new出一個類來,
class Person{
public String name;
public int age;
public static int count; //靜態成員變數 -> 類變數
public void eat(){
System.out.println(name+"正在吃飯!");
}
public void sleep(){
System.out.println(name+"正在睡覺!");
}
public void print(){
System.out.println("我叫"+name+" 今年"+age+"歲了!");
}
}
public class TestDemo {
public static void main(String[] args) {
Person person = new Person();
person.age++;
person.count++;
System.out.println(person.age);
System.out.println(person.count);
System.out.println("===========");
Person person1 = new Person();
person1.age++;
person1.count++;
System.out.println(person1.age);
System.out.println(person1.count);
}

static屬于類名的,不依賴于物件,直接Person.count使用,
注意:
1.普通方法里不能定義靜態變數
2.靜態方法里也不能定義靜態變數
3.普通方法內部可以呼叫靜態方法
4.靜態方法內部不能呼叫普通方法 (一定要用,就要new一個物件來呼叫了,)
難點問題:main函式為什么是靜態的???
解答:首先,main函式是不是靜態的都可以,這個東西取決于JVM,他自己設定成這樣的就行,
注意,一個參考不能同時指向多個物件
參考不一定都在堆疊上
class Person{
public String name;
public int age;
public void eat(){
System.out.println(name+"正在吃飯!");
}
public void sleep(){
System.out.println(name+"正在睡覺!");
}
public void print(){
System.out.println("我叫"+name+" 今年"+age+"歲了!");
}
}
public class TestDemo {
public static void main(String[] args) {
Person person = new Person();//通過new實體化物件
person.name = "dabi"; //賦值
person.age = 20;
person.eat();//成員方法呼叫需要通過物件的參考呼叫
person.sleep();
person.print();
//產生物件 實體化物件
Person person2 = new Person();
Person person3 = new Person();
}
注意事項
new 關鍵字用于創建一個物件的實體.
使用 . 來訪問物件中的屬性和方法.
同一個類可以創建對個實體.
默認值規則
對于各種數字型別, 默認值為 0.
對于 boolean 型別, 默認值為 false.
對于參考型別(String, Array, 以及自定制類), 默認值為 null
一個物件 存盤到哪里,和你是否被final修飾沒關系
封裝
private String name; //只能在當前類當中使用
要使用,用get獲取,set改變
好處:屬性更安全了 ,他不會暴露在類外了
快捷鍵:Alt + Insert
// 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 static void main5(String[] args) {
// Person person = new Person();
// //person.name = "bit";
// person.setName("bit");
// // person.age = 19;
// person.setAge(19);
// System.out.println(person.getName());
// System.out.println(person.getAge());
// }
構造方法
方法名和類名是相同的,且構造方法比較特殊,沒有回傳值,
構造方法是干嘛的? -> 一個物件的產生【物件的實體化】
1.為物件分配記憶體,
2.呼叫合適的構造方法,(構造方法不止一個)
// public Person(){
// this("chenman");//呼叫帶有1個引數的構造方法
// System.out.println("Person()::不帶引數的構造方法");
// }
//
// public Person(String name){
// this.name = name;
// System.out.println("Person(String)::帶一個String型別引數的構造方法");
// }
//
// public Person(String name,int age){
// this.name = name;
// this.age = age;
// System.out.println("Person(String,age)::帶兩個‘一個String,一個age’型別引數的構造方法");
// }
注意1:
1.如果沒有實作任何的構造方法,編譯器會幫我們,默認生成一個不帶引數的構造方法,也就是說,一個類,至少會有一個構造方法,不管你有沒有寫!!!
2.如果當前類有其他的構造方法,那么,編譯器就不會幫我們生成不帶引數的構造方法的,
3.構造方法 之間 可以構成多載
注意2
this代表當前的物件 這個是錯誤的?
他代表的是當前物件的參考,
this
1.this.data 呼叫當前物件的屬性
2.this.func() 呼叫當前物件的方法
3.this() 呼叫當前物件的其他的構造方法,必須放在第一行,只能存放在建構式當中(先列印他)
代碼塊
本地代碼塊
實體代碼塊
靜態代碼塊
同步代碼塊
{
// System.out.println("實體代碼塊");
// }
//
// static{
// count = 99;
// System.out.println("靜態代碼塊");
// }
1.靜態代碼塊最先執行,不管在前還是在后,
2.只會被執行一次,不用實體化物件也能被執行,
3.類加載的時候執行,
4.如果都是靜態的,和定義的順序有關系,
總結
這一章節確實有點繞,博主現在對他也不是特別的懂,寫的知識點也都是零零散散的,希望大家多多指正,在這里感謝大家觀看,讓我們一起加油克服它,你的支持就是我最大的動力!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/342185.html
標籤:java
下一篇:JAVA中對類和物件的認識
