最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

帶你了解Java的類(lèi)和對(duì)象

 更新時(shí)間:2021年09月12日 11:13:41   作者:夢(mèng)想成為光頭強(qiáng)!  
下面小編就為大家?guī)?lái)一篇全面理解Java類(lèi)和對(duì)象。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

五丶封裝

(1)包的概念與創(chuàng)建

1>概念

在我們的電腦上有許多的文件,我們?yōu)榱朔奖愎芾恚笾陆o它們進(jìn)行了不同的命名。

在這里插入圖片描述

然后在不同的文件夾下面再給它們進(jìn)行了具體的劃分,比如我自己的音樂(lè)里面對(duì)于音樂(lè)人的劃分:許嵩,周杰倫,薛之謙…

在這里插入圖片描述

然后每個(gè)人對(duì)應(yīng)的文件夾下面就是他們自己的歌。

在JAVA中,對(duì)于項(xiàng)目的管理也是一樣的道理。

JAVA中我們有不同的項(xiàng)目,就像我們對(duì)于自己電腦文件的大致分類(lèi):音樂(lè)項(xiàng)目,視頻項(xiàng)目,桌面項(xiàng)目等。

在不同的項(xiàng)目底下,我們又有了不同的劃分----包,就相當(dāng)于我們?cè)谝魳?lè)大文件夾下對(duì)歌手進(jìn)行了劃分:周杰倫包,許嵩包,薛之謙包。

在不同的包下,我們又有了區(qū)分—類(lèi),比如許嵩包里:《斷橋殘雪》類(lèi),《多余的妹妹》類(lèi),《天龍八部之宿敵》類(lèi)等等。

具體圖示如下:

在這里插入圖片描述

那么,接著給出具體定義:

多個(gè)類(lèi)收集在一起成為一組,稱(chēng)為軟件包

2>創(chuàng)建

那么接下來(lái)我們創(chuàng)建一個(gè)包,打開(kāi)IDEA,右鍵src --> new --> package

在這里插入圖片描述

然后對(duì)于接下來(lái)彈出一下窗口,我們給這個(gè)包命名為T(mén)estPackage

在這里插入圖片描述

(2)包的使用–導(dǎo)入包

平常的代碼中,我們能遇到很多要求,比如要求我們求一個(gè)數(shù)的平方根,比如我們要得到一個(gè)時(shí)間,或者我們需要用到數(shù)組的排序等等等等,但是像這些東西JAVA中已經(jīng)有了具體的類(lèi)來(lái)幫助我們實(shí)現(xiàn)。

這里我舉一個(gè)例子,比如我們要得到一個(gè)時(shí)間,可以使用 java.util.Date 導(dǎo)入 java.util 這個(gè)包中的Date類(lèi),但是怎么導(dǎo)入呢?這里提供三種方法;

1.對(duì)象創(chuàng)建之初進(jìn)行導(dǎo)入

public class TestPackage {
    public static void main(String[] args) {
        java.util.Date d1 = new java.util.Date();//看這里
        System.out.println(d1.getTime());
    }

優(yōu)點(diǎn):精確程度很高,很大程度避免沖突。

缺點(diǎn):無(wú)疑很大程度的增加了代碼的復(fù)雜程度,所以不推薦

2.在代碼開(kāi)頭使用import java.util.*(意味著使用util這個(gè)包下所有的類(lèi))

import java.util.*;  //看這里
public class TestPackage {
    public static void main(String[] args) {
        Date d1 = new Date();
        System.out.println(d1.getTime());
    }
}

優(yōu)點(diǎn):使用及其方便

缺點(diǎn):可能會(huì)產(chǎn)生沖突,如下圖:

在這里插入圖片描述

此時(shí)無(wú)法分辨這個(gè)Date類(lèi)是util下的類(lèi)還是sql下的類(lèi),那么怎樣解決呢?也很簡(jiǎn)單,將這個(gè)*換成指定的類(lèi)就好,并且支持此類(lèi)情況導(dǎo)入

在這里插入圖片描述

3.靜態(tài)導(dǎo)入(前面加static)

import static java.lang.Math.*;
public class TestPackage {
    public static void main(String[] args) {
        System.out.println(sqrt(100));
        System.out.println(max(1,2));
    }
}

(3)封裝定義–權(quán)限控制訪(fǎng)問(wèn)

有了前面兩個(gè)的基礎(chǔ),那么就有一個(gè)問(wèn)題我們需要考慮一下,如果一個(gè)類(lèi)提供了模板,那么能在另外一個(gè)類(lèi)中創(chuàng)建對(duì)應(yīng)的對(duì)象

并且訪(fǎng)問(wèn)這個(gè)類(lèi)的一些屬性嘛?我們?cè)鯓又浪懿荒軇?chuàng)建并且訪(fǎng)問(wèn)呢?先給第二個(gè)答案的模板:

