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

Java從入門到精通之旅類和對(duì)象全面解析

 更新時(shí)間:2025年04月23日 09:47:54   作者:想不明白的過度思考者  
Java是一門純面向?qū)ο蟮恼Z言(OOP),在面向?qū)ο蟮氖澜缋?一切皆為對(duì)象,面向?qū)ο笫墙鉀Q問題的一種思想,主要依靠對(duì)象之間的交互完成一件事情,這篇文章主要介紹了Java從入門到精通之旅類和對(duì)象全面解析,需要的朋友可以參考下

一、面向?qū)ο蟪跆?/h2>

1.1 什么是面向?qū)ο螅?/h3>

Java是一門純面向?qū)ο蟮恼Z言(OOP),在面向?qū)ο蟮氖澜缋?,一切皆為?duì)象。面向?qū)ο笫墙鉀Q問題的一種思想,主要依靠對(duì)象之間的交互完成一件事情。

面向?qū)ο蟮奶攸c(diǎn)

  • 更符合人類對(duì)事物的認(rèn)知方式
  • 對(duì)大型程序的設(shè)計(jì)、擴(kuò)展和維護(hù)更加友好
  • 通過對(duì)象之間的交互來完成任務(wù)

1.2 面向?qū)ο?vs 面向過程

讓我們通過洗衣服的例子來理解兩者的區(qū)別:

傳統(tǒng)洗衣服(面向過程)

現(xiàn)代洗衣服(面向?qū)ο?

對(duì)象:人、衣服、洗衣粉、洗衣機(jī)交互過程:人將衣服放進(jìn)洗衣機(jī)、倒入洗衣粉、啟動(dòng)洗衣機(jī)
面向?qū)ο蠓绞讲魂P(guān)注具體洗衣過程,而是通過對(duì)象間的交互完成任務(wù)。

二、類的定義和使用

2.1 什么是類?

類是用來對(duì)一個(gè)實(shí)體(對(duì)象)進(jìn)行描述的,主要描述該實(shí)體具有哪些屬性(外觀尺寸等)和哪些功能(用來做什么)。

例如,洗衣機(jī)類的屬性和功能:

  • 屬性:品牌、型號(hào)、重量、尺寸、顏色等
  • 功能:洗衣、烘干、定時(shí)等

2.2 類的定義格式

// 創(chuàng)建類
class ClassName {
    field;  // 字段(屬性)或成員變量
    method; // 行為或成員方法
}

洗衣機(jī)類示例

class WashMachine {
    // 成員變量(屬性)
    public String brand;   // 品牌
    public String type;    // 型號(hào)
    public double weight;  // 重量
    public double length;  // 長(zhǎng)
    public double width;   // 寬
    public double height;  // 高
    public String color;   // 顏色
    // 成員方法(功能)
    public void washClothes() {  // 洗衣服
        System.out.println("洗衣功能");
    }
    public void dryClothes() {   // 脫水
        System.out.println("脫水功能");
    }
    public void setTime() {      // 定時(shí)
        System.out.println("定時(shí)功能");
    }
}

2.3 小練習(xí)

2.3.1 定義狗類

class PetDog {
   // 屬性
   public String name;   // 名字
   public String color;  // 顏色
   // 行為
   public void bark() {
       System.out.println(name + ":旺旺旺~~");
   }
   public void wag() {
       System.out.println(name + ":搖尾巴~~");
   }
}

2.3.2 定義學(xué)生類

public class Student {
   // 屬性
   public String name;
   public String gender;
   public short age;
   public double score;
   // 方法
   public void DoClass() {
       System.out.println("按時(shí)上課,不要遲到,如果請(qǐng)假,及時(shí)去補(bǔ)");
   }
   public void DoHomework() {
       System.out.println("教務(wù)系統(tǒng),完成作業(yè),一旦拖沓,神仙難救");
   }
   public void Exam() {
       System.out.println("考試目的,了解學(xué)情,人人必考,暴露問題");
   }
}

注意事項(xiàng)

  • 一般一個(gè)文件只定義一個(gè)類
  • main方法所在的類通常用public修飾
  • public修飾的類必須與文件名相同
  • 不要輕易修改public類的名稱

三、類的實(shí)例化

3.1 什么是實(shí)例化?

用類類型創(chuàng)建對(duì)象的過程稱為類的實(shí)例化,在Java中使用new關(guān)鍵字。

