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

Java封裝的實現(xiàn)訪問限定符、包

 更新時間:2022年08月23日 12:02:27   作者:XIN-XIANG榮  
封裝就是將數(shù)據(jù)和操作數(shù)據(jù)的方法進(jìn)行有機結(jié)合,隱藏對象的屬性(成員變量)和實現(xiàn)細(xì)節(jié),僅對外公開接口來和對象進(jìn)行交互,下面這篇文章主要給大家介紹了關(guān)于Java封裝實現(xiàn)訪問限定符、包的相關(guān)資料

一. 封裝

封裝是面向?qū)ο蟮娜筇匦灾唬?strong>面向?qū)ο蟪绦蛉筇匦裕悍庋b、繼承、多態(tài) 。

封裝:將數(shù)據(jù)和操作數(shù)據(jù)的方法進(jìn)行有機結(jié)合,隱藏對象的屬性和實現(xiàn)細(xì)節(jié),僅對外公開接口來和對象進(jìn)行交互(簡單來說就是套殼屏蔽細(xì)節(jié))。

用生活中的實物來理解封裝,比如電腦:

img

對于電腦這樣一個復(fù)雜的設(shè)備,提供給用戶的就只是:開關(guān)機、通過鍵盤輸入,顯示器,USB插孔等,讓用戶來和計算機進(jìn)行交互,完成日常事務(wù)。

但實際上:電腦真正工作的卻是CPU、顯卡、內(nèi)存等一些硬件元件。對于計算機使用者而言,不用關(guān)心內(nèi)部核心部件,比如主板上線路是如何布局的,CPU內(nèi)部是如何設(shè)計的等,用戶只需要知道,怎么開機、怎么通過鍵盤和鼠標(biāo)與計算機進(jìn)行交互即可。因此計算機廠商在出廠時,在外部套上殼子,將內(nèi)部實現(xiàn)細(xì)節(jié)隱藏起來,僅僅對外提供開關(guān)機、鼠標(biāo)以及鍵盤插孔等,讓用戶可以與計算機進(jìn)行交互即可。

二. 訪問限定符(修飾符)

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

img

public:公開的,可以理解為一個人的外貌特征,誰都可以看得到

protected:受保護(hù)的,涉及到繼承中的知識,繼承博客中詳細(xì)介紹

default: 什么都不寫時的默認(rèn)權(quán)限,對于自己家族中(同一個包中)不是什么秘密,對于其他人來說就是隱私了

private:私有的,只有自己知道,其他人都不知道

通過下面給出的代碼示例理解封裝:

class Person {
    private String name;
    //private修飾的成員變量只能在本類中訪問
    private int age;

    String sex;
    //這里不加修飾符即為默認(rèn)權(quán)限,默認(rèn)是default權(quán)限

    public String getName() {
        return name;
    }
    //在其他類中不能直接訪問name和age,
    //但可以在本類中提供公開的(public修飾)訪問方法和外界進(jìn)行交互
    //這里就是對成員變量進(jìn)行了封裝
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("姓名:"+name+" 年齡: "+age);
    }
}

public class Test {

    public static void main(String[] args) {
        Person person = new Person();
        //person.name = "bit";//不能直接進(jìn)行訪問
        person.setName("XIN-XIANG榮");
        person.setAge(21);
        //通過提供Person類中提供的方法間接進(jìn)行訪問
        System.out.println(person.getName()+" => "+person.getAge());
    }
}

一般情況下成員變量設(shè)置為private,成員方法設(shè)置為public,通過這個例子就可以很好的理解封裝了,這里對 類 內(nèi)部的實現(xiàn)細(xì)節(jié)進(jìn)行了隱藏/封裝,對 外 只提供一些公開的方法供其他用戶進(jìn)行訪問。

【訪問限定符的使用場景】:

  • 我們希望類要盡量做到 “封裝”, 即隱藏內(nèi)部實現(xiàn)細(xì)節(jié), 只暴露出 必要 的信息給類的調(diào)用者.
  • 因此我們在使用的時候應(yīng)該盡可能的使用 比較嚴(yán)格 的訪問權(quán)限;例如如果一個方法能用 private, 就盡量不要用 public.
  • 另外, 還有一種 簡單粗暴 的做法: 將所有的字段設(shè)為 private, 將所有的方法設(shè)為 public. 不過這種方式屬于是對訪問權(quán)限的濫用, 不過最好寫代碼的時候思考該類提供的字段方法到底給 “誰” 使用(是類內(nèi)部自己用, 還是類的調(diào)用者使用, 還是子類使用)

三. 包

1. 包的概念

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

img

在Java中也引入了包,包是對類、接口等的封裝機制的體現(xiàn),是一種對類或者接口等的很好的組織方式,比如:一個包中的類不想被其他包中的類使用。包還有一個重要的作用:在同一個工程中允許存在相同名稱的類,只要處在不同的包中即可。

2. 導(dǎo)入包中的類

2.1 導(dǎo)入方法一

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

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

2.2 導(dǎo)入方法二

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

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

2.3 導(dǎo)入方法三

如果需要使用 java.util 中的其他類, 可以使用 import java.util.* ,這里可以導(dǎo)入java.util這個包中的所有類,但要注意不是一下子將所有類都導(dǎo)進(jìn)來,在代碼中用到誰就會導(dǎo)入誰。

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

