【Java】面向對象程序三板斧——如何優雅設計包、封裝數據與優化代碼塊?

在這里插入圖片描述

🎁個人主頁:User_芊芊君子
🎉歡迎大家點贊👍評論📝收藏?文章
🔍系列專欄:【Java】內容概括

在這里插入圖片描述
在這里插入圖片描述
【前言】

在Java編程中,類和對象是面向對象編程的核心概念。而包(Package)、封裝(Encapsulation)以及代碼塊(Code Block)作為重要的語言特性,在組織代碼結構、保障數據安全和控制代碼執行流程等方面發揮著關鍵作用。本文將通過詳細的代碼示例和圖解,帶大家深入理解這些特性。

文章目錄:

  • 一、包(Package)——代碼的“收納盒”
    • 1.定義
    • 2.導入包中的類
    • 3.自定義包
      • 3.1 基本規則
      • 3.2 使用 IDEA 創建包過程
      • 3.3 常見的包
      • 3.4 包訪問權限
  • 二、封裝
    • 1. 什么是封裝
    • 2. 代碼演示
    • 3. 封裝的好處:
    • 4. 訪問限定符詳解
  • 三、static 關鍵字
    • 1. static 修飾成員變量
    • 2. 靜態成員變量的訪問
    • 3. static 修飾成員方法
    • 4.static 成員變量的初始化
  • 四、代碼塊
    • 1.普通代碼塊
    • 2.構造代碼塊
    • 3.靜態代碼塊

一、包(Package)——代碼的“收納盒”

1.定義

  • (Package)是Java中?個組織類的?式,?于防?類名沖突和提?代碼的可讀性。包允許將類組織在?個層次結構中,類似于?件系統中的?錄。
  • 包是對類、接?等的封裝機制的體現,是?種對類或者接?等的很好的組織?式。類似于文件夾

2.導入包中的類

Java 中已經提供了很多現成的類供我們使?,例如Date類:可以使?java.util.Date導?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導入

 java.util.Date date = new java.util.Date();

上面的寫法就比較麻煩了,我們可以直接使用import導入包

