1. 程式人生 > >JAVA筆記二:物件與類

JAVA筆記二:物件與類

一、 物件

  1. 類之間關係:依賴、聚合、繼承。
  2. 物件與物件變數(c++指標)
  3. 更改器方法與訪問器方法(不修改物件)
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)
  1. 基於類的訪問許可權
    即某一個例項類的方法不僅可以訪問例項本身的私有域,當將同名類的其他例項作為引數傳入時,其他例項的私有域也可以被訪問和修改。
  2. 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方法
  1. 靜態域與靜態方法
  • 靜態域屬於類,被所有例項共享。可以被修改;
  • 靜態常量,見上面程式碼塊被final修飾後,既不可變而且被所有類共享;
  • 靜態方法,見上面程式碼塊,可以通過類名直接呼叫,也可以通過例項呼叫。
  • 靜態方法可以用作靜態工廠方法用於構造物件(不同風格的格式化物件)。
  • main方法,每一個類都可以有一個main方法(需要宣告為靜態),可用於單元測試,只需執行 ”java 類名”。
  1. 方法引數
  • 一個方法不能修改一個基本資料型別的引數(數值型或布林型)。
  • 一個方法可以改變一個物件引數的狀態。
  • 一個方法不能讓物件引數引用一個新的物件。
  1. 物件構造
  • 如果在構造器中沒有顯示初始化域,會自動賦值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

三、文件註釋

  1. 文件註釋要放在定義之前,比如類註釋要在類定義之前,import語句之後;方法註釋放在方法之前
    方法註釋除了通用表記還可以用 @param,@return,@throws
  2. 通用註釋有,@author,@version, @since, @deprecated, @see
  3. 包與概述註釋
    • 提供一個以package.html命名的HTML檔案。
    • 提供一個以package-info.java檔案,要用/**…*/註釋
    • 還可以提供概述,放置在overview.html,需要放置在包含所有原始檔的父目錄中。
  4. 註釋抽取
/**
註釋內容
*/
/**
*註釋
*兩種方式都可以
*/

javadoc -d docSaveDirectory nameOfPackage //需要切換到包目錄下
Javadoc -d docSaveDirectory *.java //檔案在預設包中。

四、類設計技巧

  1. 一定要保證資料私有
  2. 一定要對資料初始化
  3. 不要在類中使用過多的基本型別
  4. 不是所有的域都需要獨立的域訪問器和域更改器
  5. 將職責過多的類進行分解
  6. 類名和方法名要能夠體現他們的職責
  7. 優先使用不可變得類

注:

  • 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 資料庫