一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 帶你了解Java的類和對象

帶你了解Java的類和對象

2021-12-28 13:39夢想成為光頭強! Java教程

下面小編就為大家?guī)硪黄胬斫釰ava類和對象。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

五丶封裝

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

1>概念

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

帶你了解Java的類和對象

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

帶你了解Java的類和對象

然后每個人對應的文件夾下面就是他們自己的歌。

在JAVA中,對于項目的管理也是一樣的道理。

JAVA中我們有不同的項目,就像我們對于自己電腦文件的大致分類:音樂項目,視頻項目,桌面項目等。

在不同的項目底下,我們又有了不同的劃分----包,就相當于我們在音樂大文件夾下對歌手進行了劃分:周杰倫包,許嵩包,薛之謙包。

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

具體圖示如下:

帶你了解Java的類和對象

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

多個類收集在一起成為一組,稱為軟件包

2>創(chuàng)建

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

帶你了解Java的類和對象

然后對于接下來彈出一下窗口,我們給這個包命名為TestPackage

帶你了解Java的類和對象

(2)包的使用–導入包

平常的代碼中,我們能遇到很多要求,比如要求我們求一個數的平方根,比如我們要得到一個時間,或者我們需要用到數組的排序等等等等,但是像這些東西JAVA中已經有了具體的類來幫助我們實現。

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

1.對象創(chuàng)建之初進行導入

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

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

缺點:無疑很大程度的增加了代碼的復雜程度,所以不推薦

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

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

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

缺點:可能會產生沖突,如下圖:

帶你了解Java的類和對象

此時無法分辨這個Date類是util下的類還是sql下的類,那么怎樣解決呢?也很簡單,將這個*換成指定的類就好,并且支持此類情況導入

帶你了解Java的類和對象

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

?
1
2
3
4
5
6
7
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)封裝定義–權限控制訪問

有了前面兩個的基礎,那么就有一個問題我們需要考慮一下,如果一個類提供了模板,那么能在另外一個類中創(chuàng)建對應的對象

并且訪問這個類的一些屬性嘛?我們怎樣知道它能不能創(chuàng)建并且訪問呢?先給第二個答案的模板:

帶你了解Java的類和對象

看一個類以及它的屬性和方法能不能被其他類訪問或者使用那么就要看它的權限修飾符了,如果修飾符給的權限允許,那么當然可以訪問。我們在同一個包下創(chuàng)建Student類和Stedent的測試類,進行對應的測試:

帶你了解Java的類和對象

帶你了解Java的類和對象

可以看到,當權限修飾符不同時,能否被訪問的情況也截然不同,其中private修飾符修飾的變量不僅不能被IDEA提示出來,如果強行打印還會報錯。 這就是一種封裝!

帶你了解Java的類和對象

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

一個對象隱藏自己的部分屬性和實現細節(jié),對于內部數據的訪問只能通過對外公開的接口,通過這種方式,對象對于內部數據提供了不同級別的保護,以防止部分無關意外的改變或錯誤的使用了內部數據。

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

  1. java.lang:系統(tǒng)常用基礎類(String、Object),此包從JDK1.1后自動導入。
  2. java.lang.reflect:java 反射編程包;
  3. java.net:進行網絡編程開發(fā)包。
  4. java.sql:進行數據庫開發(fā)的支持包。
  5. java.util:是java提供的工具程序包。(集合類等)
  6. 非常重要java.io:I/O編程開發(fā)包。

六丶關于static成員

在Student這個學生類中,我們創(chuàng)建每一個學生對象都有自己對應的姓名,年齡,性別。

帶你了解Java的類和對象

當這些學生在一個同一個教室上課。如果我們想知道這些學生在哪里上課,那么我們能怎么辦呢?

創(chuàng)建一個對應的成員變量然后進行打印嘛?好像不行,因為這個教室是公有的,不是私有的,不屬于某個具體的對象,而是屬于整體。在Student類中定義的成員變量,每個對象中都會包含一份(稱之為實例變量),因為需要使用這些信息來描述具體的學生。而現在要表示學生上課的教室,這個教室的屬性并不需要每個學生對象中都存儲一份,而是需要讓所有的學生來共享。

那么接下來,就給出static關鍵字的解釋:

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

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

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

1> 成員變量因為是對于類的對象的描述,是類的對象實例化的體現,所以成員變量也叫實例變量。而靜態(tài)成員變量是對于類的描述,它是屬于類的,所以靜態(tài)成員變量也叫類變量

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

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

