第六章类和对象总结

1.类和对象:

1.1对象:

在计算机的世界中,面向对象程序设计的思想要以对象来思考问题,首先要将现实世界的实体抽象为对象,然后考虑这个对象具备的属性和行为。

1.2类:

不能将一个事物描述成一类事物,但如果要给某一类事物一个统称就需要用到类这个概念。类就是同一类事务的统称,如果将世界中的一个事物抽象成对象类就是这类对象的统称,这样具有相同特性和行为的一类事物就称之为类,类是世间事物抽象称呼,而对象就是这个事物对应的实体,类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称之为类。

1.3封装:

面向对象程序设计具有以下特点:封装性,继承性,和多态性。

封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。例如,用户使用计算机时,只需要使用手指敲击键盘就可以实现一些功能,无须知道计算机内部是怎样工作的。即使知道计算机的工作原理,但在使用计算机时也并不完全依赖于计算机工作原理等细节。

采用封装的思想保证了类内部数据结构的完整性,使用类的用户不能轻易地直接操作类的数据结构,只能执行类允许公开的数据。这样避免了外部操作对内部数据的影响,提高了程序的可维护性。

1.4继承:

类与类之间同样具有关系,这种关系被称为关联,关联主要描述两个类之间的一般二元关系。

例如,一个百货公司类与销售员类就是一个关联,学生类与教师类也是一个关联。两个类之间的关系有很多种,继承是关联中的一种。

当处理一个问题时,可以将一些有用的类保留下来,在遇到同样的问题时拿来复用。假如这时需要解决信鸽送信的问题,我们会想到之前说的图里的鸟类。

继承性主要利用特定对象之间的共有属性。

1.5多态:

将父类对象应用于子类的特征就是多态。依然以图形类来说明多态,每个图形都拥有绘制自己的能力,这个能力可以看作是该类具有的行为,如果将子类的对象统一看作是父类的实例对象,这样当绘制图形,简单的调用父类也就是图形类绘制图形的方法即可绘制任何图型,这就是多态的最基本的思想。多态性允许以统一的风格来编写程序,以处理种类繁多的已存在的类及相关类。在多态的机制中,比抽象类更方便的方式是将抽象类定义为接口,由抽象方法组成的集合就是接口。

2类

2.1成员变量

在Java中对象的属性也被称为成员变量,成员变量可以是任意类型,整个类中均是成员变量作用范围。

2.2成员方法

在Java语言中使用成员方法对应于类对象的行为,一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不反回任何值的选择,可以在方法体中使用return关键字,使用这个关键字后,方法的执行将会被终止。,成员方法的返回值是可以计算结果的,也可以是其他想要的数值和对象,返回值类型要与方法返回的值类型相同。

2.3权限修饰符

Java中的权限修饰符主要包括private,public和protected,这些修饰符控制着对类和类的成员变量成员方法的访问。如果一个类的成员变量或成员方法被修饰为private,则该成员变量只能被本类中使用,在子类中是不可见的,并且对其他的类也是不可见的,如果该类的成员变量和成员方法访问权限设置为public,那么除了可以在本类使用这些数据,还可以在其他类和子类中使用,如果一个类的访问权限被设置为private,这个类将隐藏其内的所有数据据,以免用户直接访问它,如果需要使用类中得到数据被子类或其他包中的类使用,可以将这个类设置为public访问权限,如果一个类使用protected修饰符,那么只有本包类的可以被子类或其他类访问此类中的成员变量和成员方法。

这样看来,public和protected修饰的类,如果子类和父类不在同一包中,那么只有修饰符为public的类可以被子类进行访问,如果父类不与需通过据称产生的子类访问它的成员变量那么必须使用private声明父类这个成员变量。

访问包位置

类修饰符

private

protected

public

本类

可见

可见

可见

同包其它类或子类

不可见

可见

可见

其它包的类或子类

不可见

不可见

可见

注意,当声明变量时不使用public,protected和private修饰符设置类权限,则这个类预设为包存取范围,及只有一个包中的类可以访问这个类的成员变量和成员方法。

2.4局部变量

如果在成员方法内定义一个变量,那么这个变量称之为局部变量,实际上,方法中的形参也可以做一个局部变量,局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误。

2.5局部变量的有效范围