在這里插入圖片描述

看一個(gè)類(lèi)以及它的屬性和方法能不能被其他類(lèi)訪(fǎng)問(wèn)或者使用那么就要看它的權(quán)限修飾符了,如果修飾符給的權(quán)限允許,那么當(dāng)然可以訪(fǎng)問(wèn)。我們?cè)谕粋€(gè)包下創(chuàng)建Student類(lèi)和Stedent的測(cè)試類(lèi),進(jìn)行對(duì)應(yīng)的測(cè)試:

在這里插入圖片描述

在這里插入圖片描述

可以看到,當(dāng)權(quán)限修飾符不同時(shí),能否被訪(fǎng)問(wèn)的情況也截然不同,其中private修飾符修飾的變量不僅不能被IDEA提示出來(lái),如果強(qiáng)行打印還會(huì)報(bào)錯(cuò)。 這就是一種封裝!

在這里插入圖片描述

下面給出封裝的具體定義:

一個(gè)對(duì)象隱藏自己的部分屬性和實(shí)現(xiàn)細(xì)節(jié),對(duì)于內(nèi)部數(shù)據(jù)的訪(fǎng)問(wèn)只能通過(guò)對(duì)外公開(kāi)的接口,通過(guò)這種方式,對(duì)象對(duì)于內(nèi)部數(shù)據(jù)提供了不同級(jí)別的保護(hù),以防止部分無(wú)關(guān)意外的改變或錯(cuò)誤的使用了內(nèi)部數(shù)據(jù)。

(4)補(bǔ)充些常用的包(小拓展)

  1. java.lang:系統(tǒng)常用基礎(chǔ)類(lèi)(String、Object),此包從JDK1.1后自動(dòng)導(dǎo)入。
  2. java.lang.reflect: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ā)包。

六丶關(guān)于static成員

在Student這個(gè)學(xué)生類(lèi)中,我們創(chuàng)建每一個(gè)學(xué)生對(duì)象都有自己對(duì)應(yīng)的姓名,年齡,性別。

在這里插入圖片描述

當(dāng)這些學(xué)生在一個(gè)同一個(gè)教室上課。如果我們想知道這些學(xué)生在哪里上課,那么我們能怎么辦呢?

創(chuàng)建一個(gè)對(duì)應(yīng)的成員變量然后進(jìn)行打印嘛?好像不行,因?yàn)檫@個(gè)教室是公有的,不是私有的,不屬于某個(gè)具體的對(duì)象,而是屬于整體。在Student類(lèi)中定義的成員變量,每個(gè)對(duì)象中都會(huì)包含一份(稱(chēng)之為實(shí)例變量),因?yàn)樾枰褂眠@些信息來(lái)描述具體的學(xué)生。而現(xiàn)在要表示學(xué)生上課的教室,這個(gè)教室的屬性并不需要每個(gè)學(xué)生對(duì)象中都存儲(chǔ)一份,而是需要讓所有的學(xué)生來(lái)共享。

那么接下來(lái),就給出static關(guān)鍵字的解釋:

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

(1)修飾成員變量–區(qū)分成員丶靜態(tài)成員變量

Java的類(lèi)中,不被static修飾的叫成員變量,被static修飾的叫做靜態(tài)成員變量。

1> 成員變量因?yàn)槭菍?duì)于類(lèi)的對(duì)象的描述,是類(lèi)的對(duì)象實(shí)例化的體現(xiàn),所以成員變量也叫實(shí)例變量。而靜態(tài)成員變量是對(duì)于類(lèi)的描述,它是屬于類(lèi)的,所以靜態(tài)成員變量也叫類(lèi)變量

2> 成員變量與對(duì)象共存亡,他隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象被回收而銷(xiāo)毀。類(lèi)變量與類(lèi)共存亡,隨著類(lèi)的加載而存在,隨著類(lèi)的消失而消失。

3>成員變量存儲(chǔ)在堆當(dāng)中,而靜態(tài)變量比較特殊,在JDK8之前,永久代沒(méi)有取消的時(shí)候它是存在于方法區(qū)當(dāng)中,但是JDK8以后(含)它也存在于堆當(dāng)中

