最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javaSE類和對象進階用法舉例詳解

 更新時間:2025年08月05日 11:46:18   作者:那我掉的頭發(fā)算什么  
JavaSE的面向?qū)ο缶幊淌擒浖_發(fā)中的基石,它通過類和對象的概念,實現(xiàn)了代碼的模塊化、可復(fù)用性和靈活性,這篇文章主要介紹了javaSE類和對象進階用法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

在掌握了類和對象的基礎(chǔ)概念后,我們需要進一步學(xué)習(xí)面向?qū)ο蟮暮诵奶匦约斑M階用法。本文將深入探討封裝的實現(xiàn)、static 成員的特性、代碼塊的作用以及對象打印的技巧,幫助你構(gòu)建更完善的面向?qū)ο缶幊讨R體系。

一、封裝

封裝是面向?qū)ο蟮娜蠛诵奶匦裕ǚ庋b、繼承、多態(tài))之一,其核心思想是將類的屬性和實現(xiàn)細節(jié)隱藏起來,只對外暴露必要的接口供其他對象訪問。通過封裝,可以提高代碼的安全性、可維護性和復(fù)用性。

1.訪問限定符

Java中主要通過類和訪問權(quán)限來實現(xiàn)封裝:類可以將數(shù)據(jù)以及封裝數(shù)據(jù)的方法結(jié)合在一起,更符合人類對事物的認知,而訪問權(quán)限用來控制方法或者字段能否直接在類外使用。Java中提供了四種訪問限定符:

在涉及包之前,先用private和publlic來幫助大家理解一下訪問限定符的使用。

例:

class Student{
    private String name;
    private int age;
    private double score;

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    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 double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}
public class Test2 {
    public static void main(String[] args) {
        Student student = new Student("xiaoming",9,78);
        System.out.println(student.name);/*報錯,在Test2類中
        調(diào)用Student類中的成員變量name,但是name
        被private限定符修飾,所以沒法直接使用*/

        student.setName("zhangsan");
        System.out.println(student.getName());
        /*不會報錯:getName和setName都用public作為限定符來修飾,
        在不同包不同類中也可以隨意調(diào)用*/
    }




}

然而,如果想借助getName和setName來改變name的值過于麻煩還需要再寫兩個成員方法,所以java提供了一種一鍵生成方法的簡便方法:

只需要按照圖中所示方法可以直接生成方法。

我使用的是漢化版的idea,沒有漢化版的應(yīng)該如下圖所示:

2.包

2.1包的概念

在面向?qū)ο篌w系中,提出了一個軟件包的概念,即:為了更好的管理類,把多個類收集在一起成為一組,稱為軟件包。有點類似于目錄。比如:為了更好的管理電腦中的歌曲,一種好的方式就是將相同屬性的歌曲放在相同文件下,也可以對某個文件夾下的音樂進行更詳細的分類。

2.2導(dǎo)入包

Java 中已經(jīng)提供了很多現(xiàn)成的類供我們使用. 例如Date類:可以使用 java.util.Date 導(dǎo)入 java.util 這個包中的 Date類.

public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
// 得到一個毫秒級別的時間戳
System.out.println(date.getTime());
}
}

但是這種寫法比較麻煩一些, 可以使用 import語句導(dǎo)入包.

import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一個毫秒級別的時間戳
System.out.println(date.getTime());
}
}

如果需要使用 java.util 中的其他類, 可以使用 import java.util.*;

import java.util.*;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一個毫秒級別的時間戳
System.out.println(date.getTime());
}
}

可以使用import static導(dǎo)入包中靜態(tài)的方法和字段。

import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
// 靜態(tài)導(dǎo)入的方式寫起來更方便一些.
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}

2.3自定義包

基本規(guī)則

1.在文件的最上方加上一個 package 語句指定該代碼在哪個包中.

2.包名需要盡量指定成唯一的名字, 通常會用公司的域名的顛倒形式(例如 com.bit.demo1 ).

3.包名要和代碼路徑相匹配. 例如創(chuàng)建 com.bit.demo1 的包, 那么會存在一個對應(yīng)的路徑 com/bit/demo1 來存儲代碼.

