读Java核心技术感想


1.java类命名规范 骆驼命名法 类名是以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母应该大写
以其自身为例,应该写成CamelCase

2.condition?expression1:expression2
x<y?x:y

3.数组排序
要想对数值型数组经行排序,可以使用Arrays类中的sort方法:int[] a=new int[10000];Arrays.sort(a);

4.对象与对象变量之间存在一个重要的区别。例如,语句 Date deadline;定义了一个对象变量deadline,它可以引用Date类型
的对象。但是,一定要认识到;变量deadline不是一个对象,实际上也没用引用对象。此时不能将任何方法应用与这个变量上。
语句s=deadline.toString();将产生编译错误。

5.for(Employee e:staff)
e.raiseSalary(s);

6.构造器与类同名,每个类可以用一个以上的构造器,构造器可以有0个、1个、或1个
以上的参数,构造器没有返回值,构造器总是伴随着new操作一起调用

7.不要在构造器中定义与实例域重名的局部变量,例如,下面的构造器将无法设置salary
String name;/实例域
double salsry;//实例域
public Employee(String n,double s){
String name=n;//出错
double salary=s;//出错

这个构造器声明了局部变量name和salsry。这些变量只能在构造器内部访问。这些变量屏蔽了
同名的实例域。

8、不要编写返回引用可变对象的访问器方法。
在下面这个类中违反了这个设计原则,其中的getHireDay方法返回了一个Date类对象
class Employee{
public Date getHireDay(){
return hireDay;

private Date hireDay;
这样会破坏封装性!请看下面的这段代码:
Employee harry=new Employee();
Date d=harry.getHireDay();
double tenYears=10*365.25*24*60*60*1000;
d.setTime(d.getTime()-(long)tenYears)
出错的原因很微妙。d和harry.hireDay引用同一个对象。对d调用更改器方法就可以自动
地改变一个雇员对象的私有状态
如果需要返回一个可变对象引用,应该首先对它进行克隆。对象克隆是指存放在另一个
位置上的对象副本。修改后的代码
public Date getHireDay(){
return (Date)hireDay.clone();

9.数据域设置为私有的,方法一般设置为共有的

10.可以将实例域定义为final,构建对象时必须初始化这样的域。也就是说,必须确保在每一个构造器执行之后,这个域的值被设置

11.java程序设计语言对对象采用的是引用调用,实际上这种理解是不对的。
public class Test {

/**
* @param args
*/
public static void main(String[] args) {
Student A=new Student("哈哈","h123");
Student B=new Student("呵呵","c123");
int AA=1;
int BB=2;
Exchange ex=new Exchange();
System.out.println(A.name);
System.out.println(B.name);
ex.exchange(A, B);
// System.out.println(A.name);
// System.out.println(B.name);
System.out.println(AA);
System.out.println(BB);
ex.exchange(AA, BB);
// System.out.println(AA);
// System.out.println(BB);
}

}

public class Exchange {
public void exchange(Student A,Student B){
Student C;
C=A;
A=B;
B=C;
System.out.println(A.name);
System.out.println(B.name);
}
public void exchange(int A,int B){
int C;
C=A;
A=B;
B=C;
System.out.println(A);
System.out.println(B);
}
}
//方法结束是参数变量A,B会被丢弃,原来的A,B仍然引用这个方法调用之前所引用的对象
public class Student {
String name;
String password;
public Student(String name,String password){
this.name=name;
this.password=password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

12.this 调用构造器
public Employee(double d){
this("Employee #"+nextId,d);
nextId++;

public Employee(String s,double d){
}
当调用new Employee(60000)时,Employee(double)构造器将调用Employee(String,double)的构造器

13.super 和 构造函数
在Manager的父类当中n,s,year,month,day都是私有变量
public Manager(String n,double s,int year,int month,int day){
super(n,s,year,month,day);
bonus=0;//子类Manager特有的实例域

使用super调用构造器的语句必须是子类构造器的第一条语句。
如果子类的构造其没有显示地调用超类的构造器,则将自动的调用超类的默认(没有参数)的构造器。
如果超类没有不带参数的构造器,并且在子类的构造器中又没有显示地调用超类的其他构造器,则java编译器将报告错误。

14."is-a" 里氏替换法则 置换法则 程序中出现超类对象的任何地方都可以用子类对象置换。但子类不能替换父类

15.如果是private static final方法,将采用静态绑定,在覆盖一个方法的时候,子类方法不能低于超类
方法的可见性。

  • 1
  • 2
  • 下一页

相关内容