物件與引用,static關鍵字,程式碼塊,包,訪問許可權修飾符
物件與引用
Car car= new Car();
通常把這條語句的動作稱之為建立一個物件,其實,它包含了三個動作。
- 右邊的“new Car()”,是以Car類為模板,呼叫Car類的建構函式,在堆空間裡建立一個Car類物件。
- 左邊的“Car car”建立了一個Car類引用變數。所謂Car類的引用,就是以後可以用來指向Car物件的物件引用。
- ”=”操作符使物件引用指向剛建立的那個Car物件。
我們可以把這條語句拆成兩部分:
Car car;
car= new Car();
這樣寫,就比較清楚了,有兩個實體:一是物件引用變數,二是物件本身。
new Car(); 這個語句在堆空間裡建立了實體,儘管它們也是確確實實存在的實體,但是,我們看不見,也摸不著。
物件沒有名字,也就沒法直接訪問它。我們需要通過物件引用來間接訪問物件。
物件好比是一隻很大的氣球,但是我們抓不住它。引用變數是一根繩,可以用來系汽球。
Car car1; (1)建立一根繩子,一根還沒有繫上任何一個汽球的繩;
Car car2;(2)就又做了一根繩,還沒繫上汽球,
car1 = new Car();(3)給car1 繫上氣球;
car2 = car1 ;(4)這裡,發生了複製行為。要說明的是,物件本身並沒有被複制,被複制的只是物件引用。
結果是,car2也指向了car1所指向的物件。兩根繩系的是同一只汽球。
基本型別和引用型別的區別
值傳遞與引用傳遞
Java中進行方法呼叫中傳遞引數時,引數傳遞有兩種:
-
值傳遞:(形式引數型別是基本資料型別):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。
-
引用傳遞:(形式引數型別是引用資料型別引數):也稱為傳地址。方法呼叫時,實際引數是物件,這時實際引數與形式引數指向同一個地址,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式引數的改變將會影響實際引數。
基本型別傳遞的是該資料值本身。引用型別傳遞的是對物件的引用,而不是物件本身 。
static關鍵字
static被稱為靜態,可以用來修飾類的屬性,方法,程式碼塊,內部類。
隨著類的載入而載入
優先於物件存在
修飾的成員,被所有物件所共享
可不建立物件,直接被類呼叫
static屬性
靜態屬性是類的所有物件共享的,即不管建立了多少個物件,靜態屬性在記憶體中只有一個。
static方法可以使用物件呼叫,也可以直接用類名呼叫,建議用類名直接呼叫
在static方法內部只能訪問類的static屬性,不能訪問類的非static屬性。
程式碼塊在類中宣告,類似一個沒有名稱的方法體(程式碼塊),程式碼分例項塊和靜態塊
例項塊:每次建立物件時自動呼叫
{
//任何符合語法的Java程式碼
}
靜態塊:類載入時自動呼叫,僅一次,與是否建立物件無關。
static {
//任何符合語法的Java程式碼
}
包
包的概念:
物理上是資料夾
管理類
包的作用:
避免類重名
按照不同功能管理類
控制訪問許可權
包(package)的命名規範:
在包名中,可以使用.號來區分包的級別;包名一般情況下是小寫
第一級 指該專案的型別,如com,org,gov等,
第二級 指專案所開發或者執行的公司名稱,如:oracle,sun,huawei等
第三級 指專案的名稱,如:bcms,oa,erp,cms等
第四級 指專案模組的名稱,如:bean,action,exception等
Java語言有四個許可權訪問修飾符,許可權從大到小依次為:
1)public :公共許可權 修飾類、屬性、方法。可以被任意類訪問
2)protected:受保護的許可權 修飾屬性、方法。
可以被同包類訪問,如果不是同包類,必須是該類的子類才可以訪問。
3)default:同包許可權 修飾類、屬性、方法。只能被同包的類訪問
4)private:私有許可權 修飾屬性、方法。 只能在本類中訪問
示例:
package day1;
public class Demo4 {
public int num1=1;//公共許可權 可以被任意類訪問
protected int num2=2;//受保護的許可權 可以被同包類訪問,如果不是同包類,必須是該類的子類才可以訪問。
private int num3=3;//私有許可權 只能在本類中訪問
int num4=4;//同包許可權 只能被同包的類訪問
public void num(){
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
}
public static void main(String[] args) {
new Demo4().num();
}
}
package day1;//與Demo4在同一個包
public class Demo5 {
public void d5(){
Demo4 demo5=new Demo4();
System.out.println(demo5.num1);//公共許可權 可以被任意類訪問
System.out.println(demo5.num2);//受保護的許可權 可以被同包類訪問,如果不是同包類,必須是該類的子類才可以訪問。
//num3 被私有許可權修飾 只能在本類中訪問
System.out.println(demo5.num4);//同包許可權 只能被同包的類訪問
}
public static void main(String[] args) {
new Demo5().d5();
}
}
package day2;//與Demo4在不同的包中
import day1.Demo4;
public class Demo6 extends Demo4{//類Demo6繼承了Demo4,是Demo4的子類
public void d3(){
Demo6 d6=new Demo6();
System.out.println(d6.num1);//公共許可權 可以被任意類訪問
System.out.println(d6.num2);//受保護的許可權 可以被同包類訪問,如果不是同包類,必須是該類的子類才可以訪問。
}
public static void main(String[] args) {
Demo6 d6=new Demo6();
d6.d3();
}
}
``
相關文章
- Java 的包, 許可權修飾符與final關鍵字Java
- 許可權修飾符和final關鍵字
- final關鍵字、內部類、四種許可權修飾符
- Java 類與物件(繼承extends super關鍵詞 方法重寫 抽象abstract 訪問修飾符/許可權控制符)Java物件繼承抽象
- 許可權修飾符
- java中public,protected,private關鍵字以及預設訪問許可權修飾符的用法細節Java訪問許可權
- PHP 物件導向 (一)許可權修飾符PHP物件
- Java入門筆記(六)——訪問許可權修飾符Java筆記訪問許可權
- java oop 修飾符&關鍵字JavaOOP
- 訪問修飾符
- 深入理解 Java 修飾符與封裝:訪問許可權、行為控制與資料隱藏Java 修飾符封裝訪問許可權行為控制資料隱藏
- Java 建構函式與修飾符詳解:初始化物件與控制許可權Java函式物件
- 一張圖講解物件鎖和關鍵字synchronized修飾方法(程式碼塊)物件synchronized
- 封裝、許可權修飾符、封裝的案例封裝
- 四種許可權修飾符的簡單介紹
- Java的static修飾符Java
- 修飾符static和abstract
- TypeScript 類訪問修飾符TypeScript
- Java的訪問修飾符Java
- 許可權修飾符,方法及異常瞭解一下
- Vue - 按鍵修飾符 && 系統修飾符Vue
- solidity 引用型別修飾符memory、calldata與storage 常量修飾符Constant與Immutable區別Solid型別LDA
- c#封裝、訪問修飾符C#封裝
- C++學習——訪問修飾符C++
- 關於公司程式碼許可權的問題
- C#基礎訪問修飾符概述C#
- 訪問修飾符你用對了嗎
- PLC結構化文字(ST)——訪問修飾符
- win10老跳出訪問許可權怎麼辦_win10訪問許可權怎麼關閉Win10訪問許可權
- postgresql關於訪問檢視需要的許可權SQL
- Kotlin可見性修飾符Kotlin
- static關鍵字
- Java 訪問許可權控制(6)Java訪問許可權
- public, private, protected 訪問許可權訪問許可權
- mongoDB 3.0 安全許可權訪問MongoDB
- TypeScript入門2:類、繼承、訪問修飾符TypeScript繼承
- JAVA基礎語法——識別符號、修飾符、關鍵字(個人整理總結)Java符號
- final關鍵字和static關鍵字