主頁 > 後端開發 > Java類和物件的學習

Java類和物件的學習

2021-04-25 15:05:27 後端開發

  • 面向物件和面向程序的區別
  • 面向物件概念
  • 類和類的實體化
    • 類的成員
    • 認識null
    • static 關鍵字
  • 封裝
    • private實作封裝
    • getter和setter方法
  • 構造方法
    • this關鍵字
  • 代碼塊
  • 總結

面向物件和面向程序的區別

眾所周知,Java是種面向物件編程,在學習類和物件時,我們先來了解一下什么是面向物件編程,
面向程序(如:C語言)

面向程序的語言也稱為結構化程式設計語言,是高級語言的一種,在面向程序程式設計中,問題被看作一系列需要完成的任務,函式則用于完成這些任務,解決問題的焦點集中于函式,其概念最早由E.W.Dijikstra在1965年提出,是軟體發展的一個重要里程碑,它的主要觀點是采用自頂向下、逐步求精的程式設計方法,使用三種基本控制結構構造程式,即任何程式都可由順序、選擇、回圈三種基本控制結構構造

面向物件(如:Java、C++)

面向物件程式設計(Object Oriented Programming)作為一種新方法,其本質是以建立模型體現出來的抽象思維程序和面向物件的方法,模型是用來反映現實世界中事物特征的,任何一個模型都不可能反映客觀事物的一切具體特征,只能對事物特征和變化規律的一種抽象,且在它所涉及的范圍內更普遍、更集中、更深刻地描述客體的特征,通過建立模型而達到的抽象是人們對客體認識的深化,

簡單來說,面向程序注重的是程序,在整個程序中所涉及的行為,就是功能,

面向物件注重的是物件,也就是參與程序所涉及到的主體,是通過邏輯將一個個功能實作連接起來

舉個例子

  • 面向程序: 1.把冰箱打開 2. 把大象放入 3. 冰箱關起來
  • 面向物件: 打開冰箱,儲存,關閉都是對冰箱的操作,是冰箱的行為,冰箱就是一個物件,所以只要操作冰箱所具備的功能,都要定義在冰箱中

面向物件概念

  1. 面向物件是思考問題的一種思考方式,是一種思想,比如:概念與實體,理論與實踐,名和實等等,
  2. 類就是一類物件的統稱,物件就是這一類具體化的一個實體,
  3. 面向物件的好處:將復雜的事情變簡單了,只要面對一個物件就行,

簡而言之

面向物件就是用代碼(類)來描述客觀世界的事物的一種方式. 一個類主要包含一個事物的屬性和行為,


類和類的實體化

  • 類就是一類物件的統稱,物件就是這一類具體化的一個實體,

基本語法

// 創建類
class <class_name>{  
    field;//成員屬性
    method;//成員方法
}
// 實體化物件
<class_name> <物件名> = new <class_name>();
  • class為定義類的關鍵字,ClassName為類的名字,{ } 中為類的主體,

  • 類中的元素稱為:成員屬性,類中的函式稱為:成員方法,

類的創建

宣告一個類就是創建一個新的資料型別,而類在 Java 中屬于參考型別, Java 使用關鍵字 class 來宣告類,我們來看以下簡單的宣告一個類

示例

class Person {		//使用class創建一個Person類
    public int age;//成員屬性 
    public String name;// 成員屬性
    public String sex;//成員屬性
    public void eat() {         //成員方法
       System.out.println("吃飯!");  
   }
    public void sleep() {		//成員方法
       System.out.println("睡覺!");  
   }
}

我們這里這是創建了一個類,并沒有把這個類實體化,類就像是設計圖,只設計出需要什么東西,但是并沒有物體的建筑存在,同樣類也只是一個設計,實體化出的物件才能實際存盤資料,占用物理空間,

  1. 類只是一個模型一樣的東西,限定了類有哪些成員.
  2. 一個類可以實體化出多個物件,實體化出的物件 占用實際的物理空間,存盤類成員變數

