对象与类的认识

来源:互联网 发布:2017淘宝虚假交易规则 编辑:程序博客网 时间:2024/06/06 01:55

以下内容是读了Java核心技术卷1第四章的体会,记录下来方便以后的查阅和学习。

类(class)是构造对象的模板和蓝图,由类构造(construct)对象的过程称为创建类的实例(instance)。

封装(encapsulation)是与对象有关的一个重要概念,是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。

对象中的数据称为实例域(instance fields),操纵数据的过程称为方法(method)。对于每个特定的类实例都有一组特定的实例域值。这些值的集合就是这个对象的状态(state)。

对象

对象的三个主要特征:行为(behavior)、状态(state)、标识(identity)。

类之间的关系

最常见的类间关系:依赖(uses-a)、聚合(has-a)、继承(is-a)。
依赖:一个类的方法操纵另一个类的对象。应尽可能的让依赖类减到最少,即降低耦合性。
聚合:一个类的对象包含另一个类的对象。
继承:一个类可以选择性拥有他的父类(超类)的成员变量和方法。

对象和对象变量

要使用对象就必须先构造对象,并制定其初始状态,然后再对对象施加方法。
在Java中使用构造器(constructor)来构造新实例。构造器是一种特殊的方法,它的名字应该与类名相同。
一个对象可以传递给一个方法,一个方法也可以应用于一个对象上。如果希望这个对象能够多次使用,可以将这个对象存放在一个变量当中,这个变量称为对象变量。
一定要认识到,一个对象变量并没有实际包含一个对象,而仅仅是引用一个变量。在Java中,任何对象变量的值都是存储在另一个地方的一个对象的引用。new操作符返回的值是一个对象的引用。

更改器方法和访问器方法

更改器方法:对对象的实例域作出更改的方法。
访问器方法:只是对对象的实例域进行访问的方法。

构造器

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

隐式参数和显式参数

隐式参数:this

显式参数:位于方法名后面的括号里的参数

静态域和静态方法

静态域:将域定义为static,每个类中只有一个这样的域。而每个对象对于所有的实例域都有一份属于自己的拷贝。但是对于静态域,也是没有对象它也存在。静态域属于类而并非属于任何独立的对象。

静态常量:用static关键字和final关键字修饰的量。

静态常量和final实例域的区别:final实例域不用static关键字修饰,仅仅表示变量的对象引用在对象构造之后不能更改,而并不意味着该对象是一个常量。任何方法都可以该变量引用的对象调用对象更改器。但是静态常量则不可以更改。(这里的理解不知道有没有偏差)

静态方法:不能向对象实施操作的方法。换句话说就是没有隐式参数。因此,在静态方法中不能访问实例域,但是可以访问自身类中的静态域。调用静态方法可以用过类名来进行。(也可以通过对象名称来调用,但是不推荐,容易造成混淆。因为静态方法的结果与对象毫无关系。)

需要使用静态方法的两种情况:一个方法不需要访问对象的状态,其所需要的参数都是通过显示参数提供;一个方法只需访问类的静态域。

main方法:由于,静态方法不需要使用对象来调用。所以main方法也是一种静态方法。main方法不需要对任何对象进行操作。事实上,在程序执行之前还不存在任何对象。静态的main方法将执行并创建程序所需要的各种对象。每一个类都可以有一个main方法,常用于对类进行单元测试。

方法参数

值调用(call by value):表示方法接收的是调用者提供的值。
引用调用(call by reference):表示方法接收的是调用者提供的地址。
Java程序设计语言总是采用值调用。也就是说方法得到的是所有参数值的一个拷贝,方法不能改变传递给它的任何参数变量的内容。
方法参数共有两种类型:基本数据类型(数字,布尔值)和对象引用。
方法参数的使用情况:一个方法不能修改一个基本数据类型的参数;一个方法可以改变一个对象参数的状态;一个方法不能实现让其对象引用一个新的对象。

重载

如果多个方法有相同的名字不同的参数,就产生了重载。编译器通过用各个方法给出的参数类型与特定的方法调用所使用的值的类型进行匹配来决定使用哪一个方法,如果找不到匹配的参数或者多于一个可能的匹配是就会报错,这个过程叫做重载的解释。
方法的签名:要完整的描述一个方法就必须指出方法名和参数类型(返回值不算方法的签名)。
默认域的初始化:如果在构造器没有显示地给域赋值,那么就会被自动进行默认的赋值。数值为0,布尔类型为false,对象引用为null。
域与局部变量的不同:域会有默认的赋值,但是局部变量不会,它们必须被明确的赋值,一旦没有赋值编译器就会报错。
默认构造器:如果编写一个类时,提供了至少一个的构造器但是没有默认构造器,则在构造对象过程中如果没有提供构造参数就会被视为不合法。

Java允许使用包将类组织起来,借助包可以方便地将自己的代码与别人的代码库分开管理。

使用包的原因:防止类名的重复。一般使用域名,以逆序形式作为包名。

类的导入:一个类可以使用自己包中的所有类和其他包中的public类。但是使用其他包中的公共类时要么使用完整的类名,要么用import语句导入一个特定的类或者包。

类设计技巧

一定将数据设计为私有;
一定要对数据初始化;
不要在类中过多的使用基本数据类型;
不是所有的域都需要域访问器或者域更改器;
使用标准格式进行类定义;公有访问特性部分,包作用域访问特性部分,私有访问特性部分。每部分:实例方法,静态方法,实例域,静态域。
将职责多过的类进行分解;
类名和方法名要体现他们的职责;

0 0
原创粉丝点击