JavaShuo
欄目
標籤
Java核心技術卷1——第四章下
時間 2019-11-12
標籤
java
核心
技術
第四
欄目
Java
简体版
原文
原文鏈接
面向對象設計概述
結構化程序設計
OOP
web瀏覽器的例子
類
對象
識別類
類之間關係
使用現有類
對象和對象變量
Date類
GregorianCalendar類
更改器方法和訪問器方法
用戶自定義類
一個Employee類
最簡單的類
構造器
方法
域
多個源文件的使用
源文件
.java
能夠包含多個class
只能有一個public class
且該class名與源文件名相同
習慣性一個class一個源文件
編譯源代碼
通配符匹配
javac Employee*.java
隱式編譯調用的class
javac EmployeeTest.java
會自動從新編譯新的.java
解析Employee類
類方法
構造器
方法
關鍵字public
任何類的任何方法均可以調用這些方法
實例域
關鍵字private
確保只有Employee類自身的方法可以訪問這些實例域
封裝性好
可包含屬於某個類的實例域
好比String類
從構造器開始
與類同名
構造類對象時被運行
初始化實例域(初始狀態)
伴隨new操做符的執行被調用
C++:Employee number007("Janes Bond",10000,1950,1,1);//可不用new
不能對已存在的對象調用構造器
沒有返回值
不要定義與實例域重名的局部變量
隱式參數和顯示參數
隱式參數
方法名前的對象名
this
可明顯區分實例域和局部參數
顯示參數
方法名後的參數
封裝的優勢
getxxx訪問器方法
只返回實例域值
域訪問器
類應提供
一個私有的數據域
一個公有的域訪問器方法
一個公有的域更改器方法
比簡單的公有數據域複雜些
好處:
能夠改變內部實現,僅改變類方法
更改器方法能夠執行錯誤檢查
不要返回引用可變對象的訪問器方法
會破壞封裝性
返回的對象引用可改變引用同一對象的私有狀態
應該返回其克隆
return (Object)obj.
clone()
;//Object,obj看具體狀況
基於類的訪問權限
方法能夠訪問所調對象的私有數據
方法能夠訪問所屬類的全部對象的私有數據
私有方法
公有數據危險——>私有數據
方法
絕大多數公有
特殊狀況私有
計算代碼劃分紅多個獨立的輔助方法
輔助方法不該該成爲公有接口的一部分
實現機制緊密/須要特別的調用次序
私有方法不被外部類操做調用,可刪除
公有方法不能隨意刪除
Final實例域
構建對象時必須初始化
構造器執行後,必須已被設置
後面操做不能修改值
可變類用final定義,其狀態仍是能夠改變
僅對象引用爲常量
靜態域與靜態方法
static修飾
靜態域
每一個類只有一份
類域
靜態常量
static final
公有常量
public final
不怕被類對象修改
靜態方法
不能向對象實施操做的方法
沒有隱式參數
不能訪問實例域
只能訪問自身類中的靜態域
使用狀況
一個方法不須要訪問對象狀態,其參數都是經過顯示參數提供
一個方法只需訪問類的靜態域
factory方法
NumberFormat類
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
NumberFormat percentFormatter = NumberFormat.getPercentIntence();
double x = 0.1;
System.out.println(currencyFormatter.format(x));//$0.10
System.out.println(percentFormatter.format(x));//10%
使用factory方法產生不一樣風格的格式對象
沒法命名構造器時使用
須要不一樣名字
須要改變構造器返回對象類型
main方法
方法參數
值傳遞
接收的是調用者提供的值
引用傳遞
接收的是調用者提供的變量的地址
一個方法能夠修改傳遞引用所對應的變量值,
不能修改傳遞值調用所對應的變量值
Java程序設計語言老是採用值傳遞
對象引用可調用方法改變值
但依舊是值傳遞,對象引用的拷貝
對象構造
多種編寫構造器的方式
重載
特徵:
多個構造器
多個方法,相同
方法名
,不一樣
參數類型
方法的簽名:方法名,參數類型
默認域初始化
自動賦默認值
局部變量必須初始化
默認構造器
沒有參數的構造器
沒有編寫構造器,提供默認構造器
默認構造器將實例域設置默認值
提供了至少一個構造器,沒有默認構造器,視爲不合法
顯示域初始化
不一樣構造器採用多種形式設置類的實例域的初始狀態
執行構造器前先賦值,但願全部構造器對某一特定實例域賦相同的值
初始值不必定是常量
參數名
前面加a區分
一樣的名字屏蔽,用this區分
調用另外一個構造器
this(...)
放在構造器第一句,將調用同一類的另外一個構造器
對公共構造器代碼部分只編寫一次便可
初始化塊
初始化數據域
在構造器賦值
聲明中賦值
初始化塊
靜態代碼塊在類加載的時候運行
用static塊打印」Hello world「,結尾加System.exit(0),可不用main函數
int nextInt(int n);//返回0-n-1之間的隨機數
對象析構和finalize方法
析構器(C++)
放置一些當對象再也不使用時須要執行的清理代碼
好比回收分配給對象的存儲空間
Java不支持(有自動的垃圾回收器)
finalize方法
在垃圾回收器清除對象前調用
System.runFinalizersOnExit(true)能確保finalize方法在Java關閉前調用(不安全)
使用Runtime.addShutdownHook添加「關閉鉤」
某個資源須要在使用完畢馬上被關閉——人工管理
應用相似dispose或close的方法完成相應的清理操做
包
組織類
一個類能夠訪問
所屬包全部類
其餘包公有類
import java.util.*(訪問util包全部類)
分隔代碼庫
標準java包
java
javax
使用包的主要緣由是確保類名的惟一性
還需保證包名惟一
靜態導入
import導入包
import導入靜態方法
import導入靜態域
import static java.lang.System.*;//可以使用System類的靜態方法和靜態域,不用加類前綴,out.print("hello");
import static java.lang.System.out;//導入特定方法或域
將類放在包中
package com.aaa.bbb;//沒有寫,放默認包(defaulf package)
包名
會有與包名匹配的子目錄
包中文件
源文件.java
類文件.class
基目錄
.java(默認包)
.class
com/
core/
.java(包com.core)
.class
從基目錄編譯和運行類
編譯器——.java
解釋器——.class
包的做用域
修飾符
public
可被任意類使用
private
只能被定義他們的類使用
默認
可被同一包中的全部方法訪問
禁止加載用戶自定義的、包名以java.開始的類
可用包密封機制解決自定義類的密封性
類路徑
類路徑必須與包名匹配
類存儲在文件系統的子目錄
類文件也能夠存儲到JAR文件(Java歸檔)中,
JAR文件中可包含多個壓縮形式的類文件和子目錄,既節省
又改善性能
程序用到第三方的庫文件時一般會給出一個或多個須要包含JAR文件
JDK也提供許多JAR文件,如jre/lib子目錄下有數千個類庫文件
JAR文件使用ZIP格式組織文件和子目錄。可使用全部ZIP實用程序查看內部rt.jar以及其餘的JAR文件
使類被多個程序共享,須要:
把類放到一個目錄
/home/user/classdir/包/類
將JAR文件放在一個目錄
/home/user/archives
設置類路徑class path(全部包含類文件的路徑的集合)
UNIX中,類路徑中的不一樣項目之間用
:
分隔
Windows中,用
;
分隔
.表示當前路徑
類路徑包括
基路徑/home/user/classdir或c:\classes;
當前目錄.
JAR文件/home/suer/archives/archive.jar或c:\archives\archive.jar
JAVA SE 6
可在JAR文件目錄中指定通配符
/home/user/classdir:.:/home/suer/archives/'*'或者c:\classdir;.;c:\archives\*
但在UNIX中禁用*,以防止shell命令進一步擴展
設定類路徑
文檔註釋
javadoc
由源文件生成一個HTML文檔
/**開始的註釋*/結束
抽取信息
包
公有類與接口
公有的和受保護的方法
公有的和受保護的域
標記@
@自由格式文本
第一句:概要性句子
概要頁
可使用html修飾符
不要用<h1><hr>
圖片放在doc-files中
類註釋
必須在import以後,類定義以前
/**
*/
public class xxx{}
方法註釋
放在所描述的方法以前
除通用標記,還能夠用
@param variable description
對當前方法的param部分添加一個條目
可佔據多行,可使用HTML標記
一個方法的全部@param必須放一塊兒
@return description
對方法添加return部分
可佔據多行,可使用HTML標記
@throws class description
添加一個註釋,用於表示這個方法有可能拋出異常
/**
*Raises the salary of an employee
*@param byPercent the percentage by which to raise the salary(e.g. 10 =10%)
*@return the amount of the raise
*/
public double raiseSalary(double byPercent){
double raise = salsry*byPercent/100;
salary += raise;
return raise;
}
域註釋
只需對公有域(靜態常量)創建文檔
/**
*The "Hearts" card suit
*/
public static final int HEARTS = 1;
通用註釋
@author name
產生一個做者條目
可以使用多個@author
@version text
產生一個「version」條目
text是對當前版本的任何描述
@deprecated text
對類、方法、變量添加一個再也不使用的註釋
@see和@link
可使用超級連接、連接到javadoc文檔的相關部分或外部文檔
@see reference
在see also 部分增長一個超級連接
能夠用於類中
能夠用於方法
連接到方法
@see com.core.Employee#raiseSalary(double)
@see <a href="www.baidu.com">baidu</a>
@see "Core Java 2 volume 2"
指向其餘類或方法
{@link package.class#feature label}
包與概述註釋
能夠直接將類、方法和變量的註釋放置在Java源文件中
包註釋要在每一個包目錄中添加一個單獨的文件
方法一:以package.html命名的HTML文件,在<body>...</body>之間的全部文件都會被抽取出來
方法二:以package-info.java命名的Java文件。以/**和*/界定,跟隨在一個包語句以後
爲全部源文件提供一個概述性的註釋。
放在名爲overview.html的文件中,位於包含全部源文件的父目錄中。標記<body>...</body>之間的全部文本將被抽取出來
在導航欄選擇「Overview」時,就會顯示這些註釋內容
註釋的抽取
假設HTML文件將放在目錄docDirectory下
執行如下步驟:
切換到包含想要生成文檔的源文件目錄
若是是一個包,運行
javadoc -d docDirectory nameOfPackage
或對於多個包生成文檔,運行:
javadoc -d docDirectory nameOfPackage1 nameOfPackage2...
若是文件在默認包中,運行
javadoc -d docDirectory *.java
爲標準類添加超連接
javadoc -link
http://java.sun.com
須要進一步定製
非html文檔
自定義doclet
搜索一組源程序文件
DocCheck
類設計技巧
必定將數據設計爲私有
必定對數據初始化
不要在類中使用過多的基本數據類型
不是全部的域都須要獨立的域訪問器和域更改器
使用標準格式進行類的定義
公有訪問特性部分
包做用域訪問特性部分
私有訪問特性部分
每部分應該列出
實例方法
靜態方法
實例域
靜態域
將職責過多的類進行分解
類名和方法名要可以體現他們的職責
相關文章
1.
Java核心技術卷一第四章思維導圖+筆記
2.
Java核心技術卷一第四章思惟導圖+筆記
3.
《Java核心技術卷1》讀書筆記-第三章
4.
java核心技術卷1第14章----併發
5.
java核心技術卷1知識點
6.
【讀】Java核心技術卷1
7.
JAVA核心技術卷1 Day2
8.
《Java核心技術卷1》拾遺
9.
JAVA核心卷第十章
10.
java 核心技術 卷一 第10版
更多相關文章...
•
XML 相關技術
-
XML 教程
•
Hibernate的核心接口
-
Hibernate教程
•
三篇文章瞭解 TiDB 技術內幕——說存儲
•
三篇文章瞭解 TiDB 技術內幕 —— 說計算
相關標籤/搜索
java核心技術:卷1
JAVA核心技術 卷1
Java核心技術卷一
Java核心技術 卷Ⅰ
Java核心技術卷
java核心技術卷Ⅰ
Java核心技術
Java核心技術第十版·卷1
Oracle核心技術
Java核心技術 I
Java
PHP 7 新特性
Hibernate教程
MyBatis教程
技術內幕
java
註冊中心
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
windows下配置opencv
2.
HED神經網
3.
win 10+ annaconda+opencv
4.
ORB-SLAM3系列-多地圖管理
5.
opencv報錯——(mtype == CV_8U || mtype == CV_8S)
6.
OpenCV計算機視覺學習(9)——圖像直方圖 & 直方圖均衡化
7.
【超詳細】深度學習原理與算法第1篇---前饋神經網絡,感知機,BP神經網絡
8.
Python數據預處理
9.
ArcGIS網絡概述
10.
數據清洗(三)------檢查數據邏輯錯誤
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
Java核心技術卷一第四章思維導圖+筆記
2.
Java核心技術卷一第四章思惟導圖+筆記
3.
《Java核心技術卷1》讀書筆記-第三章
4.
java核心技術卷1第14章----併發
5.
java核心技術卷1知識點
6.
【讀】Java核心技術卷1
7.
JAVA核心技術卷1 Day2
8.
《Java核心技術卷1》拾遺
9.
JAVA核心卷第十章
10.
java 核心技術 卷一 第10版
>>更多相關文章<<