JAVA学习笔记——第七章 类和对象

7.1面向对象综述

7.1.1对象

对象通常被划分为两个部分,即静态部分与动态部分。

类实质上就是封装对象属性和行为的载体,而对象则是类抽象出来的一个实例。

7.1.2类

对象就是符合某个类的定义所产生出来的实例。更为恰当的描述是,类是世间事物的抽象称呼,而对象则是这个事物相对应的实体。

在Java语言中,类中对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,而类包括对象的属性和方法。

7.1.3封装

面向对象程序设计具有以下特点:

封装性

继承性

多态性

封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。

采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易地直接操作此数据结构,只能执行类允许公开的数据。

7.1.4继承

两个类之间的关系有很多种,继承是关联中的一种。

当处理一个问题时,可以将一些有用的类保留下来,在遇到同样问题时拿来复用。

在Java语言中,继承性主要利用特定对象之间的共有属性。子类的实例都是父类的实例,但不能说父类的实例是子类的实例。

7.1.5多态

将父类对象应用于子类的特征就是多态。

多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类及相关类。该统一风格可以由父类来实现,根据父类统一风格的处理,可以实例化子类的对象。由于整个事件的处理只依赖于父类的方法,所以日后只要维护和调整父类的方法即可,这样就降低了维护的难度,节省了时间。

在Java语言中,抽象类不能实例化对象。在多态的机制中,父类通常会被定义为抽象类,在抽象类中给出一个方法的标准,而不给出实现的具体流程。

在多态机制中,比抽象类更方便的方式是将抽象类定义为接口。由抽象方法组成的集合就是接口。

7.2类

7.2.1成员变量

在Java中对象的属性也称为成员变量。

7.2.2成员方法

在Java语言中使用成员方法对应于类对象的行为。

格式:

权限修饰符 返回值类型 方法名(参数类型 参数名){
	...//方法体
	return 返回值;
}
一个成员方法可以有参数,这个参数可以是对象也可以是基本数据类型的变量,同时成员方法有返回值和不返回值的选择,如果方法需要返回值可以在方法体中使用return关键字,使用这个关键字后,方法的执行将被终止。

Java中的成员方法无返回值可以使用void关键字表示。

成员方法的返回值可以是计算结果也可以是其他想要的数值和对象,返回值类型要与方法返回的值类型一致。

7.2.3 权限修饰符

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

7.2.4局部变量

局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误。

7.2.5局部变量的有效范围

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

7.2.6 this关键字

this关键字来代表本类对象的引用,用以区别形参。

this除了可以调用成员变量和方法以外,还可以作为方法的返回值

7.3类的构造方法

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

构造方法的特点如下:

构造方法没有返回值。

构造方法的名称要与本类的名称相同。

在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,相应的成员变量也将被初始化。

如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法。

7.4 静态变量、常量和方法

static修饰的变量、常量和方法被称作静态变量、常量和方法。

有时,在处理问题时会需要两个类在同一个内存区域共享一个数据。例如,在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量。这时没有必要在两个类中同时创建PI这个常量,因为这样系统会将这两个不在同一个类中定义的常量分配到不同的内存空间中。为了解决这个问题,可以将这个常量设置为静态的。

被声明为static的变量、常量和方法被称为静态成员。静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员。

7.5 类的主方法

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

public static void main(String[] args){
         //方法体
}

在主方法的定义中可以看到主方法具有以下特性:

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

主方法没有返回值。

主方法的形参为数组。其中args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数的个数。

7.6对象

7.6.1对象的创建

对象可以认为是在一类事物中抽象出某一个特例,通过这个特例来处理这类事物出现的问题,在Java语言中通过new操作符来创建对象。以前曾经在讲解构造方法中介绍过每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程。准确地说,可以在Java语言中使用new操作符调用构造方法创建对象。

每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成垃圾,由Java虚拟机自带的垃圾回收机制处理,不能再被使用。

7.6.2 访问对象的属性和行为

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

7.6.3 对象的引用

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

语法如下:

类名对象 引用名称

比如一个Book类的引用可以使用的代码如下所示:

Book book;

7.6.4 对象的比较

Java语言中有两种对象的比较方式,分别为“==”运算符与equals()方法。

前者比较地址

后者比较内容

7.6.5 对象的销毁

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

会被Java虚拟机视为垃圾的对象:

对象引用超过其作用范围,这个对象将被视作垃圾。

将对象赋值为 null

注:

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

Java还提供了System.gc()方法强制启动垃圾回收器。








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值