欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javaSE類(lèi)和對(duì)象進(jìn)階用法舉例詳解

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

前言

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

一、封裝

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

1.訪問(wèn)限定符

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

在涉及包之前,先用private和publlic來(lái)幫助大家理解一下訪問(wèn)限定符的使用。

例:

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);/*報(bào)錯(cuò),在Test2類(lèi)中
        調(diào)用Student類(lèi)中的成員變量name,但是name
        被private限定符修飾,所以沒(méi)法直接使用*/

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




}

然而,如果想借助getName和setName來(lái)改變name的值過(guò)于麻煩還需要再寫(xiě)兩個(gè)成員方法,所以java提供了一種一鍵生成方法的簡(jiǎn)便方法:

只需要按照?qǐng)D中所示方法可以直接生成方法。

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

2.包

2.1包的概念

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

2.2導(dǎo)入包

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

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

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

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

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

import java.util.*;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一個(gè)毫秒級(jí)別的時(shí)間戳
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)入的方式寫(xiě)起來(lái)更方便一些.
// 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.在文件的最上方加上一個(gè) package 語(yǔ)句指定該代碼在哪個(gè)包中.

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

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

4.如果一個(gè)類(lèi)沒(méi)有 package 語(yǔ)句, 則該類(lèi)被放到一個(gè)默認(rèn)包中

操作步驟

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

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

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

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

2.4常見(jiàn)的包

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

二、static成員

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

1.static修飾成員變量

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

  1. 不屬于某個(gè)具體的對(duì)象,是類(lèi)的屬性,所有對(duì)象共享的,不存儲(chǔ)在某個(gè)對(duì)象的空間中
  2. 既可以通過(guò)對(duì)象訪問(wèn),也可以通過(guò)類(lèi)名訪問(wèn),但一般更推薦使用類(lèi)名訪問(wèn)
  3. 類(lèi)變量存儲(chǔ)在方法區(qū)當(dāng)中
  4. 生命周期伴隨類(lèi)的一生(即:隨類(lèi)的加載而創(chuàng)建,隨類(lèi)的卸載而銷(xiāo)毀)
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)成員變量可以直接通過(guò)類(lèi)名訪問(wèn)也可以通過(guò)對(duì)象訪問(wèn):但是classRoom是三個(gè)對(duì)象共享的
下面這個(gè)例子詳細(xì)說(shuō)明共享性:

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);
    }
}

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

因?yàn)閏lassroom不依賴(lài)于對(duì)象而存在,依賴(lài)于類(lèi)而存在。

2.static修飾成員方法

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

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

三、代碼塊

1.代碼塊概念以及分類(lèi)

使用 {} 定義的一段代碼稱(chēng)為代碼塊。根據(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)代碼塊實(shí)例代碼塊

如何定義:

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

    static{
        classroom = 115;
        System.out.println("調(diào)用了靜態(tài)代碼塊,一般用來(lá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)代碼塊隨類(lè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)用了實(shí)例化代碼塊");
    }

    static{
        classroom = 115;
        System.out.println("調(diào)用了靜態(tài)代碼塊,一般用來(lá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)代碼塊生成了。

再來(lá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)用了實(shí)例化代碼塊");
    }

    static{
        classroom = 115;
        System.out.println("調(diào)用了靜態(tài)代碼塊,一般用來(lá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)代碼塊只會(huì)執(zhí)行一次,實(shí)例代碼塊和構(gòu)造代碼塊執(zhí)行次數(shù)和定義的對(duì)象個(gè)數(shù)相同。

即:

注意事項(xiàng)

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

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

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

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

四、對(duì)象的打印

在開(kāi)發(fā)中,我們經(jīng)常需要打印對(duì)象信息來(lái)調(diào)試或展示,但直接打印對(duì)象會(huì)得到不理想的結(jié)果,這就需要重寫(xiě)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這個(gè)對(duì)象的地址信息

如果想要默認(rèn)打印對(duì)象中的屬性該如何處理呢?答案:重寫(xiě)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)造方法的方式來(lái)快速生成

總結(jié)

?本文介紹了類(lèi)和對(duì)象的四個(gè)進(jìn)階知識(shí)點(diǎn):?

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

static 成員屬于類(lèi)而非對(duì)象,適用于共享數(shù)據(jù)和工具方法,通過(guò)類(lèi)名.成員訪問(wèn)。?

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

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

這些知識(shí)點(diǎn)是面向?qū)ο缶幊痰暮诵?,掌握它們能幫助你編?xiě)更規(guī)范、高效的 Java 代碼。下一階段,我們將學(xué)習(xí)繼承和多態(tài),進(jìn)一步完善面向?qū)ο蟮闹R(shí)體系。

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

