柚子快報激活碼778899分享:開發(fā)語言 【Java】類和對象
類和類的實例化
類就是一類對象的統(tǒng)稱。對象就是這一類具體化的一個實例。
聲明一個類就是創(chuàng)建一個新的數(shù)據(jù)類型,而類在
Java
中屬于
引用類型
,
Java
使用關(guān)鍵字
class
來聲明類。我們來 看以下簡單的聲明一個類。
基本語法:
class
<
class_name
>
{ ?
? ?
field
;
//
成員屬性
? ?
method
;
//
成員方法
}
//
實例化對象
<
class_name
> <
對象名
> =
new
<
class_name
>
();
class為定義類的關(guān)鍵字,ClassName為類的名字,{}中為類的主體。 類中的元素稱為:成員屬性。類中的函數(shù)稱為:成員方法。
代碼示例:
class Student{
public String name;
public char sex;
public int age;
public void study(){
System.out.println("學(xué)習(xí)");
}
public void eat(){
System.out.println("吃飯");
}
}
?這里我們創(chuàng)建了一個 Student 類,其中有成員屬性:name、sex、age。和成員方法:study、eat。
類的實例化
用類類型創(chuàng)建對象的過程,稱為類的實例化
代碼示例:
class Student{
public String name;
public char sex;
public int age;
public void study(){
System.out.println("學(xué)習(xí)");
}
public void eat(){
System.out.println("吃飯");
}
}
public class TeatDemmo{
public static void main(String[] args){
Student stu1 = new Student();
stu1.study();
stu1.eat();
}
}
其中 stu1 就是類 Student 的一個實例,我們創(chuàng)建了實例后才能在另一個類中用到這個類里面的成員方法和成員屬性。
new 關(guān)鍵字用于創(chuàng)建一個對象的實例使用 . 來訪問對象中的屬性和方法同一個類可以創(chuàng)建多個實例
類的成員
類的成員可以包含以下:字段、方法、代碼塊、內(nèi)部類和接口等
字段
在類中
,
但是方法外部定義的變量
.
這樣的變量我們稱為
"
字段
"
或
"
屬性
"
或
"
成員變量
"
使用 . 訪問對象的字段"訪問" 既包含讀, 也包含寫對于一個對象的字段如果沒有顯式設(shè)置初始值, 那么會被設(shè)置一個默認的初值
默認值規(guī)則
對于各種數(shù)字類型, 默認值為 0對于 boolean 類型, 默認值為 false對于引用類型(String, Array, 以及自定制類), 默認值為 null
方法
成員方法:用于描述一個對象的行為,就相比于C語言中的函數(shù)
構(gòu)造方法
方法中還有一種特殊的方法稱為
構(gòu)造方法?
在實例化對象的時候會被自動調(diào)用到的方法,
方法名字和類名相同
,
用于對象的初始化。
我們來舉個例子描述構(gòu)造方法:
class Student{
public String name;
public int age;
public char sex;
public Student(String name,int age,char sex){
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Data{
public static void main(String[] args) {
Student stu1 = new Student("張三",20,'男');
}
}
此處 Student() 方法就是我們的構(gòu)造方法,構(gòu)造方法在實例化對象的時候就會被自動調(diào)用,一般用于對象的初始化。
調(diào)試結(jié)果截圖:
這里我們可以看到,我們只使用了實例化對象,但是以經(jīng)給成員變量賦值了。
構(gòu)造方法是一種特殊方法
,
使用關(guān)鍵字
new
實例化新對象時會被自動調(diào)用
,
用于完成初始化操作。
new
執(zhí)行過程
為對象分配內(nèi)存空間 調(diào)用對象的構(gòu)造方法
語法規(guī)則
1.方法名稱必須與類名稱相同 2.構(gòu)造方法沒有返回值類型聲明 3.每一個類中一定至少存在一個構(gòu)造方法(沒有明確定義,則系統(tǒng)自動生成一個無參構(gòu)造)
注意事項
如果類中沒有提供任何的構(gòu)造函數(shù),那么編譯器會默認生成一個不帶有參數(shù)的構(gòu)造函數(shù) 若類中定義了構(gòu)造方法,則默認的無參構(gòu)造將不再生成構(gòu)造方法支持重載. 規(guī)則和普通方法的重載一致
this關(guān)鍵字
this
表示當前對象引用,
可以借助
this
來訪問對象的字段和方法
我們會發(fā)現(xiàn)在構(gòu)造函數(shù)的內(nèi)部,我們可以使用
this
關(guān)鍵字,構(gòu)造函數(shù)是用來構(gòu)造對象的,對象還沒有構(gòu)造好, 我們就使用了this。
代碼示例:
class Person {
private String name;
private int age;
private String sex;
public Person() {
this("bit", 12, "man");//必須放在第一行進行顯示
}
//這兩個構(gòu)造函數(shù)之間的關(guān)系為重載。
public Person(String name,int age,String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Main{
public static void main(String[] args) {
Person person = new Person();//調(diào)用不帶參數(shù)的構(gòu)造函數(shù)
}
}
這里我們使用了構(gòu)造方法的重載,我們在 main()函數(shù)中實例化的時候沒有傳參,說明我們自動調(diào)用了不帶參數(shù)的構(gòu)造方法。在不帶參數(shù)的構(gòu)造方法中我們又使用了 this() 函數(shù),這個函數(shù)的作用是調(diào)用其他的構(gòu)造方法(根據(jù)傳參來選擇調(diào)用哪個構(gòu)造方法)。
注意:this() 方法必須在該構(gòu)造方法的第一行。
static 關(guān)鍵字
1、修飾屬性 2、修飾方法 3、修飾代碼塊4、修飾類
修飾屬性
,
Java
靜態(tài)屬性和類相關(guān)
,
和具體的實例無關(guān)
.
換句話說
,
同一個類的不同實例共用同一個靜態(tài)屬性。
修飾方法?
如果在任何方法上應(yīng)用
static
關(guān)鍵字,此方法稱為靜態(tài)方法。
靜態(tài)方法屬于類,而不屬于類的對象。 可以直接調(diào)用靜態(tài)方法,而無需創(chuàng)建類的實例。 靜態(tài)方法可以訪問靜態(tài)數(shù)據(jù)成員,并可以更改靜態(tài)數(shù)據(jù)成員的值。
注意事項
:
靜態(tài)方法和實例無關(guān)
,
而是和類相關(guān)
.?
靜態(tài)方法不能直接使用非靜態(tài)數(shù)據(jù)成員或調(diào)用非靜態(tài)方法(非靜態(tài)數(shù)據(jù)成員和方法都是和實例相關(guān)的)。this和super兩個關(guān)鍵字不能在靜態(tài)上下文中使用。
代碼示例:
class Student{
public String name;
public int age;
public char sex;
public static String classroom;
public Student(String name,int age,char sex){
this.name = name;
this.age = age;
this.sex = sex;
}
public static void func(){
System.out.println("這是一個靜態(tài)方法");
System.out.println(classroom);
}
}
public class Data{
public static void main(String[] args) {
Student stu1 = new Student("張三",20,'男');
Student.classroom = "2022308";
Student.func();
}
}
通過上述代碼我們可以看出,在我們使用被 static 修飾過的成員變量或方法的時候,并不需要對象實例化,我們只需要通過類來調(diào)用。而且在靜態(tài)方法里面我們可以直接使用靜態(tài)成員變量。
運行結(jié)果圖:
上述代碼數(shù)據(jù)屬性的內(nèi)存布局:
因此被 static 關(guān)鍵字修飾的變量并不存在類中,不需要用用實例化來調(diào)用。
代碼塊
字段的初始化方式有:
1. 就地初始化 2. 使用構(gòu)造方法初始化 3. 使用代碼塊初始化
前兩種方式前面已經(jīng)學(xué)習(xí)過了
,
接下來我們介紹第三種方式
,
使用代碼塊初始化
什么是代碼塊
使用
{}
定義的一段代碼就是代碼塊
根據(jù)代碼塊定義的位置以及關(guān)鍵字,又可分為以下四種:
普通代碼塊 構(gòu)造塊 靜態(tài)塊 同步代碼塊
普通代碼塊:定義在方法中的代碼塊
構(gòu)造塊:定義在類中的代碼塊
(
不加修飾符
)
。也叫:
實例代碼塊
。構(gòu)造代碼塊一般用于初始化實例成員變量
靜態(tài)代碼塊:使用
static
定義的代碼塊。
一般用于初始化靜態(tài)成員屬性。
代碼示例:
class Student{
public String name;
public String id;
public int age;
public char sex;
public static String classroom;
static{
classroom = "2000123";
System.out.println("這是一個靜態(tài)代碼塊");
}
{
this.name = "小明";
this.id = "202258454";
this.age = 20;
this.sex = '男';
System.out.println("這是一個構(gòu)造代碼塊");
}
public Student(){
System.out.println("這是一個構(gòu)造方法");
}
}
public class Data{
public static void main(String[] args) {
Student stu = new Student();
}
}
我們在 Student 類中寫了一個靜態(tài)代碼塊一個構(gòu)造代碼塊和一個構(gòu)造方法。接下來我們來看當實例化對象的時候,它們?nèi)齻€的執(zhí)行順序。
我們可以看到靜態(tài)代碼塊優(yōu)先于構(gòu)造代碼塊優(yōu)先于構(gòu)造方法。
注意事項
靜態(tài)代碼塊不管生成多少個對象,其只會執(zhí)行一次,且是最先執(zhí)行的。 靜態(tài)代碼塊執(zhí)行完畢后, 實例代碼塊(構(gòu)造塊)執(zhí)行,再然后是構(gòu)造函數(shù)執(zhí)行。
toString 方法
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
//重寫Object的toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Data {
public static void main(String[] args) {
Person person = new Person("小明",19);
person.show();
System.out.println(person);
}
}
輸出結(jié)果:
注意事項
toString 方法會在 println 的時候被自動調(diào)用將對象轉(zhuǎn)成字符串這樣的操作我們稱為 序列化toString 是 Object 類提供的方法, 我們自己創(chuàng)建的 Person 類默認繼承自 Object 類, 可以重寫 toString 方法實 現(xiàn)我們自己版本的轉(zhuǎn)換字符串方法@Override 在 Java 中稱為 "注解", 此處的 @Override 表示下面實現(xiàn)的 toString 方法是重寫了父類的方法IDEA快速生成Object的toString方法快捷鍵:alt+f12(insert)
柚子快報激活碼778899分享:開發(fā)語言 【Java】類和對象
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。