我是靠谱客的博主 飘逸花瓣,最近开发中收集的这篇文章主要介绍Java核心技术卷1::对象与类学习笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

类:

由类构造对象的过程称为创建类的实例。

//程序 = 算法 + 数据结构;
  • 完整程序应将若干类组合在一起,其中只有一个类有main方法。

  • 主力类通常没有main方法,却有实例域和实例方法。

0.类设计技巧

  • 一定要保证数据私有;

  • 一定要对数据初始化;

  • 不要在类中使用过多的基本类型;

  • 不是所有的域都需要独立的域访问器和域更改器;

  • 将职责过多的类进行分解;

  • 类名和方法名要能够体现它们的职责;

  • 优先使用不可变的类;


a.面对对象程序设计(OPP)

将数据放在第一位,然后再考虑操作数据的算法。OPP更加适用于解决规模较大的问题。


b.封装:(encapsulate,数据隐藏)

形式上:将数据和行为组合在一个包中,并对对象的使用者隐藏数据的实现方式。

// 对象数据 => 实例域
// 操纵数据的过程 => 方法method
// 每个类对象都有一组特定的@实例域值
// 实例域值的集合就是这个对象的@当前状态state
// 每个发送给类对象的信号,都可能改变state

封装的关键在于:决不能让类中的方法直接的访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。(提高重用性和可靠性的关键)

封装提供的内容:

  • 一个私有的数据域;

  • 一个公有的域访问器方法;

  • 一个公有的域更改器方法;


c.对象三要特性:

  • 对象的行为(对象操作方法);

  • 对象的状态(施加方法后,对象的响应);

  • 对象标识(区别同类的不同对象);


d.面对对象程序设计步骤:先设计类(框架)后添加方法。


e.类之间的关系:

  • 依赖:一个类的方法操纵另一个类的对象;

  • 聚合or关联:类A对象包含类B对象;

  • 继承:类A包含除构造方法外的所有类B的方法和属性;

不管是以上的那种类关系,都会提高类之间的耦合度。在满足需求的情况下,应该尽量解耦优化程序,以便于类独立。


f.构造器

要想使用对象,就必须首先构造对象,并指定其初始状态。然后,对对象应用方法

构造器(constructor)是一种特殊的方法,用来构造并初始化对象。

//* 以类 Date 为例
Date dayDate = new Date(); // 构造对象,并被初始化为当前的日期和时间
new Date() //对象
Date day_date; // 对象变量而非对象,相当于指针,不具有对象的任何特性
// <classtype> <object> = new <class>;
  • 构造器的名字应该与类名相同;

  • 每个类可以有一个以上的构造器;

  • 构造器可以有0、1或多个参数;

  • 构造器没有返回值;

  • 构造器总是伴随着new操作一起调用;

  • 不要在构造器中定义与实例域重名的局部变量;

如果把一个变量的值赋另一个变量,两个变量就指向同一个日期,即它们是同一个对象的指针所有的java对象都存储在堆中。当一个对象包含另一个对象变量时,这个变量依然包含着指向另一个堆对象的指针。


g.更改器(setting)和访问器(getting)

  • 调用后对象的状态会改变的方法称为更改器。

  • 只访问对象而不修改对象的方法称为访问器。

除此之外的方法既不改变对象状态,也无法访问对象状态。

注意:不要编写返回引用可变对象的访问器方法。若需要返回一个可变对象的引用,应该返回他的克隆副本。这样就无法通过访问器返回的对象直接修改类内对象。

//eg:
class ...{
<class> <object>;
public <class> getting(){
return (<class>) <object>.clone();
}
}

h.访问权限

不提倡用public标记实例域,public数据域允许程序中的任何方法对其进行读取和修改,这破坏了封装。建议将实例域标记为private

i.隐式参数与显式参数

  • 类方法有两个参数,一个为隐式参数,为方法名前的类对象。

  • 其余为显式参数,为方法名括号的参数。

在每一个方法中,this表示隐式参数,用this获取参数,可以将实例域与局部变量区分开。


j.类的访问权限

一个方法可以访问所属类的所有对象的私有数据。
k.私有方法

实现私有方法,只需要将public修改为private。私有方法只能在类内使用,当私有方法实现的功能被其他方法替代时,可以直接删除方法,而不用在意其他代码的依赖。

l.final实例域

构建对象时必须初始化这样的域,必须确保在每个构造器执行之后,这个域的值被设置。


m.静态方法

是不能项对象实施操作的方法,可认为是没有this参数的方法。

  • 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供。

  • 一个方法只需要访问类的静态域。


n.main方法

在启动程序时还没有任何的对象。静态的main方法将执行并创建程序所需要的对象。

每一个类可以有一个main方法,这是一个常用于对类进行单元测试的技巧。


o.方法参数

一个方法不可能修改一个基本数据类型的参数,而对象引用作为参数就不同了。

java对象引用是按参数传递的。

  • 一个方法不能修改一个基本数据类型的参数(数值型或布尔型);

  • 一个方法可以改变一个对象参数的状态;

  • 一个方法不能让对象参数引用一个新的参数;


p.重载

java允许重载任何方法。

一个类具有多个构造器,有相同的名字,不同的参数,可能不同的返回值。

方法名以及参数类型为方法的签名,而返回值不是。


q.调用另一个构造器

//eg
public <class>(<type> <T>){
this("<class> #" + <type> <T1>, <type> <T2>);
}

这样对公共的构造器代码部分只编写一次即可。


r.调用构造器的具体处理步骤:

  • 所有数据域被初始化为默认值;

  • 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块;

  • 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体;

  • 执行这个构造器的主体。


s.静态初始化块

如果对类的静态域进行初始化的代码比较复杂,那么就可以使用静态的初始化块。在类第一次加载的时候,将会进行静态域的初始化。

public class <class>{
static{
...
}
}

t.包作用域

标记为private的类只有在同一个中的其他类可以访问。只有类内方法与变量设为private才能防止外部访问


u.文档注释与类注释

注释以/*开始,并以/结束,每个文档注释在标记后紧跟这自由格式文本。

v.方法注释

  • @param变量描述,一个方法所有的@param标记必须放在一起;

  • @return 返回描述,可以跨越多行;

  • @throw 异常描述,表示这个方法有可能抛出异常;

最后

以上就是飘逸花瓣为你收集整理的Java核心技术卷1::对象与类学习笔记的全部内容,希望文章能够帮你解决Java核心技术卷1::对象与类学习笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部