在這里插入圖片描述
那么怎么將類實體化呢?

這時候我們就要通過另一個關鍵字new來將類實體化,用型別別創建物件的程序,稱為類的實體化,

類的實體化

  1. new 關鍵字用于創建一個物件的實體.
  2. 使用 . 來訪問物件中的屬性和方法.
  3. 同一個類可以創建對個實體.

示例

//結合上文代碼觀看
public class Main{
 public static void main(String[] args) {
        Person person = new Person();//通過new實體化物件
        person.eat();//成員方法呼叫需要通過物件的參考呼叫
        person.sleep();
        //產生物件     實體化物件
        Person person2 = new Person();
        Person person3 = new Person();
 }
}

通過new關鍵字創建的實體化我們稱為實體化物件,而用型別別創建的變數我們稱之為物件的參考,通過物件參考可以找到實體化物件,我們可以通過 物件參考.成員變數/成員方法 來呼叫類里面創建的變數及方法,

運行示例

在這里插入圖片描述

關于記憶體布局,物件的參考是放在記憶體中的堆疊區,而實體化物件是放在記憶體中的堆區,

來看一張圖

在這里插入圖片描述

從圖中可以看到,物件的參考是在堆疊上開辟的,而參考指向的實體化物件的空間是在對上開辟的,每次使用new實體化一個物件時,都會在堆上開辟一塊空間,每個實體化物件都包含類中的成員屬性,

類的成員

  • 類的成員可以包含以下:欄位、方法、代碼塊、內部類和介面等,

這里我就暫時先介紹前三個,

欄位/屬性/成員變數

在類中, 方法外部定義的變數. 這樣的變數我們稱為 “欄位” 或 “屬性” 或 “成員變數”(三種稱呼都可以, 一般不會嚴格區分),用于描述一個類中包含哪些資料.

class Person {
    public String name;   // 欄位  成員變數 屬性
    public int age; 
}
  • 使用 . 訪問物件的欄位.
  • “訪問” 既包含讀, 也包含寫.
  • 對于一個物件的欄位如果沒有顯式設定初始值, 那么會被設定一個默認的初值

默認值可以參考以下這幅圖

....
成員方法

成員方法其實就是類里面的創建的方法,稱之為成員方法,用于描述一個物件的行為,其訪問方式跟成員變數一樣,這里過一遍應該就能懂,

class Person {
    public int age = 18;//成員變數
    public String name = "張三";  //成員變數
    public void show() {   //成員方法
   System.out.println("我叫" + name + ", 今年" + age + "歲");
   }
}

認識null

  • null 在 Java 中為 “空參考”, 表示不參考任何物件. 類似于 C 語言中的空指標. 如果對 null 進行 . 操作就會引發例外.

代碼示例

class Person{
    public int age;
    public String name;
}

public class Test {
    public static void main(String[] args) {
        Person person = null;//person指向空
        System.out.println(person.age);//對null進行.操作
    }
}

運行結果
報錯空指標例外
在這里插入圖片描述
如果以后寫代碼出現這種報錯那就是因為你的參考指向了null,

static 關鍵字

static的作用

  1. 修飾屬性
  2. 修飾方法
  3. 代碼塊
  4. 修飾類(暫時不做介紹)

static修飾屬性

Java靜態屬性和類相關, 和具體的實體無關. 換句話說, 同一個類的不同實體共用同一個靜態屬性.

class TestDemo{
    public int a;
    public static int count;//static修飾的成員變數,簡稱靜態成員變數
}
public class Main{
    
 public static void main(String[] args) {
        TestDemo t1 = new TestDemo();
        t1.a++;
        t1.count++;
        System.out.println(t1.a);
        System.out.println(t1.count);//通過類名.靜態成員變數訪問
        System.out.println("============");
        TestDemo t2 = new TestDemo();
        t2.a++;
        t2.count++;
        System.out.println(t2.a);
        System.out.println(t2.count);
   }
}