4>成員變量屬于對(duì)象,所以成員變量只能被對(duì)象調(diào)用。而類(lèi)變量屬于類(lèi),但是對(duì)象也屬于類(lèi),所以類(lèi)變量既可以被類(lèi)名調(diào)用也可以被對(duì)象調(diào)用。

接著看下面的代碼,證明一下上面關(guān)于類(lèi)變量的結(jié)論:

在這里插入圖片描述

注意看紅字?。。。?!

(2)修飾成員方法–調(diào)用私有變量

Java的類(lèi)中,不被static修飾的叫成員方法,被static修飾的叫做靜態(tài)成員方法。
.

1>成員方法是對(duì)象功能的體現(xiàn),它是屬于對(duì)象的,所以只能被對(duì)象調(diào)用,而靜態(tài)成員變量是屬于類(lèi)的,是類(lèi)的功能體現(xiàn),所以它可以被類(lèi)名調(diào)用,也可以被對(duì)象調(diào)用

2> 靜態(tài)方法沒(méi)有隱藏的this引用參數(shù)(重點(diǎn))

針對(duì)這個(gè)第二點(diǎn),我們需要進(jìn)行詳細(xì)的探討。

首先是對(duì)于非靜態(tài)方法調(diào)用靜態(tài)方法,最平常的調(diào)用:

在這里插入圖片描述

再接著對(duì)于靜態(tài)方法對(duì)于非靜態(tài)方法的調(diào)用:

在這里插入圖片描述

因?yàn)殪o態(tài)方法沒(méi)有隱藏的this引用參數(shù),所以不可以在沒(méi)有創(chuàng)建對(duì)象的前提下,訪(fǎng)問(wèn)任何非靜態(tài)成員變量或者方法。

(3)訪(fǎng)問(wèn)私有屬性

當(dāng)一個(gè)類(lèi)的成員方法設(shè)置為私有的時(shí)候,那么外面的類(lèi)如果想要進(jìn)行訪(fǎng)問(wèn)要怎樣訪(fǎng)問(wèn)呢?具體措施如下:

在這里插入圖片描述

在這里插入圖片描述

我們?cè)黾右粋€(gè)成員方法,然后通過(guò)這個(gè)成員方法來(lái)訪(fǎng)問(wèn)私有成員變量。那么怎樣訪(fǎng)問(wèn)這個(gè)成員方法呢?只有以這個(gè)類(lèi)為模板創(chuàng)建一個(gè)對(duì)象,然后通過(guò)對(duì)象訪(fǎng)問(wèn)。

那如果我就想用類(lèi)名直接點(diǎn)呢?該怎么做?那我們應(yīng)該加static

在這里插入圖片描述

在這里插入圖片描述

問(wèn)題一:為什么要給私有成員變量加static?

回答:因?yàn)槌蓡T變量只能通過(guò)對(duì)象來(lái)訪(fǎng)問(wèn),他是屬于對(duì)象的,所以如果不給私有成員變量加static的話(huà),那么創(chuàng)建對(duì)象這一關(guān)無(wú)論如何過(guò)不去

問(wèn)題二:為什么要給那個(gè)訪(fǎng)問(wèn)私有變量的成員方法加static

回答:因?yàn)槟莻€(gè)只有對(duì)象才能訪(fǎng)問(wèn)成員方法,而如果是靜態(tài)方法的話(huà),那么就可以直接通過(guò)類(lèi)名來(lái)調(diào)用了。

七丶代碼塊

PS:在正式寫(xiě)下代碼塊之前,有一個(gè)需要注意的點(diǎn)想在這里給各位讀者們提一下,對(duì)于靜態(tài)成員變量的初始化,除了一開(kāi)始的就地初始化,我們還能怎樣初始化呢?沒(méi)錯(cuò),就是通過(guò)代碼塊。

那么,何為代碼塊呢?
所謂代碼塊,就是使用 { } 定義的一段代碼,根據(jù)其定義的位置以及關(guān)鍵字,又可以分為一下四種。

(1)普通代碼塊

定義在方法中的代碼塊

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

//運(yùn)行結(jié)果:
a = 10;
a = 100;

(2)構(gòu)造代碼塊

在類(lèi)當(dāng)中的代碼塊,不加修飾符,一般用于初始化成員變量,也叫實(shí)例代碼塊

問(wèn):既然這個(gè)構(gòu)造代碼塊也是來(lái)初始化成員變量的,那么他和構(gòu)造器有什么關(guān)聯(lián)呢?
我們繼續(xù)往下走。

在這里插入圖片描述

