JAVA筆記二:物件與類
阿新 • • 發佈:2018-11-26
一、 物件
- 類之間關係:依賴、聚合、繼承。
- 物件與物件變數(c++指標)
- 更改器方法與訪問器方法(不修改物件)
java.time.LocalDate 8 static LocalTime now() static LocalTime of(int year, int month, int day) int get Year() int getMonthValue() int getDayOfMonth() DayOfWeek getDayOfWeek(), int DayOfWeek.getValue() LoaclDate plusDays(int n) LocaDate minusDays(int n)
- 基於類的訪問許可權
即某一個例項類的方法不僅可以訪問例項本身的私有域,當將同名類的其他例項作為引數傳入時,其他例項的私有域也可以被訪問和修改。 - final例項域
final一般修飾基本型別域,或不可變類域(類中的每個方法都不改變其物件,例如String)
而對於可變類域,final只是表示該物件變數不會再引用其他物件(好像c++中的const 指標啊)
private final String name;//可以,需要在構造器裡初始化,初始化之後不可變。 private final StringBuilder evaluations;//初始化後,僅僅不能引用其他物件,但是該類還是可以變 private static final double PI = 3.14159265358979;//靜態常量 public static int getNextId()// 靜態方法 public static void main(String[] args)//main方法
- 靜態域與靜態方法
- 靜態域屬於類,被所有例項共享。可以被修改;
- 靜態常量,見上面程式碼塊被final修飾後,既不可變而且被所有類共享;
- 靜態方法,見上面程式碼塊,可以通過類名直接呼叫,也可以通過例項呼叫。
- 靜態方法可以用作靜態工廠方法用於構造物件(不同風格的格式化物件)。
- main方法,每一個類都可以有一個main方法(需要宣告為靜態),可用於單元測試,只需執行 ”java 類名”。
- 方法引數
- 一個方法不能修改一個基本資料型別的引數(數值型或布林型)。
- 一個方法可以改變一個物件引數的狀態。
- 一個方法不能讓物件引數引用一個新的物件。
- 物件構造
- 如果在構造器中沒有顯示初始化域,會自動賦值0,false,物件引用為null.
- 如果沒有編寫構造器,系統會提供一個無引數預設構造器,設定為預設值。
- 如果編寫了,無論有無引數,都將覆蓋預設構造引數。
- 可以在定義域的時候直接賦初始值,則在構建物件的時候,先執行賦值操作,再執行構造器。初始值不一定是常量值,還可以是一個方法。
- 構造器可以呼叫其他的構造器(C++不可以)
this()
- 初始化塊(可以加static),首先執行初始化塊再執行構造器,下面是具體步驟:
(1)所有資料域被初始化為預設值;
(2)按照在類宣告中的次序,依次執行所有域初始化語句和初始化塊;
(3)如果構造器第一行呼叫了第二個構造器,則執行第二個構造器主體;
(4)執行這個構造器的主體。 - java不需要解構函式,可能用 finalize(不推薦)
二、包與匯入
- java使用包(package)將類組織起來。主要原因是確保類名的唯一性。
- 巢狀的包之間沒有聯絡,java.util與java.util.jar沒有關係。
- 一個類可以使用所屬包的所有類,以及其他包中的公有類。有兩種訪問方式
1. java.time.LocalDate today = java.time.LoaclDate.now();//第一種,繁瑣
2. import java.util.*;//第二種,匯入java.util的所有類,*號只能存在一個
import java.time.LocalDate //直接匯入類名,程式碼較為清晰便於朗讀,但於程式碼大小無任何區別
LocalDate today = LocalDate.now();
3. import java.util.*;
import java.sql.*;
import java.util.Date;//因為會重名所以需要強調,但如果需要同時使用兩種,則可以用字首(第一種)
4. 靜態匯入
import Static java.lang.Math.*;//使用靜態匯入可以使用類的靜態方法和域而不需要類名字首。
sqrt(pow(x, 2) + pow(y, 2));
2.1 將類放入包中
- 需要將包的名字放在原始檔的開頭(import語句之前),如果原始檔沒有放置package語句,類就被放置在一個預設包中(defaulft package))
- 放入之後如果想執行,則需要在基目錄,執行編譯。
1. package com.horstamann.corejava;
public class Employee
{
...
}
2. javac PackageTest.java //預設包,即在根目錄下
3. javac com/mycompany/PayrollApp.java
java com.mucompany.PayrollApp
2.2 包作用域
public:被任意類使用
private:被定義他們的類使用
沒有修飾:(類,方法,變數)被同一個包中的所有方法訪問
2.3 類路徑
看的腦殼疼!將見核心卷I P137
三、文件註釋
- 文件註釋要放在定義之前,比如類註釋要在類定義之前,import語句之後;方法註釋放在方法之前
方法註釋除了通用表記還可以用 @param,@return,@throws - 通用註釋有,@author,@version, @since, @deprecated, @see
- 包與概述註釋
- 提供一個以package.html命名的HTML檔案。
- 提供一個以package-info.java檔案,要用/**…*/註釋
- 還可以提供概述,放置在overview.html,需要放置在包含所有原始檔的父目錄中。
- 註釋抽取
/**
註釋內容
*/
/**
*註釋
*兩種方式都可以
*/
javadoc -d docSaveDirectory nameOfPackage //需要切換到包目錄下
Javadoc -d docSaveDirectory *.java //檔案在預設包中。
四、類設計技巧
- 一定要保證資料私有
- 一定要對資料初始化
- 不要在類中使用過多的基本型別
- 不是所有的域都需要獨立的域訪問器和域更改器
- 將職責過多的類進行分解
- 類名和方法名要能夠體現他們的職責
- 優先使用不可變得類
注:
- java.lang 包是java 語言的核心類庫,預設載入
- java.io是標準的輸入輸出類庫
- java.util 則包括了Data,Vector,Stack,HashTabel等
- java.util.zip,檔案壓縮
- java.awt(GUI) 使用者介面
- java.math 數學運算
- java.text 處理文字,日期格式
- java.applet
- java.net 網路功能
- java.rmi,java.rmi.registry, java.rmi.server,遠端呼叫
- java.security,java.securty.acl, java.security.interfaces 安全控制和管理
- java.awt.datatransfer 處理資料傳輸工具類
- java.awt.event 處理型別時間
- java.sql 資料庫