Java中字符串是對象。字符串是不可更改的。java
String str = 「abc」:編程
String str1 = new String(「abc」);windows
推薦使用第一種方式,由於第一種方式只建立了一個對象。安全
虛擬機首先建立一個Sting對象的引用,而後到堆區查找,有沒有String對象」abc」,若是有就將這個String對象的引用指向」abc」。session
第二種方式一共建立了兩個對象:虛擬機首先建立一個」abc」的String對象,而後再建立一個String對象,將第一個對象做爲參數傳遞給第二個對象。app
一些特殊的字符:ui
回車 '\r'
換行 '\n'
Tab '\t'
換頁 '\f'
退格 '\b'
== 是比較對象的引用(地址)是否相等,equals是比較對象的值是否相等。
String str = "abc";
String str2 = "abc";
String str1 = new String("abc");
System.out.println(str==str1);//false 由於引用的不是同一個對象
System.out.println(str==str2);//true 引用同一個對象
System.out.println(str.equals(str1));//true,他們的值是相等的
面向對象的一個基本的設計原則:一個類只作好一件事情,因爲只作一件事情,因此改變類的動機只有一個。
同理,一個方法最好也只作一件事情,若是您的有個方法超過了10行,就應該對其進行重構了,將其分紅更小的方法,方便理解和維護。
敏捷java中一個例子:
一個生成報表的類,重構前:
String getReport() {
StringBuilder buffer = new StringBuilder();
buffer.append(ROSTER_REPORT_HEADER);
for (Student student: session.getAllStudents()) {
buffer.append(student.getName());
buffer.append(NEWLINE);
}
buffer.append(
ROSTER_REPORT_FOOTER + session.getAllStudents().size() + NEWLINE);
return buffer.toString();
}
這個repot的方法很短,可是從概念上講,該方法作了三件事情,爲了方便理解,應該將他拆分紅三個更小的方法重構後:
String getReport() {
StringBuilder buffer = new StringBuilder();
writeHeader(buffer);
writeBody(buffer);
writeFooter(buffer);
return buffer.toString();
}
void writeHeader(StringBuilder buffer) {
buffer.append(ROSTER_REPORT_HEADER);
}
void writeBody(StringBuilder buffer) {
for (Student student: session.getAllStudents()) {
buffer.append(student.getName());
buffer.append(NEWLINE);
}
}
void writeFooter(StringBuilder buffer) {
buffer.append(
ROSTER_REPORT_FOOTER + session.getAllStudents().size() + NEWLINE);
}
Java虛擬機啓動的時候設置好了許多系統屬性,多數屬性返回與虛擬機以及當前執行系統相關的信息,因此使用系統屬性是消除系統之間差別的好方法;
好比,windows下面回車換行是’\r\n’而unix下面是’\n’,
使用系統屬性便可這樣表示:
System.getProperty("line.separatpr");
這樣就消除了系統之間的某些差別,更多的屬性見jdk幫助文檔。
前面咱們接觸了public和private,public的範圍最大,public修飾的屬性和方法能夠被不一樣包的對象調用,private的範圍最小,只能對象內部有效,public表示公共財產,private表示私有財產。
還有一個修飾符protected,表示受保護的,他的範圍比public小一些,同一個包中的對象能夠調用他修飾的屬性和方法,對象的子類也能夠調用(即使子類不在同一個包中)。
若是顯示的註明修飾符,java會默認修飾符爲friendly(package),表示同一個包的類能夠訪問
|
同一個類
|
同一個包
|
同一個包的子類
|
不一樣包的子類
|
不一樣包的類
|
public
|
能夠
|
能夠
|
能夠
|
能夠
|
能夠
|
protected
|
能夠
|
能夠
|
能夠
|
能夠
|
不能夠
|
friendly
|
能夠
|
能夠
|
能夠
|
不能夠
|
不能夠
|
private
|
能夠
|
不能夠
|
不能夠
|
不能夠
|
不能夠
|
爲了安全的編程:推薦的使用順序,首先是最受限的訪問,而後須要是打開相應的訪問權限,暴露太多的類給用戶,會致使客戶對系統集成的細節產生沒必要要的依賴。
原則:儘量的保護代碼,只有在必要的時候,放開訪問權限。
在uml中public用+號表示,private用-號表示,protected用#表示,package用~表示