import java.util.Date;public class Test {public static void main(String[] args) {// java.util.Date date = new java.util.Date();Date date = new Date();System.out.println(date.getTime());}
}

快捷方式:輸入Date,回車即可

方法三:使用 import java.util.*導入,就可以使用java.util中的其他類

import java.util.*;public class Test {public static void main(String[] args) {// java.util.Date date = new java.util.Date();Date date = new Date();System.out.println(date.getTime());}
}

建議顯示的指定要導入的類名,否則容易出現沖突,如下圖:當有兩個包都有Date類時,編譯器就不知道該引入哪個包中的類了

在這里插入圖片描述
在這里插入圖片描述

3.自定義包

3.1 基本規則

  • 在?件的最上?加上?個 package 語句指定該代碼在哪個包中.
  • 包名需要盡量指定成唯?的名字, 通常會?公司的域名的顛倒形式(例如 com.bit.demo1 ).
  • 包名要和代碼路徑相匹配. 例如創建com.bit.demo1 的包, 那么會存在?個對應的路徑com/bit/demo1 來存儲代碼.
  • 如果?個類沒有 package 語句, 則該類被放到?個默認包中.

3.2 使用 IDEA 創建包過程

  • 在 IDEA 中先新建?個包: 右鍵 src -> 新建 -> 包
    注意:包名要小寫
    在這里插入圖片描述
  • 輸入包名
    在這里插入圖片描述
  • 出現 Package 語句
package com.bit.demo1;public class TestDame {
}

3.3 常見的包

  • java.lang:系統常?基礎類(String、Object),此包從JDK1.1后?動導?。
  • java.lang.reflect:java 反射編程包;
  • java.net:進??絡編程開發包。
  • java.sql:進?數據庫開發的?持包。
  • java.util:是java提供的?具程序包。(集合類等) ?常重要
  • java.io:I/O編程開發包。

3.4 包訪問權限

如果我們在定?個類的時候,如果沒有指定成員變量/成員?法的訪問權限,此時默認的訪問權限就是包訪問權限

package com.bit.demo1;public class Computer {private String cpu;   //cpuprivate String memory;//內存public String screen; //屏幕String brand;         //品牌   包訪問權限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("開機~~~");}public void PowerOff(){System.out.println("關機~~~");}public void SurfInternet(){System.out.println("上網~~~");}
}
package com.bit.dame2;import com.bit.demo1.Computer;import javax.swing.*;public class Tes {public static void main(String[] args) {Computer computer = new Computer("華為","英特爾","8G","三星");System.out.println(computer.brand);System.out.println(computer.screen);System.out.println(computer.cpu);System.out.println(computer.memory);}
}
  • public 修飾符

public修飾的成員在哪里都能訪問,它的權限是最大的

 public String screen; //屏幕
 System.out.println(computer.screen);
  • private 修飾符

只能在當前類中使用

  • 默認修飾符

只能在dema1包中使用

在這里插入圖片描述

二、封裝

1. 什么是封裝

  • ?向對象程序三?特性:封裝、繼承、多態。?類和對象階段,主要研究的就是封裝特性。何為封裝呢?簡單來說就是套殼屏蔽細節
  • 封裝就像是把東西放在?個盒??,并且控制誰可以打開這個盒?,以及如何使?盒??的東西。在編程中,它指的是將數據(屬性)和操作這些數據的?法(函數)包裝在?個單元(通常是類)內
  • ?如:對于電腦這樣?個復雜的設備,提供給??的就只是:開關機、通過鍵盤輸?,顯?器,USB插孔等,讓??來和計算機進?交互,完成?常事務。
  • 對于計算機使?者??,不?關?內部核?部件,?如主板上線路是如何布局的,CPU內部是如何設計的等,??只需要知道,怎么開機、怎么通過鍵盤和?標與計算機進?交互即可。因此計算機?商在出?時,在外部套上殼?,將內部實現細節隱藏起來,僅僅對外提供開關機、?標以及鍵盤插孔等,讓??可以與計算機進?交互即可。
  • 封裝:將數據和操作數據的?法進?有機結合,隱藏對象的屬性和實現細節,僅對外公開接?來和對象進?交互

2. 代碼演示

package com.bit.demo1;public class Computer {private String cpu;   //cpuprivate String memory;//內存public String screen; //屏幕String brand;         //品牌   包訪問權限public Computer(String brand,String cpu,String memory,String screen){this.brand = brand;this.cpu = cpu;this.memory = memory;this.screen = screen;}public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu = cpu;}public String getMemory() {return memory;}public void setMemory(String memory) {this.memory = memory;}public void Boot(){System.out.println("開機~~~");}public void PowerOff(){System.out.println("關機~~~");}public void SurfInternet(){System.out.println("上網~~~");}
}
package com.bit.dame2;import com.bit.demo1.Computer;import javax.swing.*;public class Tes {public static void main(String[] args) {Computer computer = new Computer("華為","英特爾","8G","三星");System.out.println(computer.getCpu());System.out.println(computer.screen);System.out.println(computer.getMemory());}
}

通過private對Computer中的成員變量進行隱藏,但是可以提供get或者set方法,讓內外進行交互(這里編譯器也可以自動生成),方法如下:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

3. 封裝的好處:

  1. 降低代碼的耦合性
    封裝可以降低對象和對象之間的耦合度,當對象內部發?變化時,只需要修改對象內部即可,不會影 響到外部程序,因為公開的接?是不會發?改變的
  2. 降低代碼的復雜性
    封裝是隱藏了對象內部的實現細節,只提供了公開的接?給外部,使?起來更加簡單
  3. 提?安全性
    封裝可以隱藏對象的具體實現細節,阻?外部程序直接訪問對象的內部狀態,從?保護數據不被意外 修改或破壞

4. 訪問限定符詳解

Java中主要通過類和訪問權限來實現封裝:類可以將數據以及封裝數據的?法結合在?起,更符合?類對事物的認知,?訪問權限?來控制?法或者字段能否直接在類外使?。Java中提供了四種訪問限定符:

? public修飾的成員變量,在所指定情況下均是可以正常訪問的
? private修飾的成員變量,只能在當前類中來使?
? default表?什么修飾符都不加,此時只能在包當中才能被訪問

三、static 關鍵字

1. static 修飾成員變量

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

創建一個Student 類,其中包含兩名學生的姓名,年齡和班級(一樣),這時就可以用static修飾班級,如下代碼:

package demo;public class Student {public String name;public int age;public static String classRoom;//靜態}
package demo;public class Test {public static void main(String[] args) {Student.classRoom = "1";Student student1 = new Student();student1.name = "lisa";student1.age  = 18;Student student2 = new Student();student2.name = "baby";student2.age = 20;System.out.println(Student.classRoom);}
}

執行結果:
在這里插入圖片描述

【靜態成員變量特性】

  1. 不屬于某個具體的對象,是類的屬性,所有對象共享的,不存儲在某個對象的空間中
  2. 既可以通過對象訪問,也可以通過類名訪問,但?般更推薦使?類名訪問
  3. 類變量存儲在?法區當中
  4. ?命周期伴隨類的??(即:隨類的加載?創建,隨類的卸載?銷毀)

2. 靜態成員變量的訪問

類名.靜態成員變量的?式進?訪問

 System.out.println(Student.classRoom);

3. static 修飾成員方法

Java中,被static修飾的成員?法稱為靜態成員?法,是類的?法,不是某個對象所特有的。靜態成員?般是通過靜態?法來訪問的。

public static String getClassRoom(){return classRoom;}
System.out.println(Student.getClassRoom());

【靜態?法特性】

  1. 不屬于某個具體的對象,是類?法
  2. 可以通過對象調?,也可以通過類名.靜態?法名(…)?式調?,更推薦使?后者
  3. 不能在靜態?法中訪問任何?靜態成員變量
  4. 靜態?法中不能調?任何?靜態?法,因為?靜態?法有this參數,在靜態?法中調?時候?法傳 遞this引?
 public  void doClass(){System.out.println("學習");}public static String getClassRoom(){doClass();}

在這里插入圖片描述

4.static 成員變量的初始化

就地初始化
在定義時直接給出初始值

pubilc class Student{private String name;private static String classRoom = "1"

四、代碼塊

使? {} 定義的?段代碼稱為代碼塊

? 普通代碼塊
? 構造塊(實例代碼塊)
? 靜態塊
? 同步代碼塊(

1.普通代碼塊

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

public static void main(String[] args) {int a = 0;System.out.println(a);}

2.構造代碼塊

定義在類中的代碼塊,也叫實例代碼塊,一般用于初始化實例成員變量

public class Student {//實例代碼塊{this.name = "lisi";this.age = 18;System.out.println("實例代碼塊執行");}
public class Test {public static void main(String[] args) {Student student1 = new Student();System.out.println(student1.name);System.out.println(student1.age);}

執行結果
在這里插入圖片描述
【執行順序】

  • 先執行實例代碼塊,再執行對應的構造方法
  • 實例成員變量與實例代碼塊,誰在前先執行誰
  • 當有靜態代碼塊時,先執行靜態代碼塊,再執行實例代碼塊

3.靜態代碼塊

使?static定義的代碼塊稱為靜態代碼塊。?般?于初始化靜態成員變量。

public class Student {//實例代碼塊{this.name = "lisi";this.age = 18;System.out.println("實例代碼塊執行");}//靜態代碼塊static {System.out.println("靜態代碼塊被執行");}public class Test {public static void main(String[] args) {Student student1 = new Student();System.out.println(student1.name);System.out.println(student1.age);}

執行結果
在這里插入圖片描述

注意事項
? 靜態代碼塊不管?成多少個對象,其只會執??次
? 靜態成員變量是類的屬性,因此是在JVM加載類時開辟空間并初始化的
? 如果?個類中包含多個靜態代碼塊,在編譯代碼時,編譯器會按照定義的先后次序依次執?(合并)
? 實例代碼塊只有在創建對象時才會執?

【總結】

  • 包管理:遵循反向域名命名,合理劃分模塊
  • 封裝設計:屬性私有,方法公開,增加數據校驗
  • 代碼塊使用:靜態代碼塊用于類級初始化,實例代碼塊簡化構造邏輯 通過掌握這些特性,開發者能夠編寫出結構清晰、安全可靠的Java程序。希望本文的示例和解析能幫助你更好地理解和應用這些核心概念!
    如果對某個知識點有疑問,歡迎在評論區留言交流! 🚀

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75944.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75944.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75944.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

玩轉Docker | 使用Docker搭建Blog微博系統

玩轉Docker | 使用Docker搭建Blog微博系統 前言一、Blog介紹項目簡介主要特點二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署Blog服務下載鏡像創建容器檢查容器狀態設置權限檢查服務端口安全設置四、訪問Blog系統訪問Blog首頁登錄Blog五、總結前言 在數字…

用Java NIO模擬HTTPS

HTTPS流程 名詞解釋: R1:隨機數1 R2:隨機數2 R3:隨機數3 publicKey:公鑰 privateKey:私鑰 要提供https服務,服務端需要安裝數字證書,在(TCP建立連接之后)TLS握手時發給客戶端,客戶端驗證證書&#x…

樹莓派_利用Ubuntu搭建gitlab

樹莓派_利用Ubuntu搭建gitlab 一、給樹莓派3A搭建基本系統 1、下載系統鏡像 https://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ 2、準備系統SD卡 二、給樹莓派設備聯網 1、串口后臺登錄 使用串口登錄后臺是最便捷的,因為前期網絡可能不好直接成功 默…

Hook_Unfinished

#include <windows.h>// 假設這兩個函數是存在的 void DoRD() {} void 改堆棧cal1() {} void 改回堆棧cal1() {}__declspec(naked) void HOOKcall() {__asm{pushadnop}__asm{popadmov eax, dword ptr [esi 8]sub eax, ecxretn} }int main() {// 第一個 Hook 操作DWORD H…

數據結構(六)——紅黑樹及模擬實現

目錄 前言 紅黑樹的概念及性質 紅黑樹的效率 紅黑樹的結構 紅黑樹的插入 變色不旋轉 單旋變色 雙旋變色 插入代碼如下所示&#xff1a; 紅黑樹的查找 紅黑樹的驗證 紅黑樹代碼如下所示&#xff1a; 小結 前言 在前面的文章我們介紹了AVL這一棵完全二叉搜索樹&…

c# 數據結構 鏈表篇 有關雙向鏈表的一切

本人能力有限,如有不足還請斧正 目錄 0.雙向鏈表的好處 1.雙向鏈表的分類 2.不帶頭節點的標準雙向鏈表 節點類:有頭有尾 鏈表類:也可以有頭有尾 也可以只有頭 增 頭插 尾插 刪 查 改 遍歷 全部代碼 3.循環雙向鏈表 節點類 鏈表類 增 頭插 尾插 刪 查 遍歷…

Numba 從零基礎到實戰:解鎖 Python 性能新境界

Numba 從零基礎到實戰&#xff1a;解鎖 Python 性能新境界 一、引言 在 Python 的世界里&#xff0c;性能一直是一個備受關注的話題。Python 以其簡潔易讀的語法和豐富的庫生態&#xff0c;深受開發者喜愛&#xff0c;但在處理一些計算密集型任務時&#xff0c;其執行速度往往…

單位門戶網站被攻擊后的安全防護策略

政府網站安全現狀與挑戰 近年來&#xff0c;隨著數字化進程的加速&#xff0c;政府門戶網站已成為政務公開和服務公眾的重要窗口。然而&#xff0c;網絡安全形勢卻日益嚴峻。國家互聯網應急中心的數據顯示&#xff0c;政府網站已成為黑客攻擊的重點目標&#xff0c;被篡改和被…

Spring Boot 項目三種打印日志的方法詳解。Logger,log,logger 解讀。

目錄 一. 打印日志的常見三種方法&#xff1f; 1.1 手動創建 Logger 對象&#xff08;基于SLF4J API&#xff09; 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口&#xff08;使用頻率較低&#xff09; 二. 常見的 Logger&#xff0c;logger&#xff0c;…

NI的LABVIEW工具安裝及卸載步驟說明

一.介紹 最近接到個轉交的項目&#xff0c;項目主要作為上位機工具開發&#xff0c;在對接下位機時&#xff0c;有用到NI的labview工具。labview軟件是由美國國家儀器&#xff08;NI&#xff09;公司研制開發的一種程序開發環境&#xff0c;主要用于汽車測試、數據采集、芯片測…

cmd 終端輸出亂碼問題 |Visual Studio 控制臺輸出中文亂碼解決

在網上下載&#xff0c;或者移植別人的代碼到自己的電腦&#xff0c;使用VS運行后&#xff0c;控制臺輸出中文可能出現亂碼。這是因為源代碼的編碼格式和控制臺的編碼格式不一致。 文章目錄 查看源代碼文件編碼格式查看輸出控制臺編碼格式修改編碼格式修改終端代碼頁 補充總結 …

A009-基于pytest的網易云自動化測試

題 目 :基于pytest的網易云自動化測試 主要內容 綜合應用所學的軟件測試理論和方法,實現網易云的功能自動化測試。 (1)自動化測試介紹; (2)自動化功能測試框架介紹; (3)設計功能測試用例 (4)書寫自動化測試腳本; (5)測試評價與結論。 任務要求 (1)能…

LVGL Video控件和Radiobtn控件詳解

LVGL Video控件和Radiobtn控件詳解 一、 Video控件詳解1. 概述2. 創建和初始化3. 基本屬性設置4. 視頻控制5. 回調函數6. 高級功能7. 注意事項 二、Radiobtn控件詳解1. 概述2. 創建和初始化3. 屬性設置4. 狀態控制5. 組管理6. 事件處理7. 樣式設置8. 注意事項 三、效果展示四、…

AbortController:讓異步操作隨時說停就停

AbortController&#xff1a;讓異步操作隨時說停就停 一、什么是 AbortController&#xff1f; AbortController 是 JavaScript 在瀏覽器和部分 Node.js 環境中提供的全局類&#xff0c;用來中止正在進行或待完成的異步操作&#xff08;如 fetch() 請求、事件監聽、可寫流、數…

機器學習 從入門到精通 day_04

1. 決策樹-分類 1.1 概念 1. 決策節點 通過條件判斷而進行分支選擇的節點。如&#xff1a;將某個樣本中的屬性值(特征值)與決策節點上的值進行比較&#xff0c;從而判斷它的流向。 2. 葉子節點 沒有子節點的節點&#xff0c;表示最終的決策結果。 3. 決策樹的…

C++ Primer (第五版)-第十三章 拷貝控制

文章目錄 概述13.1拷貝、賦值與銷毀合成拷貝構造函數拷貝初始化參數和返回值拷貝初始化的限制編譯器可以繞過拷貝構造函數拷貝運算符析構函數三/五原則使用default阻止拷貝合成的拷貝控制成員可能是刪除的 private拷貝控制拷貝控制和資源管理行為像值的類類值拷貝賦值運算符定義…

Vue el-from的el-form-item v-for循環表單如何校驗rules(一)

實際業務需求場景&#xff1a; 新增或編輯頁面&#xff08;基礎信息表單&#xff0c;一個數據列表的表單&#xff09;&#xff0c;數據列表里面的表單數是動態添加的。數據可新增、可刪除&#xff0c;在表單保存前&#xff0c;常常需要做表單必填項的校驗&#xff0c;校驗通過以…

測試100問:http和https的區別是什么?

哈嘍&#xff0c;大家好&#xff0c;我是十二&#xff0c;今天給大家分享的問題是&#xff1a;http和https的區別是什么&#xff1f; 首先我們要知道 HTTP 協議傳播的數據都是未加密的&#xff0c;也就是明文的&#xff0c;因此呢使用 http協議傳輸一些隱私信息也就非常不安全&…

YOLOv3超詳細解讀(三):源碼解析:數據處理模塊

一、概述 YOLOv3&#xff08;You Only Look Once v3&#xff09;是一種高效的目標檢測算法&#xff0c;其數據處理模塊是訓練和推理流程的核心部分。本文將深入分析Ultralytics團隊基于PyTorch實現的YOLOv3源碼中的數據處理模塊&#xff0c;重點探討數據加載、預處理和數據增強…

每日算法(雙指針算法)(Day 1)

雙指針算法 1.算法題目&#xff08;移動零&#xff09;2.講解算法原理3.編寫代碼 1.算法題目&#xff08;移動零&#xff09; 2.講解算法原理 數組劃分&#xff0c;數組分塊&#xff08;快排里面最核心的一步&#xff09;只需把0改為tmp 雙指針算法&#xff1a;利用數組下標來…