相關(guān)文章

  • 如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點(diǎn)

    如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點(diǎn)

    本文介紹了JSON Pointer是字符串表達(dá)式,可以非常方便解析復(fù)雜JSON節(jié)點(diǎn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • IDEA查看所有的斷點(diǎn)(Breakpoints)并關(guān)閉的方式

    IDEA查看所有的斷點(diǎn)(Breakpoints)并關(guān)閉的方式

    我們?cè)谑褂肐DEA開(kāi)發(fā)Java應(yīng)用時(shí),基本上都需要進(jìn)行打斷點(diǎn)的操作,這方便我們排查BUG,也方便我們查看設(shè)計(jì)的是否正確,不過(guò)有時(shí)候,我們不希望進(jìn)入斷點(diǎn),所以我們需要快速關(guān)閉所有斷點(diǎn),故本文給大家介紹了IDEA查看所有的斷點(diǎn)(Breakpoints)并關(guān)閉的方式
    2024-10-10
  • Java中的集合工具類(lèi)Collections詳解

    Java中的集合工具類(lèi)Collections詳解

    這篇文章主要介紹了Java中的集合工具類(lèi)Collections詳解,java.utils.Collections是集合工具類(lèi),用來(lái)對(duì)集合進(jìn)行操作,不是Collection集合的根接口,這個(gè)要區(qū)分開(kāi)來(lái),需要的朋友可以參考下
    2024-01-01
  • 詳解springboot項(xiàng)目帶Tomcat和不帶Tomcat的兩種打包方式

    詳解springboot項(xiàng)目帶Tomcat和不帶Tomcat的兩種打包方式

    這篇文章主要介紹了詳解springboot項(xiàng)目帶Tomcat和不帶Tomcat的兩種打包方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java虛擬機(jī)啟動(dòng)過(guò)程探索

    Java虛擬機(jī)啟動(dòng)過(guò)程探索

    當(dāng)我們?cè)诰帉?xiě)Java應(yīng)用的時(shí)候,很少會(huì)注意Java程序是如何被運(yùn)行的,如何被操作系統(tǒng)管理和調(diào)度的,帶著好奇心,探索一下Java虛擬機(jī)啟動(dòng)過(guò)程
    2022-05-05
  • JavaWeb實(shí)現(xiàn)表單提交的示例詳解

    JavaWeb實(shí)現(xiàn)表單提交的示例詳解

    這篇文章主要介紹了如何利用JavaWeb實(shí)現(xiàn)表單提交功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaWeb有一定幫助,感興趣的可以了解一下
    2022-03-03
  • Mybatis中SqlSession下的四大對(duì)象之執(zhí)行器(executor)

    Mybatis中SqlSession下的四大對(duì)象之執(zhí)行器(executor)

    mybatis中sqlsession下的四大對(duì)象是指:executor, statementHandler,parameterHandler,resultHandler對(duì)象。這篇文章主要介紹了Mybatis中SqlSession下的四大對(duì)象之執(zhí)行器(executor),需要的朋友可以參考下
    2019-04-04
  • Java多線程Thread類(lèi)的使用詳解

    Java多線程Thread類(lèi)的使用詳解

    這篇文章主要介紹了Java多線程Thread類(lèi)的使用及注意事項(xiàng),在java標(biāo)準(zhǔn)庫(kù)中提供了一個(gè)Thread類(lèi)來(lái)表示/操作線程,Thread類(lèi)也可以視為是java標(biāo)準(zhǔn)庫(kù)提供的API
    2022-12-12
  • Springboot詳細(xì)講解RocketMQ實(shí)現(xiàn)順序消息的發(fā)送與消費(fèi)流程

    Springboot詳細(xì)講解RocketMQ實(shí)現(xiàn)順序消息的發(fā)送與消費(fèi)流程

    RocketMQ作為一款純java、分布式、隊(duì)列模型的開(kāi)源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,本篇我們了解如何實(shí)現(xiàn)順序消息的發(fā)送與消費(fèi)
    2022-06-06
  • myeclipse無(wú)法部署項(xiàng)目問(wèn)題及解決方法

    myeclipse無(wú)法部署項(xiàng)目問(wèn)題及解決方法

    最近小編遇到到棘手的問(wèn)題,myeclipse無(wú)法部署項(xiàng)目,點(diǎn)擊這個(gè)部署按鈕沒(méi)有反應(yīng)。怎么解決呢,下面小編給大家代理的myeclipse無(wú)法部署項(xiàng)目問(wèn)題及解決方法 ,感興趣的朋友一起看看吧
    2018-10-10

最新評(píng)論