實(shí)例化示例

class PetDog {
    public String name;
    public String color;
    public void bark() {
        System.out.println(name + ":旺旺旺~~~");
    }
    public void wag() {
        System.out.println(name + ":搖尾巴~~~");
    }
}
public class Main {
    public static void main(String[] args) {
        // 通過new實(shí)例化對(duì)象
        PetDog dogH = new PetDog();
        dogH.name = "小黃";
        dogH.color = "黑黃";
        dogH.bark();
        dogH.wag();
        PetDog dogS = new PetDog();
        dogS.name = "賽虎";
        dogS.color = "棕色";
        dogS.bark();
        dogS.wag();
    }
}

輸出結(jié)果

小黃: 旺旺旺~~~
小黃: 搖尾巴~~~
賽虎: 旺旺旺~~~
賽虎: 搖尾巴~~~

3.2 類和對(duì)象的關(guān)系

  • 類是一個(gè)模型,用于描述實(shí)體
  • 類是一種自定義類型,可以用來定義變量
  • 一個(gè)類可以實(shí)例化多個(gè)對(duì)象
  • 類比:類就像建筑設(shè)計(jì)圖,對(duì)象是根據(jù)設(shè)計(jì)圖建造的實(shí)際房子

四、this引用

4.1 為什么需要this引用?

考慮以下日期類:

public class Date {
    public int year;
    public int month;
    public int day;
    public void setDay(int year, int month, int day) {
        year = year;    // 這里會(huì)有歧義
        month = month;
        day = day;
    }
}

問題:

  • 形參名與成員變量名相同時(shí),賦值語句有歧義
  • 多個(gè)對(duì)象調(diào)用同一方法時(shí),方法如何知道操作的是哪個(gè)對(duì)象的數(shù)據(jù)?

4.2 this引用解決方案

public class Date {
    public int year;
    public int month;
    public int day;
    public void setDay(int year, int month, int day) {
        this.year = year;   // 使用this明確指向當(dāng)前對(duì)象的成員變量
        this.month = month;
        this.day = day;
    }
    public void printDate() {
        System.out.println(this.year + "/" + this.month + "/" + this.day);
    }
}

4.3 this引用特性

  • this的類型:對(duì)應(yīng)類類型引用
  • this只能在成員方法中使用
  • 在成員方法中,this只能引用當(dāng)前對(duì)象
  • this是成員方法的第一個(gè)隱藏參數(shù),編譯器自動(dòng)傳遞

五、對(duì)象的構(gòu)造及初始化

5.1 構(gòu)造方法

構(gòu)造方法是一種特殊成員方法,用于初始化對(duì)象。

public class Date {
    public int year;
    public int month;
    public int day;
    // 構(gòu)造方法
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("Date(int,int,int)方法被調(diào)用了");
    }
    public void printDate() {
        System.out.println(year + "-" + month + "-" + day);
    }
    public static void main(String[] args) {
        Date d = new Date(2021, 6, 9);  // 自動(dòng)調(diào)用構(gòu)造方法
        d.printDate();  // 輸出:2021-6-9
    }
}

5.2 構(gòu)造方法特性

  • 名字必須與類名相同
  • 沒有返回值類型,void也不行
  • 創(chuàng)建對(duì)象時(shí)由編譯器自動(dòng)調(diào)用,生命周期內(nèi)只調(diào)用一次
  • 可以重載
  • 用戶未定義時(shí),編譯器生成默認(rèn)無參構(gòu)造方法
  • 構(gòu)造方法中可通過this調(diào)用其他構(gòu)造方法
  • 通常使用public修飾

5.3 默認(rèn)初始化和就地初始化

默認(rèn)初始化:成員變量未顯式初始化時(shí),Java會(huì)賦予默認(rèn)值

數(shù)據(jù)類型默認(rèn)值
byte0
short0
int0
long0L
float0.0f
double0.0
char‘\u0000’
booleanfalse
referencenull

就地初始化:聲明成員變量時(shí)直接賦初值

public class Date {
    public int year = 1900;
    public int month = 1;
    public int day = 1;
    // ...
}

六、封裝

6.1 封裝概念

封裝是面向?qū)ο笕筇匦灾唬瑢?shù)據(jù)和操作數(shù)據(jù)的方法有機(jī)結(jié)合,隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開接口。

