日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

CoreJava 笔记总结-第四章 对象与类

發布時間:2023/12/4 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CoreJava 笔记总结-第四章 对象与类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 第四章 對象與類
    • 使用預定義類
      • 對象與對象變量
      • Java庫中的LocalDate類
      • 更改器方法和訪問器方法
    • ==用戶自定義類==
      • 用`var`聲明局部變量
      • 使用`null`引用
      • 隱式參數與顯示參數
      • 基于類的訪問權限
      • 私有方法
      • `final`實例字段
    • 靜態字段與靜態方法
      • 靜態字段
      • 靜態常量
      • 靜態方法
      • 工廠方法
      • `main`方法
    • 方法參數
    • 對象構造
      • 重載
      • 默認字段初始化
      • 無參數構造器
      • 顯式字段初始化
      • 參數名
      • 調用另一個構造器
      • 初始化塊
      • 包名
      • 類的導入
      • 靜態導入
      • 包訪問
    • 文檔注釋
      • 注釋的插入
      • 類注釋
      • 方法注釋
      • 字段注釋
      • 通用注釋
      • 包注釋
    • 類設計技巧

第四章 對象與類

  • 面向對象程序設計: (OOP)先考慮數據, 再考慮算法
  • : Javab編寫的所有代碼都位于某個類中,以便于描述應用程序所對應問題領域中的對象
    • 封裝(數據隱藏): 將數據和行為組合在一個包中, 對對象使用者隱藏具體實現方法
    • 實例字段: 對象中的數據
    • 方法:操作對象的過程
    • 狀態: 一組特定實例字段值的集合
    • 繼承:通過擴展一個類來建立另一個類的過程
  • 對象: 對象的行為(方法), 對象的狀態, 對象的標識
  • 類與類之間的關系:依賴, 聚合, 繼承

使用預定義類

對象與對象變量

  • ==構造器(構造函數):==構造新實例, 一種特殊的方法, 用來構造并且初始化對象

  • Date birthday = new Date(); birthday 引用新構造的對象
  • Date deadline; 對象變量deadline可以引用Date類型的對象, 但是其本身不是一個對象, 不能使用任何Date方法
  • 初始化deadline, r讓他引用一個新構造的對象

    deadline = new Date(); 或者 deadline = birthday;
  • **注意:**對象變量沒有實際包含一個對象, 只是包含一個對象的引用

  • deadline = null;

Java庫中的LocalDate類

  • 不要使用構造器來構造LocalDate類, 用靜態工廠方法

  • LocalDate date = LocalDate.of(2001, 12, 26); int year = date.getYear();//2001 int month = date.getMonthValue();//12 int day = date.getDayOfMonth();//26

更改器方法和訪問器方法

  • getMonthValue()為訪問器方法
  • 更改器方法會改變原始對象的狀態

用戶自定義類

  • 格式
class ClassName {field1;field2;constructor1;constructor2;...method1;method2; }
  • 實例:
  • private: 表示只有Employee自身可以訪問
  • public: 表示任何方法都可以調用這些方法
  • name本身就是String對象, hireDay同理
class Employee {private String name;private double salary;private LocalDate hireDay;// 構造器, 與類名同名, 初始化實例字段// 每個類可以有一個以上的構造器, 每個構造器可以有0+個參數,構造器沒有返回值// 構造器總是伴隨著`new`操作符一起調用public Employee(String name, double salary, int year, int month, int day) {this.name = name;this.salary = salary;hireDay = LocalDate.of(year, month, day);}//下面三個是字段訪問器public String getName() {return name;}public double getSalary() {return salary;}public LocalDate getHireDay() {return hireDay;}//不要編寫返回可變對象類型的訪問器方法, 這里的LocalDate就是不可變的//返回一個可變對象類型的副本應該用clone//e.g.: return (Date) hireDay.clone();public void raiseSalary(double byPercent) {double raise = salary * byPercent / 100;salary += raise;} }
  • 一個源文件中只能有一個公共類,非公共類無限制

用var聲明局部變量

  • 如果從變量的初始值可以推導出它們的類型就用var關鍵字聲明局部變量

使用null引用

  • LocalDate birthday = null; String s = birthday.toString();//NUllPointerException
  • 拒絕null參數

public Employee(String name, double salary, int year, int month, int day) {this.name = Objects.requireNoNull(name, "The name can't be null.");this.salary = salary;hireDay = LocalDate.of(year, month, day);}

隱式參數與顯示參數

  • this: 每一個方法中指示隱式參數
  • 方法名后面括號里的為顯示參數

基于類的訪問權限

  • 一個方法可以訪問所屬類的所有對象的私有數據

私有方法

  • 作為輔助代碼,可以方便的刪除

final實例字段

  • 一般用于基本類型或者不可變類的字段
  • 必須在構造對象時候初始化

靜態字段與靜態方法

靜態字段

  • static: 每個類只有一個這樣的字段,屬于類,不屬于某一個單個對象
  • 對于非靜態的實例字段,每個對象都有一個自己的副本
  • 靜態字段不是不可變的,也可以++

靜態常量

  • System.out:就是靜態常量
  • 最好不要有公共字段但是比如公共常量final就可以的

靜態方法

  • 靜態方法: 不在對象上執行的方法,沒有隱式參數, 指示屬于類而不屬于任何對象的變量和函數

