面向對象進階第三天

来源:https://www.cnblogs.com/yaomagician/archive/2023/02/26/17153044.html
-Advertisement-
Play Games

面向對象進階第三天 內部類 內部類是什麼? 類的5大成分(成員變數、成員方法、構造器、代碼塊、內部類)之一 類中的類 使用場景 當一個事物的內部,還有一個部分需要一個完整的結構進行描述時。 內部類有幾種 1、靜態內部類 是什麼?有static修飾,屬於外部類本身。 特點:只是位置在類裡面。類有的成分 ...


面向對象進階第三天

內部類

內部類是什麼?

  • 類的5大成分(成員變數、成員方法、構造器、代碼塊、內部類)之一

  • 類中的類

使用場景

  • 當一個事物的內部,還有一個部分需要一個完整的結構進行描述時。

內部類有幾種

  • 1、靜態內部類

    • 是什麼?有static修飾,屬於外部類本身。

    • 特點:只是位置在類裡面。類有的成分它都有。

    • 創建對象:

      外部類.內部類名  對象名  = new 外部類名.內部類構造器;
    • 拓展

      1、靜態內部類可以直接訪問外部類的靜態成員嗎? 可以的

      2、靜態內部類中是否可以直接訪問外部類的實例成員? 不可以的

  • 2、成員內部類(實例內部類)

    • 是什麼?

      • 無static修飾,屬於外部類的對象的。

    • 特點:JDK 16中類有的成分,它都有。

    • 創建對象 :

      外部類.內部類  對象名   =  new 外部類構造器.new  內部類構造器;
    • 拓展

      1、成員內部類中是否可以直接訪問外部類的靜態成員? 可以

      2、成員內部類的實例方法中是否可以直接訪問外部類的實例成員? 可以

  • 3、局部內部類

    • 定義在方法,代碼塊,構造器中,執行代碼處的類。雞肋語法!

  • 4、匿名內部類(重點)

    • 使用匿名內部類的好處:

      1. 方便構建子類對象,最終目的:簡化代碼

    • 格式:

      new  類名|介面|抽象類(){      
      方法重寫;      
      }
    • 特點:

      1. 匿名內部類是一個沒有名字的局部內部類,本身也是一個所謂的子類對象。

      2. 匿名內部類產生的對象類型,相當於是當前new的那個的類型的子類類型。

枚舉

是什麼? 是一種特殊類型。 枚舉的特征:

  1. 枚舉類都是繼承了枚舉類型:java.lang.Enum

  2. 枚舉都是最終類,不可以被繼承。

  3. 構造器都是私有的,枚舉對外不能創建對象。

  4. 枚舉類的第一行預設都是羅列枚舉對象的名稱的。

  5. 枚舉類相當於是多例模式。

泛型

認識泛型

  • 定義類、介面、方法時,同時聲明瞭一個或者多個類型變數(如:<E>) ,稱為泛型類、泛型介面,泛型方法、它們統稱為泛型。

  • 作用

    • 泛型提供了在編譯階段約束所能操作的數據類型,並自動進行檢查的能力!這樣可以避免強制類型轉換,及其可能出現的異常。

泛型類

  • 定義類的同時定義了泛型的類就是泛型類

  • 泛型類的格式

    修飾符 class 類名<類型變數,類型變數,…> { 
    }
  • 作用

    • 在編譯階段可以指定能操作的數據的類型

  • 原理

    • 把出現泛型變數的地方全部替換成傳輸的真實數據類型。

泛型介面

  • 使用了泛型定義的介面就是泛型介面

  • 格式

    修飾符 interface 介面名稱<泛型變數> {
    }
  • 作用

    • 泛型介面可以讓實現類選擇當前功能需要操作的數據類型

  • 原理

    • 實現類可以在實現介面的時候傳入自己操作的數據類型,這樣重寫的方法都將是針對於該類型的操作。

泛型方法

  • 定義方法時同時定義了泛型的方法就是泛型方法

  • 格式

    修飾符 <類型變數,類型變數,…>  返回值類型 方法名(形參列表)  { 
    }
  • 作用

    • 方法中可以使用泛型接收一切實際類型的參數,方法更具備通用性。

  • 原理

    • 把出現泛型變數的地方全部替換成傳輸的真實數據類型。

泛型通配符、上下限

  • ? 可以在“使用泛型”的時候代表一切類型。

  • E T K V 是在定義泛型的時候使用的。

  • 泛型的上下限

    • ? extends Car: ?必須是Car或者其子類 泛型上限

    • ? super Car : ?必須是Car或者其父類 泛型下限

泛型的註意事項:擦除問題、基本數據類型問題

  • 泛型是工作在編譯階段的,一旦程式編譯成class文件,class文件中就不存在泛型了,這就是泛型擦除。

  • 泛型不支持基本數據類型,只能支持對象類型(引用數據類型)。

java.lang包下常用API

API概述

API全稱是應用程式編程介面,是Java寫好的程式,程式員可以直接調用。

Object類:toString方法

Object是祖宗類,它裡面的方法,一切子類對象都可以使用。

public String toString()

  • 預設是返回當前對象的地址信息。

Student s = new Student("張三",'女', 23);

  • System.out.println(s.toString());

    • 返回對象地址

  • System.out.println(s);

    • 直接輸出對象名,預設是調用toString方法的