運行結果
在這里插入圖片描述運行結果決議:被static修飾的成員變數被兩個不同的參考改變了值,這是因為被static所修飾的屬性是被所有類所屬,切不屬于物件,在記憶體布局當中被static修飾的屬性是放在記憶體中的方法區,被修飾的屬性在記憶體中只有一份,所有在兩個不同的參考訪問時其實就是訪問相同的一個記憶體并改變了其屬性的值,

上列代碼中通過參考訪問靜態屬性其實是不規范的,正確訪問應該是類名.靜態屬性

//正確訪問
TestDemo.count++;

修飾方法

  1. 如果在任何方法上應用 static 關鍵字,此方法稱為靜態方法,
    靜態方法屬于類,而不屬于類的物件,
  2. 可以直接呼叫靜態方法,而無需創建類的實體,
  3. 靜態方法可以訪問靜態資料成員,并可以更改靜態資料成員的值,
  4. 靜態方法不可訪問非靜態資料成員
class TestDemo{
    public int a;
    public static int count;
    
    public static void change() {
        count = 100;
        //a = 10; error 不可以訪問非靜態資料成員,否則會出現例外
   }
}
public static void main(String[] args) {
        TestDemo.change()//無需創建實體物件 就可以呼叫
        System.out.println(TestDemo.count);   
}

運行結果
在這里插入圖片描述
注意事項 靜態方法和實體無關, 而是和類相關. 因此這導致了兩個情況

  1. 靜態方法不能直接使用非靜態資料成員或呼叫非靜態方法(非靜態資料成員和方法都是和實體相關的).
  2. this和super兩個關鍵字不能在靜態背景關系中使用(this 是當前實體的參考, super是當前實體父類實體的參考, 也是和當前實體相關)

擴展

static是不能修飾區域變數的,如果使用static修飾區域變數,就會發生報錯,
在這里插入圖片描述
這是因為,每次你呼叫成員方法時,它都會創建一個區域的靜態變數,而static修飾的屬性生命周期是隨著類的生命周期結束而結束的,比區域變數的生命周期更長,而被static修飾的屬性,在記憶體中只會存在一份,如果修飾了區域變數,每次呼叫創建一個每次呼叫創建一個,前面又說了只存在一份,這就會很矛盾,故不能使用static修飾區域變數

封裝

什么是封裝?

  • 軟體開發的本質就是對程式復雜程度的管理. 如果一個軟體代碼復雜程度太高, 那么就無法繼續維護. 如何管理復雜程度? 封裝就是最基本的方法.

  • 在我們寫代碼的時候經常會涉及兩種角色: 類的實作者和類的呼叫者.

  • 封裝的本質就是讓類的呼叫者不必太多的了解類的實作者是如何實作類的, 只要知道如何使用類就行了.這樣就降低了類使用者的學習和使用成本, 從而降低了復雜程度

private實作封裝

private/ public 這兩個關鍵字表示 “訪問權限控制” .

  1. 被 public(公共類)修飾的成員變數或者成員方法, 可以直接被類的呼叫者使用.
  2. 被 private(私有類) 修飾的成員變數或者成員方法, 不能被類的呼叫者使用.(只能在本類使用)

換句話說, 類的使用者根本不需要知道, 也不需要關注一個類都有哪些 private 的成員. 從而讓類呼叫者以更低的成本來使用類.

范例:使用 private 封裝屬性, 并提供 public 方法供類的呼叫者使用

class Person {
    private String name = "張三";
    private int age = 18;
    public void show() {
        System.out.println("我叫" + name + ", 今年" + age + "歲");
    }
}
    public static void main(String[] args) {
        Person person = new Person();
        person.show();
}

此時欄位已經使用 private 來修飾. 類的呼叫者(main方法中)不能直接使用. 而需要借助 show 方法. 此時類的使用者就不必了解 Person 類的實作細節.

