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用~表示