toString存在的意義:

  • 預設返回對象的地址其實是沒有意義的

  • 真實存在的意義是被子類重寫,以便返回子類對象的內容。

Object類:equals方法

public boolean equals(Object o )

  • 預設是比較2個對象的地址是否一樣,返回true 或者false

equals存在的意義

  • 預設比較對象的地址其實是沒有意義的,因為== 號可以更簡單的完成

  • 存在的的真實意義是被子類重寫,以便比較對象的內容。

Object類:clone方法

protected Object clone()

當某個對象調用這個方法時,這個方法會複製一個一模一樣的新對象返回。

分類:

  1. 淺克隆:拷貝出的新對象,與原對象中的數據一模一樣(引用類型拷貝的只是地址)

  2. 深克隆:

    對象中基本類型的數據直接拷貝。

    對象中的字元串數據拷貝的還是地址。

    對象中還包含的其他對象,不會拷貝地址,會創建新對象。

Objects

Objects是一個工具類,提供了更安全的方式比較2個對象。

Student s = null;

  • s.equals(s2); 空指針異常

  • Objects.equals(s, s2); 返回false

Objects常見方法:

方法名說明
public static boolean equals(Object a, Object b) 比較兩個對象的,底層會先進行非空判斷,從而可以避免空指針異常。再進行equals比較
public static boolean isNull(Object obj) 判斷變數是否為null ,為null返回true ,反之返回false

包裝類

其實就是8種基本數據類型對應的引用類型。

作用:實現一切皆對象

包裝類的分類:

基本數據類型引用數據類型
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

包裝類其實可以隨便用的:int integer

  • 自動裝箱

    • 基本類型的數據可以賦值其給包裝類

  • 自動拆箱

    • 包裝類的數據賦值給基本數據類型

包裝類的特有功能:

1、基本類型變成字元串

// 1、調用包裝類繼承自Object的toString方法
String rs1 = it6.toString(); // "23"
System.out.println(rs1 + 1); // 231
// 2、調用靜態方法: public static String toString(int i)
String rs2 = Integer.toString(it6);// "23"
System.out.println(rs2 + 1);
​
// 3、直接加 “”
String rs3 = it6 + ""; // "23"
System.out.println(rs3 + 1);

 

2、把字元串變成基本數據類型(重點

String age = "23";
// int ageInt = Integer.parseInt(age);
int ageInt = Integer.valueOf(age);
System.out.println(ageInt + 1);
​
String price = "98.5";
// double priceDb = Double.parseDouble(price);
double priceDb = Double.valueOf(price);
System.out.println(priceDb + 0.5);

 

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本章將繼續和大家分享Vue的一些基礎知識。話不多說,下麵我們直接上代碼: 本文內容大部分摘自Vue的官網:https://v2.cn.vuejs.org/v2/guide/ 首先我們先來看一下Demo的目錄結構,如下所示: 一、偵聽器 <!DOCTYPE html> <html lang="en"> ...
  • 在ES6中新增了一個很重要的特性: class(類)。作為一個在2015年就出了的特性, 相信很多小伙伴對class並不陌生。但是在日常開發中使用class的頻率感覺並不高(可能僅限於作者),感覺對class總有種一知半解的感覺。今天就帶著小伙伴們一起,好好剖析剖析這個特性。 1.什麼是class ...
  • ———————————————— 版權聲明:本文為CSDN博主「LW0512」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/LW0512/article/details/120287699 ...
  • 常用API API概述 API全稱是應用程式編程介面,是Java寫好的程式,程式員可以直接調用。 Object類:toString方法 Object是祖宗類,它裡面的方法,一切子類對象都可以使用。 public String toString() 預設是返回當前對象的地址信息。 Student s ...
  • 跨平臺開發框架是客戶端領域的經典課題,幾乎從操作系統誕生開始就是我們軟體從業者們的思考命題。為了促進 Flutter 在 4 個端的成熟,企業微信研發團隊也和 Google 團隊針對電腦端 Flutter 穩定版的落地做了多輪技術溝通。終於在近期的版本實現同一個功能跨平臺 4 端同步上線。企業微信每... ...
  • 1. 緩衝I/O 1.1. 對於文件和套接字,壓縮和字元串編碼的操作,必須適當地對I/O進行緩衝 1.1.1. 兩個流操作的是位元組塊(來自緩衝流)而不是一系列的單位元組(來自ObjectOutputStream),它們會運行得更好 1.2. InputStream.read() 1.3. Output ...
  • 前言 ​ 經常在網上看到一些博客,介紹高併發。由於我們在實際開發過程遇到高併發的場景非常少,一直覺得很高大上, 那我們通過CPU,操作系統,和JDK 等方面揭開高併發的''神秘面紗''。 1: 什麼時候發生併發 ​ 在電腦中,CPU執行程式指令的。那我們看下下麵這個圖 思考: 當兩個程式在不同的C ...
  • Mybatis配置文件&SQL映射文件 1.配置文件-mybatis-config.xml 1.1基本說明 mybatis的核心配置文件(mybatis-config.xml),它的作用如配置jdbc連接信息,註冊mapper等,我們需要對這個配置文件有詳細的瞭解。 文檔地址:mybatis – M ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...