4.如果一個類沒有 package 語句, 則該類被放到一個默認包中

操作步驟

  1. 在 IDEA 中先新建一個包: 右鍵 src -> 新建 -> 包

  2. 在彈出的對話框中輸入包名, 例如 com.bit.demo1

  3. 在包中創(chuàng)建類, 右鍵包名 -> 新建 -> 類, 然后輸入類名即可.

  4. 在新創(chuàng)建的 Test.java 文件的最上方, 就出現(xiàn)了一個 package 語句

2.4常見的包

  1. java.lang:系統(tǒng)常用基礎(chǔ)類(String、Object),此包從JDK1.1后自動導(dǎo)入。
  2. java.lang.re?ect:java 反射編程包;
  3. java.net:進行網(wǎng)絡(luò)編程開發(fā)包。
  4. java.sql:進行數(shù)據(jù)庫開發(fā)的支持包。
  5. java.util:是java提供的工具程序包。(集合類等) 非常重要
  6. java.io:I/O編程開發(fā)包。

二、static成員

在Java中,被static修飾的成員,稱之為靜態(tài)成員,也可以稱為類成員,其不屬于某個具體的對象,是所有對象所共享的。

1.static修飾成員變量

static修飾的成員變量,稱為靜態(tài)成員變量,靜態(tài)成員變量最大的特性:不屬于某個具體的對象,是所有對象所共享的。
【靜態(tài)成員變量特性】

  1. 不屬于某個具體的對象,是類的屬性,所有對象共享的,不存儲在某個對象的空間中
  2. 既可以通過對象訪問,也可以通過類名訪問,但一般更推薦使用類名訪問
  3. 類變量存儲在方法區(qū)當中
  4. 生命周期伴隨類的一生(即:隨類的加載而創(chuàng)建,隨類的卸載而銷毀)
class Student{
    public String name;
    public String gender;
    public int age;
    public double score;
    public static int classroom = 1;
}
public class One {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
        Student student3 = new Student();
        System.out.println(Student.classroom);
        System.out.println(student1.classroom);
        System.out.println(student2.classroom);
        System.out.println(student3.classroom);
    }
}

靜態(tài)成員變量可以直接通過類名訪問也可以通過對象訪問:但是classRoom是三個對象共享的
下面這個例子詳細說明共享性:

class Student{
    public String name;
    public String gender;
    public int age;
    public double score;
    public static int classroom = 1;
}
public class One {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
        Student student3 = new Student();
        student1.classroom++;
        student2.classroom++;
        student3.classroom--;
        Student.classroom++;
        System.out.println(Student.classroom);
    }
}

你覺得輸出結(jié)果是多少呢?答案是3。

因為classroom不依賴于對象而存在,依賴于類而存在。

2.static修飾成員方法

【靜態(tài)方法特性】

  1. 不屬于某個具體的對象,是類方法
  2. 可以通過對象調(diào)用,也可以通過類名.靜態(tài)方法名(…)方式調(diào)用,更推薦使用后者
  3. 不能在靜態(tài)方法中訪問任何非靜態(tài)成員變量
  4. 靜態(tài)方法中不能調(diào)用任何非靜態(tài)方法,因為非靜態(tài)方法有this參數(shù),在靜態(tài)方法中調(diào)用時候無法傳遞this引用

三、代碼塊

1.代碼塊概念以及分類

使用 {} 定義的一段代碼稱為代碼塊。根據(jù)代碼塊定義的位置以及關(guān)鍵字,又可分為以下四種:

1.普通代碼塊

2.構(gòu)造塊

3.靜態(tài)塊

4.同步代碼塊

2.普通代碼塊

普通代碼塊:定義在方法中的代碼塊

