包
包的概述
其實就是檔案夾
作用:對類進行分類管理
包的劃分:
舉例:
學生的增加,删除,修改,查詢
老師的增加,删除,修改,查詢
以及以後可能出現的其他的類的增加,删除,修改,查詢
基本的劃分:按照子產品和功能分。
/*
包:
A:其實就是檔案夾
B:作用
a:把相同的類名放到不同的包中
b:對類進行分類管理
學生:增加,删除,修改,查詢
老師:增加,删除,修改,查詢
...
方案1:按照功能分
com.it18zhang..add
AddStudent
AddTeacher
com.it18zhang..delete
DeleteStudent
DeleteTeacher
com.it18zhang..update
UpdateStudent
UpdateTeacher
com.it18zhang..find
FindStudent
FindTeacher
方案2:按照子產品分
com.it18zhang..teacher
com.it18zhang..student
包的定義
package 包名;
多級包用.分開即可
注意事項:
A:package語句必須是程式的第一條可執行的代碼
B:package語句在一個java檔案中隻能有一個
C:如果沒有package,預設表示無包名
帶包的編譯和運作:
A:手動式
a:編寫一個帶包的java檔案。
b:通過javac指令編譯該java檔案。
c:手動建立包名。
d:把b步驟的class檔案放到c步驟的最底層包
e:回到和包根目錄在同一目錄的地方,然後運作
帶包運作。
B:自動式
b:javac編譯的時候帶上-d即可-d 要加空格
javac -d . HelloWorld.java
c:回到和包根目錄在同一目錄的地方,然後運作
*/
包的定義及注意事項
定義包的格式
package 包名;
多級包用.分開即可
注意事項:
package語句必須是程式的第一條可執行的代碼
package語句在一個java檔案中隻能有一個
如果沒有package,預設表示無包名
帶包的類的編譯和運作
手動式
a:javac編譯目前類檔案。
b:手動建立包對應的檔案夾。
c:把a步驟的class檔案放到b步驟的最終檔案夾下。
d:通過java指令執行。注意了:需要帶包名稱的執行
java com.it18zhang.HelloWorld
自動式
a:javac編譯的時候帶上-d即可
javac -d . HelloWorld.java
b:通過java指令執行。和手動式一樣
不同包下類之間的通路
定義兩個類:Demo,Test。
Demo
求和方法(sum)
Test
測試方法(main)
Test類,測試
導包:
格式:import 包名;
這種方式導入是到類的名稱。
注意:我們用誰就導誰。
面試題:
package,import,class有沒有順序關系?
有。
package > import > class
Package:隻能有一個
import:可以有多個
class:可以有多個,以後建議是一個
第一個問題:找不到Demo
第二個問題:程式包com.zhang不存在
第三個問題: Demo在com.zhang中不是公共的; 無法從外部程式包中對其進行通路
Demo類,求和
導包
不同包下的類之間的通路,我們發現,每次使用不同包下的類的時候,都需要加包的全路徑。比較麻煩。這個時候,java就提供了導包的功能。
導包格式
import 包名;
注意:
雖然可以最後寫*,但是不建議。
package,import,class有沒有順序關系(面試題)
權限問題

類及其組成可以用的修飾符
類:
預設,public,final,abstract
我們自己定義:public居多
成員變量:
四種權限修飾符均可,final,static
我們自己定義:private居多
構造方法:
四種權限修飾符均可,其他不可
我們自己定義:public 居多
成員方法:
四種權限修飾符均可,fianl,static,abstract
我們自己定義:public居多
修飾符:
權限修飾符:private,預設的,protected,public
狀态修飾符:static,final
抽象修飾符:abstract
權限修飾符:預設修飾符,public
狀态修飾符:final
用的最多的就是:public
用的最多的就是:private
除此以外的組合規則:
成員變量:public static final
成員方法:public static
public abstract
public final
内部類概述
把類定義在其他類的内部,這個類就被稱為内部類。
舉例:在類A中定義了一個類B,類B就是内部類。
内部類的通路特點:
内部類可以直接通路外部類的成員,包括私有。
外部類要通路内部類的成員,必須建立對象。
/*
内部類概述:
舉例:在類A中定義了一個類B,類B就是内部類。
内部的通路特點:
A:内部類可以直接通路外部類的成員,包括私有。
B:外部類要通路内部類的成員,必須建立對象。
内部類位置
按照内部類在類中定義的位置不同,可以分為如下兩種格式:
成員位置(成員内部類)
局部位置(局部内部類)
成員位置:在成員位置定義的類,被稱為成員内部類。
局部位置:在局部位置定義的類,被稱為局部内部類。
外界如何建立對象
外部類名.内部類名 對象名 = 外部類對象.内部類對象;
成員内部類:
如何直接通路内部類的成員。
外部類名.内部類名 對象名 = 外部類對象.内部類對象;
成員内部類
剛才我們講解過了,成員内部類的使用,但是一般來說,在實際開發中是不會這樣使用的。因為一般内部類就是不讓外界直接通路的。
舉例講解這個問題:Body和Heart,電腦和CPU。
成員内部的常見修飾符
private 為了保證資料的安全性
static 為了讓資料通路更友善
被靜态修飾的成員内部類隻能通路外部類的靜态成員
内部類被靜态修飾後的方法
靜态方法
非靜态方法
成員内部類的修飾符:
private 為了保證資料的安全性
static 為了友善通路資料
注意:靜态内部類通路的外部類資料必須用靜态修飾。
案例:我有一個人(人有身體,身體内有心髒。)
class Body {
private class Heart {
public void operator() {
System.out.println("心髒搭橋");
}
public void method() {
if(如果你是外科醫生) {
Heart h = new Heart();
h.operator();
按照我們剛才的講解,來使用一下
Body.Heart bh = new Body().new Heart();
bh.operator();
//加了private後,就不能被通路了,那麼,怎麼玩呢?
Body b = new Body();
b.method();
局部内部類
可以直接通路外部類的成員
可以建立内部類對象,通過對象調用内部類方法,來使用局部内部類功能
局部内部類通路局部變量的注意事項:
必須被final修飾?
為什麼呢?
因為局部變量會随着方法的調用完畢而消失,這個時候,局部對象并沒有立馬從堆記憶體中消失,還要使用那個變量。為了讓資料還能繼續被使用,就用fianl修飾,這樣,在堆記憶體裡面存儲的其實是一個常量值。通過反編譯工具可以看一下
A:可以直接通路外部類的成員
B:在局部位置,可以建立内部類對象,通過對象調用内部類方法,來使用局部内部類功能
局部内部類通路局部變量的注意事項?
A:局部内部類通路局部變量必須用final修飾
B:為什麼呢?
局部變量是随着方法的調用而調用,随着調用完畢而消失。
而堆記憶體的内容并不會立即消失。是以,我們加final修飾。
加入final修飾後,這個變量就成了常量。既然是常量。你消失了。
我在記憶體中存儲的是資料20,是以,我還是有資料在使用。
匿名内部類
就是内部類的簡化寫法。
前提:存在一個類或者接口
這裡的類可以是具體類也可以是抽象類。
格式:
new 類名或者接口名() {重寫方法;}
本質:
是一個繼承了類或者實作了接口的子類匿名對象
這裡的類可以是具體類也可以是抽象類。
new 類名或者接口名(){
重寫方法;
本質是什麼呢?
是一個繼承了該類或者實作了該接口的子類匿名對象。
匿名内部類的應用
匿名内部類在開發中的使用