黑馬程序員 Java面向對象——包(package)

面向對象

(package)

日後我們寫的class類成千上萬,爲了我們的Java文件不重疊,就有了包的概念。包的出現就算我們有倆個Java文件也不用怕了。

所謂的包,呵呵、你別想的是多麼牛逼,其實就是個文件夾。

只是我們將文件夾用一個關鍵字(package)定義在Java類中的頂端,Java有一個命令就會幫我們生成文件夾,我們只要找文件夾,就可以找到我們的Java類了。

Java是面向對象的語言嘛!這也是面向對象的思想,我們不需要去找我們的類,我們只要找到包,就可以找到我們想要找的類了。呵呵

(package)

1、對類文件進行分類管理

2、給類提供多層命名空間

3、寫在程序的第一行

4、類名的全稱是 包名.類名

5、包也是一種封裝形式

6、Javac -d . 類名.Java    

//Javac -d 目錄(包要生成在的目錄) 文件名

7、包的定義是用一個關鍵字package包名(Java中定義包是的規則是字母都是小寫)

代碼示例:

package pack;

class Demo{

public static void main(String[] args){

System.out.println("package");

}

}

import 關鍵字:

當我們用到某個包中的類的時候,就用一個關鍵字import把包的所有的類給導進行。

我們不用每次都寫包名了,方便了操作,簡化了書寫。

注意:

1.爲了簡化類名的書寫,使用一個關鍵字 import

1).import pack.A.Test;--------//導入包中的某一個類——不包含子包

2).import pack.A.*;------------//導入子包(A)所有類——不包含根目錄包的類

3).import pack.*;--------------//導入根目錄包的所以類——不包含根(目錄)包中的子包的類

友情提示:建議不要寫通配符, (*)需要用到包中的那個類,就導入包中的哪個類

2.當導入的不同包中有同名類時,必須指定包名,才知道是哪個包中的類嘛。

3.爲了不至於包名重複,可以使用 url 來完成定義url 是唯一的。

(url 是什麼?就是域名嘛!別跟我說不懂,看你訪問我博客的地址欄,你懂的。)

例子:(包名注意是全部小寫哦)

(1)、package com.tuozou.demo

(2)、package cn.tuozou.test

Jar包   Java的壓縮包(Java爲了我們的包過多而哪找,就搞了個壓縮包)

1、方便項目的攜帶

2、方便於使用,只要在 classpath 設置 Jar 路徑即可

3、數據庫驅動,ssh 框架等都是以 jar 包體現的

包與包之間訪問

     1、需要設置classpath告訴Jvm去哪裏找指定的package
     2、有了包,範圍變大,一個包中的類要被訪問,必須要有足夠大的權限,所以被訪問的類被public修飾
     3、類共有後,被訪問的成員也要共有才可以被訪問
     4、包與包之間進行訪問,被訪問的包中的類以及類中的成員,需要public修飾
     5、不同包中的子類還可以直接訪問父類中被protected(被保護的)權限修飾的成員
     6、包與包之間可以使用的權限只有兩種,public protected
     7、
                            public    protected    default    private
     同一個類中        ok              ok            ok            ok
     同一個包中        ok              ok            ok
     子類                   ok              ok
     不同包中            ok

總結:

包與包之間進行訪問,被訪問的包中的類以及類中的成員,需要public修飾。

不同包中的子類還可以直接訪問父類中被protected權限修飾的成員。

包與包之間可以使用的權限只有兩種,public  protected。

在線查看Java API點我就好

Object

Object所有類的根類。

Object:是不斷抽取而來,具備着所有對象都具備的共性內容。

常用的共性內容:

equals方法:

指示其它某個對象是否與此對象“相等”。

equals和==的區別:

經常被簡單的理解爲equals方法用來比較兩個對象中的數據是否相同,

而==比較運算符用來比較兩個基本數據類型的數值是否相同或者二個對象的內存地址值是否相同。

這樣的理解無可厚非,但還要透過簡單看看本質,纔會更清晰。

那equals方法還有什麼用呢?

雖然每個對象都有自己的內存地址,但是每個對象也有自己的一些特有的特徵。

比如學生對象有自己的姓名和年齡,希望根據姓名和年齡的相同來判斷學生對象的數據內容是否相同。

這時使用Object類的equals就不能滿足需求了,

就需要通過覆蓋equals的方式,建立學生對象比較相同的具體內容。

public boolean equals(Object obj){

if(姓名和年齡相同)

return true;

return false;

}

Student s1 = new Student("黑馬程序員",20);

Student s2 = new Student("黑馬程序員",20);

System.out.println(s1==s2);

 /*結果是false,比較兩個對象的地址值,因爲都是new出現的實體,所以內存地址值也就不同。*/

System.out.println(s1.equals(s2));//結果是true,比較的是對象的數據中的具體內容。

所以,在用Java的類描述對象的時候,如果要判斷該對象是否相同時,

通常都會覆蓋equals方法,建立根據該對象特徵進行比較相同的依據。

這也就是大家常聽到的"equals是用來比較對象內容"的原因。

Java中很多對象都覆蓋了equals方法,建立該對象特有的比較相同的方式。

比如String,Integer,Boolean等。

hashCode方法:

返回該對象的哈希碼值。

根據對象的不同,可以覆蓋父類的hashCode方法。

如Person類中

public int hashCode(){

return age;

}

內存地址值返回的是人對象的年齡。

getClass方法:

返回對象的運行時類。簡單的說就是獲取當前對象所屬的字節碼文件對象。

toString方法:

返回該對象的字符串表示。

Java默認的toString方法:

public String toString(){

return getClass().getName() +"@" +Integer.toHexString(hashCode());

}

保留該功能,建立自己特有內容,覆蓋該方法。

覆蓋Person類中的toString方法:

public String toString(){

return"Person :"+age;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章