public class Main{
public static void main(String[] args) {
{ //直接使用{}定義,普通方法塊
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
// 執(zhí)行結(jié)果
x1 = 10
x2 = 100

3.構(gòu)造代碼塊靜態(tài)代碼塊實例代碼塊

如何定義:

 {
        this.classroom = 114;
        System.out.println("調(diào)用了實例化代碼塊");
    }

    static{
        classroom = 115;
        System.out.println("調(diào)用了靜態(tài)代碼塊,一般用來初始化成員變量");
    }

    public Student1(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        System.out.println("構(gòu)造函數(shù)生成了");
    }

靜態(tài)代碼塊隨類的生成而生成:

class Student1{
    public String name;
    public String gender;
    public int age;
    private static int classroom = 113;
    public static int getClassroom(){
        return classroom;
    }

    {
        this.classroom = 114;
        System.out.println("調(diào)用了實例化代碼塊");
    }

    static{
        classroom = 115;
        System.out.println("調(diào)用了靜態(tài)代碼塊,一般用來初始化成員變量");
    }

    public Student1(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        System.out.println("構(gòu)造函數(shù)生成了");
    }
}
public class Two {
    public static void main(String[] args) {
        System.out.println(Student1.getClassroom());
    }
}

這段代碼中只有靜態(tài)代碼塊生成了。

再來看下面這段代碼:

class Student1{
    public String name;
    public String gender;
    public int age;
    private static int classroom = 113;
    public static int getClassroom(){
        return classroom;
    }

    {
        this.classroom = 114;
        System.out.println("調(diào)用了實例化代碼塊");
    }

    static{
        classroom = 115;
        System.out.println("調(diào)用了靜態(tài)代碼塊,一般用來初始化成員變量");
    }

    public Student1(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        System.out.println("構(gòu)造函數(shù)生成了");
    }
}
public class Two {
    public static void main(String[] args) {
        Student1 student = new Student1("zhangsan","男",5);
        System.out.println(student.getClassroom());
    }
}

靜態(tài)代碼塊只會執(zhí)行一次,實例代碼塊和構(gòu)造代碼塊執(zhí)行次數(shù)和定義的對象個數(shù)相同。

即:

注意事項

靜態(tài)代碼塊不管生成多少個對象,其只會執(zhí)行一次

靜態(tài)成員變量是類的屬性,因此是在JVM加載類時開辟空間并初始化的

如果一個類中包含多個靜態(tài)代碼塊,在編譯代碼時,編譯器會按照定義的先后次序依次執(zhí)行(合并)

實例代碼塊只有在創(chuàng)建對象時才會執(zhí)行

四、對象的打印

在開發(fā)中,我們經(jīng)常需要打印對象信息來調(diào)試或展示,但直接打印對象會得到不理想的結(jié)果,這就需要重寫toString()方法

public class Person {
    String name;
    String gender;
    int age;
    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;

    }
    public static void main(String[] args) {
        Person person = new Person("Jim","男", 18);
        System.out.println(person);
    }
}

這段代碼打印的結(jié)果是person這個對象的地址信息

如果想要默認打印對象中的屬性該如何處理呢?答案:重寫toString方法即可。

public class Person {
    String name;
    String gender;
    int age;
    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;

    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }

    public static void main(String[] args) {
        Person person = new Person("Jim","男", 18);
        System.out.println(person);
    }
}

toString方法也可以按照之前學(xué)習(xí)的一鍵生成構(gòu)造方法的方式來快速生成

總結(jié)

?本文介紹了類和對象的四個進階知識點:?

封裝通過private隱藏數(shù)據(jù),用getter/setter控制訪問,保障數(shù)據(jù)安全和代碼可維護性。?

static 成員屬于類而非對象,適用于共享數(shù)據(jù)和工具方法,通過類名.成員訪問。?

代碼塊分為靜態(tài)代碼塊(類加載時執(zhí)行)和實例代碼塊(對象創(chuàng)建時執(zhí)行),用于初始化操作。?

對象打印需重寫toString()方法,自定義屬性輸出格式,提升調(diào)試效率。?

這些知識點是面向?qū)ο缶幊痰暮诵模莆账鼈兡軒椭憔帉懜?guī)范、高效的 Java 代碼。下一階段,我們將學(xué)習(xí)繼承和多態(tài),進一步完善面向?qū)ο蟮闹R體系。