可以發(fā)現(xiàn),構(gòu)造代碼塊優(yōu)先于構(gòu)造方法執(zhí)行,接下來(lái)我們打開(kāi)它的class文件。

在這里插入圖片描述

可以看到,編譯器在編譯完成的時(shí)候,把構(gòu)造代碼塊中的內(nèi)容放在了構(gòu)造方法的第一條語(yǔ)句之前。

(3)靜態(tài)代碼塊

使用static定義的代碼塊稱(chēng)為靜態(tài)代碼塊。一般用于初始化靜態(tài)成員變量。

在這里插入圖片描述

在這里插入圖片描述

從這里,我們可以看出

(1)靜態(tài)代碼塊在類(lèi)加載的時(shí)候才會(huì)執(zhí)行一次,與生成對(duì)象數(shù)無(wú)關(guān)
(2)實(shí)例代碼塊只有在創(chuàng)建對(duì)象時(shí)才會(huì)執(zhí)行。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 如何利用java實(shí)現(xiàn)生成PDF文件

    如何利用java實(shí)現(xiàn)生成PDF文件

    前段時(shí)間因?yàn)橄嚓P(guān)業(yè)務(wù)需求需要后臺(tái)生成pdf文件,下面這篇文章主要給大家介紹了關(guān)于如何利用java實(shí)現(xiàn)生成PDF文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Netty分布式ByteBuf的分類(lèi)方式源碼解析

    Netty分布式ByteBuf的分類(lèi)方式源碼解析

    這篇文章主要為大家介紹了Netty分布式ByteBuf的分類(lèi)方式源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java 最優(yōu)二叉樹(shù)的哈夫曼算法的簡(jiǎn)單實(shí)現(xiàn)

    Java 最優(yōu)二叉樹(shù)的哈夫曼算法的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了Java 最優(yōu)二叉樹(shù)的哈夫曼算法的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • springboot 啟動(dòng)如何排除某些bean的注入

    springboot 啟動(dòng)如何排除某些bean的注入

    這篇文章主要介紹了springboot 啟動(dòng)如何排除某些bean的注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java IO流之字符流的使用詳解

    Java IO流之字符流的使用詳解

    這篇文章主要圍繞Java中的字符流進(jìn)行介紹,包括字符輸入流、字符輸出流以及處理流異常的幾種方式。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • ElasticSearch的安裝與基本概念

    ElasticSearch的安裝與基本概念

    這篇文章主要介紹了ElasticSearch的安裝與基本概念,提供了一個(gè)分布式多用戶(hù)能力的全文搜索引擎,Elasticsearch是用Java開(kāi)發(fā)的,需要的朋友可以參考下
    2023-04-04
  • SpringBoot?實(shí)現(xiàn)動(dòng)態(tài)添加定時(shí)任務(wù)功能

    SpringBoot?實(shí)現(xiàn)動(dòng)態(tài)添加定時(shí)任務(wù)功能

    這篇文章主要介紹了SpringBoot?動(dòng)態(tài)添加定時(shí)任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • springboot使用Logback把日志輸出到控制臺(tái)或輸出到文件

    springboot使用Logback把日志輸出到控制臺(tái)或輸出到文件

    這篇文章給大家介紹springboot項(xiàng)目使用日志工具Logback把日志不僅輸出到控制臺(tái),也可以輸出到文件的操作方法,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-10-10
  • Spring Boot項(xiàng)目中定制攔截器的方法詳解

    Spring Boot項(xiàng)目中定制攔截器的方法詳解

    這篇文章主要介紹了Spring Boot項(xiàng)目中定制攔截器的方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Spring Security 實(shí)現(xiàn)“記住我”功能及原理解析

    Spring Security 實(shí)現(xiàn)“記住我”功能及原理解析

    這篇文章主要介紹了Spring Security 實(shí)現(xiàn)“記住我”功能及原理解析,需要的朋友可以參考下
    2020-05-05

最新評(píng)論

盐池县| 夏邑县| 朝阳区| 建瓯市| 枝江市| 土默特左旗| 宁强县| 华坪县| 宜兴市| 叶城县| 蒙阴县| 扎鲁特旗| 个旧市| 海城市| 中山市| 大城县| 昌邑市| 辰溪县| 通海县| 崇明县| 永城市| 乳源| 齐河县| 德江县| 加查县| 高碑店市| 宁化县| 新宁县| 涪陵区| 三穗县| 平乡县| 古交市| 西藏| 朝阳区| 尼勒克县| 广德县| 蒙阴县| 烟台市| 海宁市| 嘉义市| 三穗县|