但是更建議顯式的指定要導(dǎo)入的類名. 否則還是容易出現(xiàn)沖突的情況.

import java.util.*;
import java.sql.*;
public class Test1 {
    public static void main(String[] args) {
// util 和 sql 中都存在一個 Date 這樣的類, 此時就會出現(xiàn)歧義, 編譯出錯
        Date date = new Date();
        System.out.println(date.getTime());
    }
}

// 編譯出錯
//Error:(5, 9) java: 對Date的引用不明確
//java.sql 中的類 java.sql.Date 和 java.util 中的類 java.util.Date 都匹配

在這種情況下需要使用完整的類名

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

2.4 導(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);
    }
}

//對比正常的導(dǎo)入和使用
import java.lang.Math;
public class Test1 {
    public static void main(String[] args) {
        double x = 30;
        double y = 40;
        double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
        System.out.println(result);
    }
}

3. 自定義包

3.1 基本使用規(guī)則:

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

3.2 IDEA中創(chuàng)鍵自定義包

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

img

在彈出的對話框中輸入包名, 例如 com.bat.demo1 ,敲入回車即可

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

img

此時可以看到我們的磁盤上的目錄結(jié)構(gòu)已經(jīng)被 IDEA 自動創(chuàng)建出來了

同時我們也看到了, 在新創(chuàng)建的 Test.java 文件的最上方, 就出現(xiàn)了一個 package 語句

img

4. 不同包中的訪問權(quán)限控制

Computer類位于com.bat.demo1包中,TestComputer位置com.bat.demo2包中

package com.bat.demo1;

public class Computer {
    private String cpu; // cpu
    private String memory; // 內(nèi)存
    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("關(guān)機~~~");
    }

    public void SurfInternet() {
        System.out.println("上網(wǎng)~~~");
    }
}

img

注意:如果去掉Computer類之前的public修飾符,Computer類為默認(rèn)權(quán)限,只能在同一包中訪問,代碼也會編譯失敗

5. 常見的包

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

總結(jié)

到此這篇關(guān)于Java封裝實現(xiàn)訪問限定符、包的文章就介紹到這了,更多相關(guān)Java訪問限定符 包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 談?wù)剬ava中的volatile的理解

    談?wù)剬ava中的volatile的理解

    這篇文章主要介紹了對Java中的volatile的理解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Swift洗牌動畫效果的實現(xiàn)方法

    Swift洗牌動畫效果的實現(xiàn)方法

    這篇文章主要介紹了Swift洗牌動畫效果的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2016-12-12
  • springboot中不能獲取post請求參數(shù)的解決方法

    springboot中不能獲取post請求參數(shù)的解決方法

    這篇文章主要介紹了springboot中不能獲取post請求參數(shù)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Spring的懶加載機制原理和配置詳解

    Spring的懶加載機制原理和配置詳解

    這篇文章主要介紹了Spring的懶加載機制原理和配置詳解,Spring提供了懶加載機制,所謂的懶加載機制就是可以規(guī)定指定的bean不在啟動時立即創(chuàng)建,而是在后續(xù)第一次用到時才創(chuàng)建,從而減輕在啟動過程中對時間和內(nèi)存的消耗,需要的朋友可以參考下
    2023-10-10
  • SSH框架網(wǎng)上商城項目第15戰(zhàn)之線程、定時器同步首頁數(shù)據(jù)

    SSH框架網(wǎng)上商城項目第15戰(zhàn)之線程、定時器同步首頁數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項目第15戰(zhàn)之線程、定時器同步首頁數(shù)據(jù),感興趣的小伙伴們可以參考一下
    2016-06-06
  • java為什么不建議用equals判斷對象相等

    java為什么不建議用equals判斷對象相等

    本文主要介紹了java為什么不建議用equals判斷對象相等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Java運算符>、>>、>>>三者的區(qū)別

    Java運算符>、>>、>>>三者的區(qū)別

    這篇文章主要介紹了Java運算符>、>>、>>>三者的區(qū)別,做了一個簡單的對比,并用實例說明,需要的朋友可以參考下
    2014-06-06
  • Java正則表達(dá)式的語法及示例解析

    Java正則表達(dá)式的語法及示例解析

    這篇文章主要介紹了Java正則表達(dá)式的語法及示例解析,需要的朋友可以參考下
    2017-07-07
  • Java接入支付寶授權(quán)第三方登錄的完整步驟

    Java接入支付寶授權(quán)第三方登錄的完整步驟

    不管是支付寶支付,還是微信支付,還是銀聯(lián)支付等,大部分的支付流程都是相似的,這篇文章主要給大家介紹了關(guān)于Java接入支付寶授權(quán)第三方登錄的相關(guān)資料,使用支付寶的沙盒環(huán)境示例,需要的朋友可以參考下
    2021-07-07
  • 詳解RSA加密算法的原理與Java實現(xiàn)

    詳解RSA加密算法的原理與Java實現(xiàn)

    這篇文章主要和大家分享非對稱加密中的一種算法,那就是 RSA 加密算法。本文介紹了RSA算法的原理與Java實現(xiàn),感興趣的小伙伴可以嘗試一下
    2022-10-10

最新評論