舉個(gè)栗子??:
計(jì)算機(jī)廠商在出廠時(shí),在外部套上殼子,將內(nèi)部實(shí)現(xiàn)細(xì)節(jié)隱藏起來,僅僅對(duì)外提供開關(guān)機(jī)、鼠標(biāo)以及鍵盤插孔等,讓用戶可以與計(jì)算機(jī)進(jìn)行交互即可。

6.2 訪問限定符

Java提供四種訪問權(quán)限:

封裝示例

public class Computer {
    private String cpu;     // private: 僅本類可訪問
    private String memory;  // private: 僅本類可訪問
    public String screen;   // public: 任何類可訪問
    String brand;          // default: 同包可訪問
    public Computer(String brand, String cpu, String memory, String screen) {
        this.brand = brand;
        this.cpu = cpu;
        this.memory = memory;
        this.screen = screen;
    }
    public void Boot() {
        System.out.println("開機(jī)---");
    }
}

6.3 包(package)

包是對(duì)類的封裝機(jī)制,用于更好地組織類。(可以理解為目錄)

包的導(dǎo)入

import java.util.Date;  // 導(dǎo)入特定類
import java.util.*;     // 導(dǎo)入整個(gè)包(不推薦)

自定義包

package com.example.demo;
public class Test {
    // 類內(nèi)容
}

七、static成員

7.1 static修飾成員變量

static修飾的成員變量屬于類,所有對(duì)象共享。

public class Student {
    private String name;
    private static String classRoom = "Bit306";  // 靜態(tài)成員變量
    public static String getClassRoom() {
        return classRoom;
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(Student.getClassRoom());  // 輸出:Bit306
    }
}

7.2 static修飾成員方法

靜態(tài)方法屬于類,不依賴于特定對(duì)象實(shí)例。

public class Student {
    private static String classRoom = "Bit306";
    public static String getClassRoom() {
        return classRoom;
    }
}

靜態(tài)方法特性

  • 屬于類方法
  • 推薦通過類名調(diào)用
  • 不能訪問非靜態(tài)成員變量
  • 不能調(diào)用非靜態(tài)方法
  • 無法重寫

八、代碼塊

8.1 普通代碼塊

定義在方法中的代碼塊。

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

8.2 構(gòu)造代碼塊(實(shí)例代碼塊)

定義在類中,用于初始化實(shí)例成員變量。

public class Student {
    private String name;
    private int age;
    // 實(shí)例代碼塊
    {
        this.name = "bit";
        this.age = 12;
        System.out.println("實(shí)例代碼塊執(zhí)行");
    }
    public Student() {
        System.out.println("構(gòu)造方法執(zhí)行");
    }
}

8.3 靜態(tài)代碼塊

使用static定義,用于初始化靜態(tài)成員變量。

public class Student {
    private static String classRoom;
    // 靜態(tài)代碼塊
    static {
        classRoom = "bit306";
        System.out.println("靜態(tài)代碼塊執(zhí)行");
    }
}

注意事項(xiàng)

  • 靜態(tài)代碼塊只會(huì)執(zhí)行一次
  • 多個(gè)靜態(tài)代碼塊按定義順序執(zhí)行
  • 實(shí)例代碼塊每次創(chuàng)建對(duì)象都會(huì)執(zhí)行

九、內(nèi)部類

9.1 實(shí)例內(nèi)部類

未用static修飾的成員內(nèi)部類。

public class OutClass {
    private int a = 10;
    // 實(shí)例內(nèi)部類
    class InnerClass {
        public void print() {
            System.out.println(a);  // 可以直接訪問外部類成員
        }
    }
}

9.2 靜態(tài)內(nèi)部類

用static修飾的成員內(nèi)部類。

public class OutClass {
    private static int b = 20;
    // 靜態(tài)內(nèi)部類
    static class InnerClass {
        public void print() {
            System.out.println(b);  // 只能訪問外部類靜態(tài)成員
        }
    }
}

9.3 局部?jī)?nèi)部類

定義在方法中的內(nèi)部類。

public class OutClass {
    public void method() {
        class InnerClass {
            public void print() {
                System.out.println("局部?jī)?nèi)部類");
            }
        }
        InnerClass inner = new InnerClass();
        inner.print();
    }
}

9.4 匿名內(nèi)部類

沒有名字的內(nèi)部類,通常用于實(shí)現(xiàn)接口或抽象類。

