【从基础学 Java】对象

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【从基础学 Java】对象脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

在 Java 里,我们可以说,一切皆对象。我们生活在一个被对象环绕的世界:我们的狗、桌子、自行车。Java 里,对象有两大特性:状态(state)和行为(behavior)。其中,状态是对象属性的描述(如:一只猫有眼睛、耳朵、尾巴等);行为是对对象能力的概括(如:猫会叫、饭、抓老鼠)。同时,对象是基于的。也就是说:类是对象的模板。

Java 中的对象是对面向对象编程(OOP)很好的诠释,使用对象,可以使:

  • 程序模块化
  • 隐藏细节
  • 代码复用
  • 组件可拔插

在这篇博文里,我会把这些概念拓展讲开:

上面已经说过,类是对象的模板或者说,类是对象的图纸(bluePRint)。我们会在类里定义一个和现实世界对应的对象的状态和行为。

在设计一个类时,有如下几点供我们参考:

  • 保证数据的私有
  • 一定要对数据进行初始化
  • 不要在类里使用过多的基本数据类型
  • 不用对所有的字段进行 setter 和 getter
  • 职能进行划分

封装

对于一个 Java 类,通常提供:

  • 私有的字段
  • 公共的访问

同时,我们要注意:不用把一个引用型的值放在 getter 里。例如,我们有一个 PErson 类,如下定义:

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(),同时,我们需要注意:

在 Java 中,对对象采用的不是引用传递,而是值传递。即:
一个方法无法修改基本数据类型的参数
一个方法可以改变对象参数的状态
一个方法不能让对象参数引用一个新的对象

对于上述的结论,我们有如下代码为证:

// 该方法不会交换 p1 和 P2 的引用  public void swap(Person p1, Person p2){     Person tmp = new Person();     tmp = p1;     p1 = p2;     p2 = tmp; }

构造对象

如果我们想要一个对象, 可以通过 new 关键字构造一个对象,这里,我们的 new 会调用类的构造方法(和类同名的无返回值的特殊方法)。

Java 构造对象时,通常遵循以下原则:

  • 首先调用构造代码块
  • 使用构造方法,为实例变量初始化(基本数据类型初始化为类 0 的默认值,类类型为 null
  • 使用 finalize 关键字"析构"一个对象(在 gc 之前回收资

类的常用方法

对于一个 Java 类,我们希望提供以下一些重要的方法:

equals 方法

我们一般用 equals() 方法比较两个对象的引用是否相同。但是,在实际开发过程中,这种使用对象引用判断对象相等似乎没太大作用,我们更倾向于带逻辑的相等。如果两个对象相等,那么这种相等应该满足如下特性:

  • 自反性:如果 x 不为 null,x.equals(x) 为 true
  • 对称性:如果 x.equals(y),那么 y.equals(x)
  • 传达性:如果 x.equals(y),y.equals(z),那么 x.equqls(z)
  • 一致性:如果 x,y 没有改变,那么 x.equals(y) 一直成立
  • 对于任意非空引用 x,x.equals(null) 应该为 false

下面是一个比较完备的代码:

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) 可以帮我们的忙。

toString 方法

建议每个类都添加 toStirng() 方法,便于日志记录。

脚本宝典总结

以上是脚本宝典为你收集整理的【从基础学 Java】对象全部内容,希望文章能够帮你解决【从基础学 Java】对象所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。