4>成員變量屬于對象,所以成員變量只能被對象調用。而類變量屬于類,但是對象也屬于類,所以類變量既可以被類名調用也可以被對象調用。

接著看下面的代碼,證明一下上面關于類變量的結論:

帶你了解Java的類和對象

注意看紅字!!!!!

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

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

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

2> 靜態(tài)方法沒有隱藏的this引用參數(重點)

針對這個第二點,我們需要進行詳細的探討。

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

帶你了解Java的類和對象

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

帶你了解Java的類和對象

因為靜態(tài)方法沒有隱藏的this引用參數,所以不可以在沒有創(chuàng)建對象的前提下,訪問任何非靜態(tài)成員變量或者方法。

(3)訪問私有屬性

當一個類的成員方法設置為私有的時候,那么外面的類如果想要進行訪問要怎樣訪問呢?具體措施如下:

帶你了解Java的類和對象

帶你了解Java的類和對象

我們增加一個成員方法,然后通過這個成員方法來訪問私有成員變量。那么怎樣訪問這個成員方法呢?只有以這個類為模板創(chuàng)建一個對象,然后通過對象訪問。

那如果我就想用類名直接點呢?該怎么做?那我們應該加static

帶你了解Java的類和對象

帶你了解Java的類和對象

問題一:為什么要給私有成員變量加static?

回答:因為成員變量只能通過對象來訪問,他是屬于對象的,所以如果不給私有成員變量加static的話,那么創(chuàng)建對象這一關無論如何過不去

問題二:為什么要給那個訪問私有變量的成員方法加static

回答:因為那個只有對象才能訪問成員方法,而如果是靜態(tài)方法的話,那么就可以直接通過類名來調用了。

七丶代碼塊

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

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

(1)普通代碼塊

定義在方法中的代碼塊

?
1
2
3
4
5
6
7
8
9
10
public class Persion {
    public static void main(String[] args) {
        {
            int a = 10;
            System.out.println(a);
        }
        int a = 100;
        System.out.println(a);
    }
}

//運行結果:
a = 10;
a = 100;

(2)構造代碼塊

在類當中的代碼塊,不加修飾符,一般用于初始化成員變量,也叫實例代碼塊

問:既然這個構造代碼塊也是來初始化成員變量的,那么他和構造器有什么關聯呢?
我們繼續(xù)往下走。

帶你了解Java的類和對象

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

帶你了解Java的類和對象

可以看到,編譯器在編譯完成的時候,把構造代碼塊中的內容放在了構造方法的第一條語句之前。

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

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

帶你了解Java的類和對象

帶你了解Java的類和對象

從這里,我們可以看出

(1)靜態(tài)代碼塊在類加載的時候才會執(zhí)行一次,與生成對象數無關
(2)實例代碼塊只有在創(chuàng)建對象時才會執(zhí)行。

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!原文鏈接:https://blog.csdn.net/weixin_53860901/article/details/120231030

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 免费看黄色片网站 | seetube18日本第一次 | 草莓视频在线免费观看 | 97精品国产高清在线看入口 | 美女脱了内裤打开腿让人桶网站o | 农村妇女野外牲交一级毛片 | 男人在女人下面狂躁 | 久久精视频 | 亚洲国产AV无码综合在线 | 楚乔传第二部免费观看全集完整版 | 国产90后美女露脸在线观看 | 513热点| 国产精品高清一区二区三区不卡 | 免费在线公开视频 | 天堂成人在线视频 | 嫩交18xxxx | 高清一区二区 | 精品一区二区三区在线成人 | 亚洲精品91大神在线观看 | 久久久久久久99精品免费观看 | 国产免费好大好硬视频 | 好舒服好爽再快点视频 | 波多野结衣xxxx性精品 | 97色吧| 国产馆在线观看免费的 | 四虎影音在线 | 特级毛片免费观看视频 | 日本乱中文字幕系列在线观看 | 变态np虐高h | 99久久综合精品免费 | 好大好爽好涨太深了小喜 | 热99这里有精品综合久久 | 美女被狂揉下部羞羞动漫 | 亚洲久操 | 日韩性大片免费 | 天堂成人在线观看 | 亚洲午夜精品久久久久久成年 | 国产一区二区三区四区波多野结衣 | 国产精品亚洲片在线va | 小鸟酱视频在线观看 | 201天天爱天天做 |