概述
类:
由类构造对象的过程称为创建类的实例。
//程序 = 算法 + 数据结构;
-
完整程序应将若干类组合在一起,其中只有一个类有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::对象与类学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复