到此這篇關(guān)于javaSE類和對象進階用法的文章就介紹到這了,更多相關(guān)javaSE類和對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java正則表達式之分組和替換方式

    Java正則表達式之分組和替換方式

    這篇文章主要介紹了Java正則表達式之分組和替換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中AIO、BIO、NIO應(yīng)用場景及區(qū)別

    Java中AIO、BIO、NIO應(yīng)用場景及區(qū)別

    本文主要介紹了Java中AIO、BIO、NIO應(yīng)用場景及區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring Boot中的 6 種API請求參數(shù)讀取方式示例詳解

    Spring Boot中的 6 種API請求參數(shù)讀取方式示例詳解

    使用Spring Boot開發(fā)API的時候,讀取請求參數(shù)是服務(wù)端編碼中最基本的一項操作,Spring Boot中也提供了多種機制來滿足不同的API設(shè)計要求,這篇文章主要介紹了Spring Boot中的 6 種API請求參數(shù)讀取方式示例詳解,需要的朋友可以參考下
    2024-05-05
  • maven中no main manifest attribute的問題解決

    maven中no main manifest attribute的問題解決

    本文主要介紹了maven中no main manifest attribute的問題解決,這個錯誤通常意味著Spring Boot應(yīng)用在啟動時遇到了問題,下面就來具體介紹一下,感興趣的可以了解一下
    2024-08-08
  • SpringBoot如何監(jiān)聽接口調(diào)用情況

    SpringBoot如何監(jiān)聽接口調(diào)用情況

    本文檔介紹在SpringBoot項目中監(jiān)聽每個接口的調(diào)用次數(shù)、傳入?yún)?shù)、返回參數(shù)、響應(yīng)耗時的多種實現(xiàn)方案,具有一定的參考價值,感興趣的可以了解一下
    2026-05-05
  • JAVA?biginteger類bigdecimal類的使用示例學(xué)習(xí)

    JAVA?biginteger類bigdecimal類的使用示例學(xué)習(xí)

    這篇文章主要為大家介紹了JAVA?biginteger類bigdecimal類的使用示例學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • IntelliJ IDEA(2019)之mybatis反向生成的實現(xiàn)

    IntelliJ IDEA(2019)之mybatis反向生成的實現(xiàn)

    這篇文章主要介紹了IntelliJ IDEA(2019)之mybatis反向生成,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java高性能實體類轉(zhuǎn)換工具MapStruct的使用教程詳解

    Java高性能實體類轉(zhuǎn)換工具MapStruct的使用教程詳解

    MapStruct 是一個代碼生成器,它基于約定優(yōu)于配置的方法,極大地簡化了 Java bean 類型之間的映射實現(xiàn),本文主要介紹了MapStruct的具體使用以及如何進行實體類轉(zhuǎn)換,感興趣的可以了解下
    2024-03-03
  • Java實現(xiàn)克魯斯卡爾算法的示例代碼

    Java實現(xiàn)克魯斯卡爾算法的示例代碼

    克魯斯卡爾算法是一種用于求解最小生成樹問題的貪心算法。這篇文章主要為大家詳細介紹了Java實現(xiàn)克魯斯卡爾算法的方法,需要的可以參考一下
    2023-04-04
  • Java中byte輸出write到文件的實現(xiàn)方法講解

    Java中byte輸出write到文件的實現(xiàn)方法講解

    今天小編就為大家分享一篇關(guān)于Java中byte輸出write到文件的實現(xiàn)方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論

阜宁县| 宁蒗| 梓潼县| 广饶县| 东源县| 鹤山市| 泰和县| 安国市| 临潭县| 隆昌县| 深水埗区| 铜山县| 海口市| 上杭县| 秦安县| 闸北区| 东平县| 西青区| 宁都县| 新建县| 汾阳市| 稷山县| 南郑县| 阳原县| 亳州市| 深泽县| 鱼台县| 本溪| 合肥市| 财经| 昭觉县| 南陵县| 江门市| 道真| 徐汇区| 佛坪县| 林州市| 山阳县| 贵港市| 五河县| 郸城县|