interface Message {
    void send(String msg);
}
public class Test {
    public static void main(String[] args) {
        Message m = new Message() {  // 匿名內(nèi)部類
            @Override
            public void send(String msg) {
                System.out.println("發(fā)送消息:" + msg);
            }
        };
        m.send("Hello");
    }
}

十、對(duì)象的打印

默認(rèn)打印對(duì)象時(shí)輸出的是對(duì)象的哈希碼,可以通過重寫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 p = new Person("張三", "男", 25);
        System.out.println(p);  // 輸出:Person[name=張三, gender=男, age=25]
    }
}

總結(jié)

本文全面介紹了Java中類和對(duì)象的各個(gè)方面,包括:

  • 類的定義和實(shí)例化
  • 成員變量和成員方法
  • this引用的使用
  • 構(gòu)造方法和對(duì)象初始化
  • 封裝特性和訪問控制
  • static成員的使用
  • 各種代碼塊的作用
  • 內(nèi)部類的分類和使用
  • 對(duì)象的打印和toString()方法

到此這篇關(guān)于Java從入門到精通之旅類和對(duì)象全面解析的文章就介紹到這了,更多相關(guān)java類和對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 5種必會(huì)的Java異步調(diào)用轉(zhuǎn)同步的方法你會(huì)幾種

    5種必會(huì)的Java異步調(diào)用轉(zhuǎn)同步的方法你會(huì)幾種

    這篇文章主要介紹了5種必會(huì)的Java異步調(diào)用轉(zhuǎn)同步的方法你會(huì)幾種,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 一文解析Java如何連接FTP服務(wù)器

    一文解析Java如何連接FTP服務(wù)器

    Java 提供了強(qiáng)大的工具和庫來實(shí)現(xiàn)與 FTP 服務(wù)器的連接、文件傳輸、目錄操作等功能,本文將詳細(xì)介紹如何使用 Java 連接 FTP 服務(wù)器,需要的可以參考下
    2024-12-12
  • Comet框架Plushlet使用問題解決方案

    Comet框架Plushlet使用問題解決方案

    這篇文章主要介紹了Comet框架Plushlet使用問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Spring AOP里的靜態(tài)代理和動(dòng)態(tài)代理用法詳解

    Spring AOP里的靜態(tài)代理和動(dòng)態(tài)代理用法詳解

    這篇文章主要介紹了 Spring AOP里的靜態(tài)代理和動(dòng)態(tài)代理用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot整合JPA的實(shí)例代碼

    SpringBoot整合JPA的實(shí)例代碼

    本篇文章主要介紹了SpringBoot整合JPA的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 簡(jiǎn)單介紹Java垃圾回收機(jī)制

    簡(jiǎn)單介紹Java垃圾回收機(jī)制

    這篇文章主要介紹了簡(jiǎn)單介紹Java垃圾回收機(jī)制,涉及一些相關(guān)的Java術(shù)語,Hotspot虛擬機(jī),jvm體系結(jié)構(gòu)等內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java實(shí)現(xiàn)冒泡排序簡(jiǎn)單示例

    Java實(shí)現(xiàn)冒泡排序簡(jiǎn)單示例

    冒泡排序(Bubble Sort)是一種簡(jiǎn)單的排序算法,它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)冒泡排序的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 一文詳解Spring如何控制Bean注入的順序

    一文詳解Spring如何控制Bean注入的順序

    這篇文章主要為大家詳細(xì)介紹Spring如何控制Bean注入的順序,其中續(xù)注意的是在Bean上加@Order(xxx)是無法控制bean注入的順序的,需要的可以參考一下
    2022-06-06
  • SpringBoot+ThreadLocal+AbstractRoutingDataSource實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源

    SpringBoot+ThreadLocal+AbstractRoutingDataSource實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源

    最近在做業(yè)務(wù)需求時(shí),需要從不同的數(shù)據(jù)庫中獲取數(shù)據(jù)然后寫入到當(dāng)前數(shù)據(jù)庫中,因此涉及到切換數(shù)據(jù)源問題,所以本文采用ThreadLocal+AbstractRoutingDataSource來模擬實(shí)現(xiàn)dynamic-datasource-spring-boot-starter中線程數(shù)據(jù)源切換,需要的朋友可以參考下
    2023-08-08
  • Mybatis-Plus通用枚舉的使用詳解

    Mybatis-Plus通用枚舉的使用詳解

    這篇文章主要介紹了Mybatis-Plus通用枚舉的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論