可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围应该从该变量的声明开始到该变量的结束为止。

2.6 this 关键字

this关键字用于表示本类当前的对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类。this关键字只能在本类中使用。

3:类的构造方法

在类中,除了成员方法外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是构造方法完成的。每当类实例化一个对象时,类都会自动调用构造方法。

构造方法有两个特点1.没有返回值 2.构造方法的名称要与本类的名称相同。

课堂代码:

4:静态变量和静态方法

在介绍静态变量和静态方法之前,首先需要介绍static关键字,因为由static修饰的变量和方法被称为静态变量和静态方法。静态变量和静态方法的作用通常是为了提供共享数据或方法,如数学计算公式等,尽管这种方式调用静态成员比较方便,但静态成员同样遵循着public,private,protected修饰符的约束。

5;类的主方法

主方法是类的入口点,它定义了程序从何处开始。主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。

主方法是静态的,所以如要直接在著方法中调用其他方法,则该方法必须也是静态的。

主方法没有返回值

主方法的形参为数组

读取主方法的参数值。

6:对象

Java是一门面向对象发程序设计语言,对象是由类实例化而来的,所有问题都通过对象来处理,对象可以通过操作类 的属性和方法来解决相应问题,所以了解对象的产生,操作和消亡是必然的。

6.1对象的创建

对象可以认为是在一类事物中抽象出某一特列,可以通过这个特例来处理这类事物出现的问题,在Java语言中通过new操作符来创建对象。没实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建方法。

6.2访问对象的属性和操作

用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。前文已经提到过,对象的属性和行为在类中是通过类的成员变量和成员方法的形式来表示的,所以当对象获取类成员时,也相应地获取了对象的属性和行为。

6.3对象的引用

在Java语言中,尽管一切都可以看作对象,但真正的操作标识符实质上是一个引用,那么引用在Java中是如何体现的呢?语法如下:

类名 对象的引用变量

例如,一个people类的引用可以使用以下代码:

people tom;

通常一个引用不一定需要有一个对象相关联。引用与对象相关联的语法如下:

people tom=new people();

在上述代码中含义如下

people(类名) tom(引用)=new people(对象的实体);

实际上真正的对象是new people()这段代码。为了方便开发者保存、调用对象,于是创建了一个people类型、名叫tom的引用变量。

实际上,tom只是一段内存地址,用于标记“new people()”对象在内存中的位置。因为内存地址又长又乱,很难让人记住,所以Java语言利用引用变量帮开发者标记内存地址。开发者只要记住引用变量的名字,就能够在内存里找到对象数据。简单地说tom是new people()的“代理人”,那么“new people()"对象能做的事,tom也能做到。例如下面这段代码:

new people().getclass();

等价于:

people tom=new people();

tom getclass();

6.4对象的销毁

每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要被回收。在其他语言中,需要用户手动回收废弃的对象。Java拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器会自动回收无用却占用内存的资源。

在学习立即回收机制之前,读者首先需要了解何种对象会被Java虚拟机视为”垃圾“。主要包括以下两个情况:

1.对象引用超过其作用范围,这个对象将被视为垃圾,比如

Example e =new Example();

2.这里的对象e超过其作用范围,将消亡

将对象赋值为null,如

Example e=new Example();

e =null;

当对象被赋值null值时,将消亡

虽然Java的垃圾回收机制已经很完善,但垃圾回收器只能回收那些由new操作符创建的对象。某些对象不是通过new操作符在内存中获取空间的,这种对象无法被垃圾回收机制所识别。在Java中,提供了一个finalize()的方法,这个方法时object类的方法,它被声明为protected,用户可以在自己的类中定义这个方法。如果用户在类中定义了finalize()方法,在立即回收时会首先调用该方法,在下一次垃圾回收动作发生时,才真正回收被对象占用的内存。

需要明确的时,垃圾回收或finalize()方法并不保证一定会发生。如果Java虚拟机内存消耗殆尽,它将不会执行垃圾回收处理。

由于垃圾回收不受人为控制,具体执行时间也不确定,所以finalize()方法也就无法执行。为此,Java提供了System.gc()方法来强制启动垃圾回收器,这与给120打电话通知医院来救护病人的道理一样,主动告知垃圾回收器来进行清理。

周一布的作业:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值