在 Java 里,咱们能够说,一切皆对象。咱们生活在一个被对象环绕的世界:咱们的狗、桌子、自行车。Java 里,对象有两大特性:状态(state)和行为(behavior)。其中,状态是对象属性的描述(如:一只猫有眼睛、耳朵、尾巴等);行为是对对象能力的归纳(如:猫会叫、吃饭、抓老鼠)。同时,对象是基于类的。也就是说:类是对象的模板。java
Java 中的对象是对面向对象编程(OOP)很好的诠释,使用对象,可使:编程
在这篇博文里,我会把这些概念拓展讲开:模块化
上面已经说过,类是对象的模板,或者说,类是对象的图纸(blueprint)。咱们会在类里定义一个和现实世界对应的对象的状态和行为。this
在设计一个类时,有以下几点供咱们参考:设计
对于一个 Java 类,一般提供:日志
同时,咱们要注意:不用把一个引用型的值放在 getter 里。例如,咱们有一个 Person 类,以下定义:code
class Person{ private Date birth; public void setBirth(Date birth){ this.birth = birth; } public Date getBirth(){ return this.birth; } }
假如咱们用下面的代码:对象
Person perseon = new Person(); // 省略经过 setter 给 pesron 的 birth 属性赋值 Date date = person.getBirth(); person.setBirth(new Date()); // date的值已经改变了
对于 Java 而已,方法这一律念旨在说明一个类所具备的行为,通常是封装了一系列能够改变状态的代码,如:getName()
、saySomething()
,同时,咱们须要注意:seo
在 Java 中,对对象采用的不是引用传递,而是值传递。即:
一个方法没法修改基本数据类型的参数
一个方法能够改变对象参数的状态
一个方法不能让对象参数引用一个新的对象
对于上述的结论,咱们有以下代码为证:资源
// 该方法不会交换 p1 和 P2 的引用 public void swap(Person p1, Person p2){ Person tmp = new Person(); tmp = p1; p1 = p2; p2 = tmp; }
若是咱们想要一个对象, 能够经过 new
关键字构造一个对象,这里,咱们的 new
会调用类的构造方法(和类同名的无返回值的特殊方法)。
Java 构造对象时,一般遵循如下原则:
对于一个 Java 类,咱们但愿提供如下一些重要的方法:
咱们通常用 equals() 方法比较两个对象的引用是否相同。可是,在实际开发过程当中,这种使用对象引用判断对象相等彷佛没太大做用,咱们更倾向于带逻辑的相等。若是两个对象相等,那么这种相等应该知足以下特性:
下面是一个比较完备的代码:
boolean equals(Object obj){ if (this == obj) return true; if (obj == null) return false; if(this.getClass() != obj.getClass()) return false; SomeObj so = (SomeObj)obj; // 逻辑代码 }
也可使用 hashCode() 判断两个对象是否相等,Object.hash(obj) 能够帮咱们的忙。
建议每一个类都添加 toStirng() 方法,便于日志记录。