同時如果類的實作者修改了欄位的名字, 類的呼叫者不需要做出任何修改(類的呼叫者根本訪問不到 name, age這樣的欄位).

getter和setter方法

當欄位被private修飾后,我們在主方法中是無法直接訪問該欄位的,此時如果需要獲取或者修改這個 private 屬性, 就需要使用 getter / setter 方法.

getter方法

getName 即為 getter 方法, 表示獲取這個成員的值.

class Person {
    private String name = "張三";
    private int age = 18;
    public void show() {
        System.out.println("我叫" + name + ", 今年" + age + "歲");
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

    public static void main(String[] args) {
        Person person = new Person();
        int age = person.getAge();
        System.out.println(age);
}

設定了getter方法后,這時我們就可以在main方法中獲取被private修飾的欄位的值,

運行結果
在這里插入圖片描述

setter方法
setName 即為 setter 方法, 表示設定這個成員的值

class Person {
    private String name = "張三";
    private int age = 18;
    public void show() {
        System.out.println("我叫" + name + ", 今年" + age + "歲");
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
    public static void main(String[] args) {
        Person person = new Person();
        int age = person.getAge();
        System.out.println(age);
}

設定了setter方法后,這時我們就可以在main方法中設定被private修飾的欄位的值,

運行結果
在這里插入圖片描述

注意事項

  1. 當set方法的形參名字和類中的成員屬性的名字一樣的時候,如果不使用this, 相當于自賦值. this 表示當前實體的參考.
  2. 不是所有的欄位都一定要提供 setter / getter 方法, 而是要根據實際情況決定提供哪種方法.
  3. 在 IDEA 中可以使用 alt + insert (或者 alt + F12) 快速生成 setter / getter 方法. 在 VSCode 中可以使用滑鼠右鍵選單 -> 源代碼操作 中自動生成 setter / getter 方法.

第一點我待會會在下文中講到,關于第三點,如果使用的IDEA快捷鍵無法打開時,可以在空白處右擊滑鼠,然后跟著下圖操作即可自動生成
在這里插入圖片描述

構造方法

構造方法是一種特殊方法, 使用關鍵字new實體化新物件時會被自動呼叫, 用于完成初始化操作.

語法規則

  1. 方法名稱必須與類名稱相同
  2. 構造方法沒有回傳值型別宣告
  3. 每一個類中一定至少存在一個構造方法(沒有明確定義,則系統自動生成一個無參構造)

先看一段代碼

class Person {
    private String name;//實體成員變數
    private int age;
    private String sex;
    //不帶引數的構造引數
    public Person() {
        name = "caocao";
        age = 10;
        sex = "男";
        System.out.println("呼叫了不帶引數的構造方法");
    }
    //帶引數的構造方法
    public Person(int a){
        name = "hello";
        age = a;
        sex = "女";
        System.out.println("呼叫了帶引數的構造方法");
    }
}
    public static void main(String[] args) {
        Person person = new Person();
        Person person2 = new Person(20);
    }

運行結果
在這里插入圖片描述
通過運行結果我們看到,呼叫構造方法是在實體化一個物件的時候執行的,Java會根據你是否給了引數來呼叫對應的構造方法,如果沒有寫構造方法,則系統會自動生成一個無參的構造方法,需要注意的是,如果自己寫了構造方法,則系統將不會自動生成無參的構造方法,


看到這里的讀者不知道考沒考慮過一個問題,如果在類中創建的方法(普通方法,靜態方法,構造方法等)里面的引數名和類中創建的成員名一樣會怎么樣,來看一段代碼(這里拿構造方法舉例)

class Person {

    public String name;//實體成員變數
    public int age;
    public String sex;
    
    public Person(String  name,int age,String sex){
        name = name;
        age = age;
        sex = sex;
    }
}

    public static void main(String[] args) {
        Person person = new Person("張三",18,"男");
        System.out.println(person.name);
        System.out.println(person.age);
        System.out.println(person.sex);
    }

運行結果
在這里插入圖片描述
我們發現輸出的都是對應型別的默認值,并沒有改變對應的欄位,這是因為,當區域變數名與成員屬性名相同時區域會優先,所以在上列代碼中相當于區域變數自己給自己賦值了,遇到這種情況我們就要使用this關鍵字來區分成員變數和區域變數,

this關鍵字

  • this表示當前物件參考(注意不是當前物件). 可以借助 this 來訪問物件的欄位和方法

我們可以將上面代碼改動一下,把所有的成員變數加上this關鍵字

public Person(String  name,int age,String sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

這時候代碼就能成功輸出了
在這里插入圖片描述
this的三種用法

  1. this.成員變數名:呼叫當前物件的屬性
  2. this.方法名:呼叫當前物件的方法
  3. this():呼叫自己的構造方法

前兩點使用方法都是一樣的,可以參考上面改動代碼,關于第三點需要注意:只能在構造方法里使用,只能呼叫一個構造方法,只能放在構造方法的第一行

還需要注意的是this關鍵字是不能訪問靜態方法和靜態變數的,靜態方法里面也不能使用this

代碼塊

這個知識點很簡單,相信過一遍就能清楚了

什么是代碼塊?

使用 {} 定義的一段代碼,根據代碼塊定義的位置以及關鍵字,又可分為以下四種:

  1. 普通代碼塊
  2. 構造代碼塊
  3. 靜態代碼塊
  4. 同步代碼塊

這里我就先介紹前面三種代碼塊

普通代碼塊

就是定義在方法的代碼塊叫做普通代碼塊

public static void main(String[] args) {

        //直接用{}定義普通代碼塊
        {
            System.out.println("普通代碼塊");
        }
        
}        

用法比較少見,沒多大用處,哈哈,

構造代碼塊

定義在類中的代碼塊(不加修飾符),也叫:實體代碼塊,

class Person {
    public String name;//實體成員變數
    public int age;
    public String sex;
    
    //構造(實體)代碼塊
    {
        this.name = "張三";
        this.age = 18;
        this.sex = "男";
    }
    
}    

構造代碼塊一般用于初始化實體成員變數,

靜態代碼塊

使用static定義的代碼塊,

class Person {
    public String name;//實體成員變數
    public int age;
    public String sex;
    static public int count;

    //靜態代碼塊
    static {
        count = 10;
    }
    
}

一般用于初始化靜態成員屬性,

其實代碼塊也有執行順序的,來看一段代碼

class Person {
    public Person(){
        System.out.println("構造方法");
    }
	
	//構造(實體)代碼塊
    {
        System.out.println("構造代碼塊");
    }

    //靜態代碼塊
    static {
        System.out.println("靜態代碼塊");
    }

}
public static void main(String[] args) {
        Person person1 = new Person();
        System.out.println("--------------分割線------------");
        Person person2 = new Person();
}        

運行結果
在這里插入圖片描述
通過運行結果可以看到,不管你代碼塊位置在上面還是下面,執行順序都是靜態代碼塊->構造代碼塊->構造方法,且靜態代碼塊只會執行一次,


總結

  • 一個類可以產生無數的物件,類就是模板,物件就是具體的實體,
  • 類中定義的屬性,大概分為幾類:類屬性,物件屬性,其中被static所修飾的資料屬性稱為類屬性, static修飾的方法稱為類方法,特點是不依賴于物件,我們只需要通過類名就可以呼叫其屬性或者方法,
  • 靜態代碼塊優先實體代碼塊執行,實體代碼塊優先建構式執行,
  • this關鍵字代表的是當前物件的參考,并不是當前物件,

這里就是本文講的所有內容,有錯誤的地方歡迎大家指出,寫博客也是為了記錄自己的學習程序,希望能給讀者帶來幫助,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279982.html

標籤:java

上一篇:Java類和物件(重點詳解)

下一篇:各位大佬,MSB3037怎么回事啊?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more