Java面向?qū)ο筇匦栽斀庵庋b篇
引用
我們學(xué)習面向?qū)ο蟮恼Z言時,應(yīng)該都了解它有三大特性。
面向?qū)ο蟮娜筇匦裕悍庋b、繼承和多態(tài)。這篇博客主要介紹的就是封裝。
1.封裝
1.1什么是封裝
封裝就像是把東西放在?個盒子里,并且控制誰可以打開這個盒子,以及如何使用盒子里的東西。在編程中,它指的是將數(shù)據(jù)(屬性)和操作這些數(shù)據(jù)的方法(函數(shù))包裝在?個單元(通常是類)內(nèi)。僅對外公開一些接口來和對象進行交互。
1.2為什么要封裝
1.降低耦合性
封裝可以降低對象和對象之間的耦合度,當對象內(nèi)部發(fā)生變化時,只需要修改對象內(nèi)部即可,不會影響到外部程序,因為公開的接口是不會發(fā)生改變的。
2.降低復(fù)雜性
封裝隱藏對象內(nèi)部的細節(jié),只對外公開接口給外部,使用起來更便捷。
3.提高安全性
同理封裝隱藏了對象內(nèi)部細節(jié),阻止外部程序直接訪問對象的內(nèi)部狀態(tài),從而保護數(shù)據(jù)不被意外修改或破壞。
1.3如何封裝
封裝采用訪問限定符:
使用范圍如下:

- private修飾的成員變量只能在同一類中使用
- default表示什么修飾符都不加,只能在同一包中訪問
- protected修飾的方法可以在同一包中訪問,如果想要在不同包中訪問,只能是繼承關(guān)系下的子類才能訪問。
- public表示所有范圍都能使用
2.static關(guān)鍵字
static關(guān)鍵字可以修飾成員變量和成員方法。
2.1static修飾成員變量
被static修飾的成員變量稱為靜態(tài)成員變量,該變量不在獨屬于某一對象,而是屬于類,是類變量,所有對象共享該類變量。存在于方法區(qū)中。
首先,我們定義兩個變量,一個成員變量author,一個被static修飾的靜態(tài)成員變量name。然后我們在main方法中創(chuàng)建兩個對象,分別用變量test1和test2引用兩對象。最后打印兩個對象。
代碼如下:
public class Test {
private String author;
private static String name;
public Test(String author) {
this.author = author;
}
@Override
public String toString() {
return "Test{" +
"author='" + author + '\'' +
"name='" + name + '\''+
'}';
}
public static void main(String[] args) {
Test test1 = new Test("lishi");
Test test2 = new Test("wangwu");
Test.name = "zhangsan";//不依賴于對象的引用,通過類名直接訪問
System.out.println(test1);
System.out.println(test2);
}
}
運行結(jié)果:證明了所有對象共享類變量

思維導(dǎo)圖:不同對象是如何調(diào)用靜態(tài)變量
類型的變量創(chuàng)建在棧上,對象創(chuàng)建在堆上,而靜態(tài)變量存放在方法區(qū)

2.2靜態(tài)成員變量的特性
- 不屬于具體的某一個對象,所有對象共享
- 不依賴于對象,通過類名進行訪問
- 存儲在方法區(qū)中
- 生命周期伴隨類的加載而創(chuàng)建,類的卸載而銷毀
我們演示下最后一個特性:首先我們給靜態(tài)成員變量name就地初始化“七七”,沒有創(chuàng)建任何對象,直接通過類名進行訪問,然打印出來。
代碼如下:
public class Test {
private String author;
private static String name = "qiqi";
public static void main(String[] args) {
System.out.println(Test.name);
}
}
運行結(jié)果:

2.3static修飾成員方法
同理被static修飾的成員方法稱為靜態(tài)成員方法,是類方法,它不再具體屬于某一個對象。
2.4靜態(tài)成員方法的特性
- 是類方法,不單獨屬于某一對象
- 通過類名所調(diào)用
- 在靜態(tài)成員方法中不能訪問任何非靜態(tài)成員變量
- 在靜態(tài)方法中不能調(diào)用任何非靜態(tài)方法,因為非靜態(tài)方法中有this參數(shù)(通過this引用非靜態(tài)成員變量),在靜態(tài)方法中調(diào)用時無法傳遞this引用(靜態(tài)方法不能訪問任何非靜態(tài)成員變量)
- 同理在靜態(tài)方法中不能使用super引用。
public class Test {
private String author;
private static String name = "qiqi";
public Test(String author) {
this.author = author;
}
@Override
public String toString() {
return "Test{" +
"author='" + author + '\'' +
"name='" + name + '\''+
'}';
}
public void testStatic1(){
}
public static void testStatic2(){
}
public static void func(){
//author = "zhangsan" //編譯失?。篍rror:(31, 48) java: ?法從靜態(tài)上下?中引??靜態(tài) 變量 author
//this.author = "zhangsan";//依賴于對象的引用
name = "xixi";
Test.name = "xixi";//不依賴于對象的引用,通過類名直接訪問
//testStatic1(); //編譯報錯:Error:(36, 41) java: ?法從靜態(tài)上下?中引??靜態(tài) ?法 doClass()
testStatic2();
}
}
2.5static修飾的成員變量初始化
有兩種初始化方法,一種是就地初始化,一種是在靜態(tài)代碼塊初始化。就地初始化就是定義時直接給出初始值
public class Test {
private static String name = "qiqi";
}那什么是靜態(tài)代碼塊呢?
3.代碼塊
分為靜態(tài)代碼塊,實例代碼塊,構(gòu)造代碼塊和普通代碼塊。
3.1靜態(tài)代碼塊
被static修飾的代碼塊就是靜態(tài)代碼塊,?般?于初始化靜態(tài)成員變量。
public class Test {
private static String name;
//靜態(tài)代碼塊
static {
name = "xixi";
}
}
3.2實例代碼塊
不加修飾符的代碼塊就是實例代碼塊,?般?于初始化實例成員
變量。
public class Test {
//實例化成員變量
private String author;
private int age;
private double price;
//靜態(tài)成員變量
private static String name;
private static String classname;
private static int id;
//實例化代碼塊
{
author = "gugu";
age = 18;
price = 23.6;
}
}
3.3構(gòu)造代碼塊
在構(gòu)造方法內(nèi)的代碼塊稱為構(gòu)造代碼塊
public class Test {
private String author;
//構(gòu)造代碼塊
public Test(String author) {
this.author = author;
}
}
3.4普通代碼塊
定義在方法中的代碼塊
public class Main{
public static void main(String[] args) {
{ //直接使?{}定義,普通?法塊
int x = 10 ;
System.out.println("x1 = " +x);
}
}
總結(jié)
到此這篇關(guān)于Java面向?qū)ο筇匦栽斀庵庋b篇的文章就介紹到這了,更多相關(guān)Java面向?qū)ο蠓庋b內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分享我的第一次java Selenium自動化測試框架開發(fā)過程
這篇文章主要介紹了分享我的第一次java Selenium自動化測試框架開發(fā)過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-03-03
SpringCloud2020 bootstrap 配置文件失效的解決方法
這篇文章主要介紹了SpringCloud2020 bootstrap 配置文件失效的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-02-02