  • e.g.:Math.pow()

  • 靜態方法不可以訪問實例字段, 但是可以訪問靜態字段

  • public static int getNextId(){return nextId;// returns static field }//使用類名來調用這個方法 int n = Employee.getNextId();

工廠方法

  • e.g.:LocalDate.of(xxx)
  • 使用工廠方法的條件:
  • 無法命名構造器
  • 使用構造器時, 無法改變所構造對象的類型

main方法

  • 一個靜態方法
  • 主要可以用于對類進行單元測試

方法參數

  • 將參數傳遞給函數的方法: 按值調用, 按引用調用
  • Java程序設計語言總是按值調用
  • 實際上對象引用是按值傳遞的
  • 方法參數不能修改基本數據類型的參數(數值型,布爾型)
  • 方法參數可以改變對象參數的狀態
  • 方法不能讓一個對象參數引用一個新的對象

對象構造

重載

  • 定義: 多個方法有相同的名字和不同的參數
  • 簽名: 完整描述一個方法需要指定方法名和參數類型

默認字段初始化

  • 構造器沒有顯式的為字段賦初始值,那么自動默認賦值 數值0, 布爾false, 對象引用null
  • 方法中的局部變量必須顯式進行初始化

無參數構造器

  • 類中沒有構造器就會提供無參數構造器
  • 如果類中提供了構造器但是沒有無參數構造器,那么構造對象無參數就是不合法的

顯式字段初始化

  • 可以在類定義中為任何字段賦值
calss Employee {private String name = ""; }

參數名

  • 單個字母作為參數名
public Emloyee(String n, double s) {name = n;salary = s; }
  • 參數前面加上前綴a
public Emloyee(String aName, double aSalary) {name = aName;salary = aSalary; }
  • 參數變量會遮蔽同名的實例字段
public Emloyee(String name, double salary) {this.name = name;this.salary = salary; }

調用另一個構造器

  • 構造器的第一個語句this(xxx)將調用另一個構造器

初始化塊

  • 初始化數據字段的方法: 構造器中設置值, 聲明中賦值, 初始化塊
  • 只要構造這個類對象初始化塊一定會被執行
  • 通常將初始化塊放在構造器中
package chapter4_object_and_class;import java.util.Random;public class constructor_test {public static void main(String[] args){// fill the staff array with three Employee objectsvar staff = new Employee_2[3];staff[0] = new Employee_2("Harry", 40000);staff[1] = new Employee_2(60000);staff[2] = new Employee_2();// print out information about all Employee objectsfor (Employee_2 e : staff)System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="+ e.getSalary());} }class Employee_2 {private static int nextId;private int id;private String name = ""; // instance field initialization 實例字段初始化private double salary;// static initialization block 靜態代碼塊初始化static{var generator = new Random();// set nextId to a random number between 0 and 9999nextId = generator.nextInt(10000);}// object initialization block 對象初始化塊{id = nextId;nextId++;}// three overloaded constructors 三個重載的構造器(構造函數)public Employee_2(String n, double s){name = n;salary = s;}public Employee_2(double s){// calls the Employee(String, double) constructor 調用第一個構造器/* 調用 */this("Employee #" + nextId, s);}// the default constructor 無參數構造器public Employee_2(){// name initialized to ""--see above// salary not explicitly set--initialized to 0// id initialized in initialization block}public String getName(){return name;}public double getSalary(){return salary;}public int getId(){return id;} }

  • 將類組織到一個集合中

包名

  • 使用包原因: 確保類名唯一性
  • 用url逆序書寫作為包名
  • 嵌套的包之間沒有任何關系

類的導入

  • 一個類可以使用包中的所有類以及其他包中的公共類
  • import java.util.*;

靜態導入

  • 允許導入靜態方法和靜態字段

  • import java.lang.System.*; out.println("cdsj"); exit(0)

包訪問

  • 如果沒有指定public, private, 那么這個部分(類, 方法,變量)可以被一個包中所有方法訪問

文檔注釋

注釋的插入

  • 每個/* **/文檔注釋包含標記以及之后緊跟者的自由格式文本
  • 標記以@開始
  • 自由格式文本第一句應該是一個概要性的句子javadoc工具將這些句子抽取出來生成概要頁

類注釋

  • 類注釋放在import后, 類定義之前
/** *A cbsbudjcka *cdnskvdls */

方法注釋

  • 必須放在所描述方法之前
  • 標記
@param variable description @return description @throws class descirption

字段注釋

  • 對公共字段(靜態常量)建立文檔
/** * A "words" has 5 letters */ public static final int WORDS = 5;

通用注釋

@since text 引入這個版本的描述 @auther name @version text 當前版本的描述 @see, @link 超鏈接, 連接到javadoc文檔或者外部文檔-->P51

包注釋

  • 包目錄中添加單獨文件

  • 提供package-info.java
  • 提供package.html文件, 抽取
  • <body>xxx </body>

類設計技巧

  • 保證數據私有(封裝性)
  • 一定對數據進行初始化
  • 不要在類中過多使用基本類型
  • 不是所有的字段都需要單獨的字段訪問器和字段更改器
  • 分解有過多職責的類
  • 類名和方法名都要能夠體現他的職責
    • 訪問器用get開頭, 更改器用set開頭
  • 優先使用不可變類
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的CoreJava 笔记总结-第四章 对象与类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。