Java 笔记【第四章 对象与类】


4.1 概述

对象的三个主要特性:
- 对象的行为:可以对对象施加的操作,方法?
- 对象的状态:当施加那些方法时,对象如何响应?
- 对象的标识:如何辨别具有相同行为与状态的不同对象?

类之间的关系:
- 依赖(use-a):一个类访问或操作其他类的对象
- 聚合(has-a):类A的对象包含类B的对象
- 继承(is-a):继承关系

4.3 用户自定义类

  • 在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。

  • Java 对象都是在堆中构造的。

  • public void raiseSalary(double byPercent)
    方法有两个参数。第一个参数称为隐式参数,是出现在方法名前的类对象。第二个参数位于方法名后面括号中的数值,这是一个显式参数。

  • 在每一个方法中,关键字this标识隐式参数。

  • 在C++中,如果在类内定义方法,这个方法将自动成为内联方法。但在Java 中,将某个方法设置为内联方法是Java虚拟机的任务。即时编译器会监视调用那些简洁、经常被调用、没哟被重载以及可优化的方法。

  • 如果需返回一个可变数据域的拷贝,就应该使用clone().

  • final 关键字只是表示存储在变量中的对象引用不会再指示其他对象,但是对象的内容是可以修改的

4.4 静态域与静态方法

  • 静态域被称为类域,属于类,不属于任何独立的对象。

静态方法:
- 静态方法时一种不能面向对象实施操作的方法。
- 没有隐式参数。

工厂方法
工厂方法为Java 学习中的设计模式。具体介绍可以看Coding-Naga比较全面的解析。(下文两图片来源)
还有runoob比较浅显的两篇。

概括而言为三种模式:

  • 简单工厂模式:通过条件判断语句来选择生成对象,称为“全能类”,要求“全能”,不适合扩展。

  • 工厂方法模式:创建对象接口,但由子类决定要实例化哪一个。工厂方法让类把实例化推迟到了子类。
    Java 笔记【第四章 对象与类】

  • 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
    Java 笔记【第四章 对象与类】

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

4.5 方法参数

  • Java程序设计语言总是采用按值调用

方法参数共有两种类型:
- 基本数据类型(数字、布尔值)
- 对象引用

对于基本数据类型:
由于是按值调用,会有一个拷贝,所以无论如何操作都不能改变值得内容。

对于对象引用:
拷贝的是对对象的引用(即对象引用以及他的拷贝同时引用同一个对象),调用对象方法还是可以对对象进行操作的。
Java 笔记【第四章 对象与类】

4.6 对象构造

方法签名:方法名 + 参数类型 【不包括返回类型】

重载:

  • 不允许两个方法签名相同,但是返回类型不同的重载方法

  • 如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供构造参数就会被视为不合法。仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器。

  • 域分为两种:实例域 类域

如果构造器的第一个语句形如this(…) 这个构造器将调用同一个类的另一个构造器。(在C++中则不允许)

初始化快
形如{…}首先运行初始化块,然后才运行构造器的主题部分。

小结:具体处理步骤

  • 所以数据域被初始化为默认值(0,false,null)
  • 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。
  • 执行构造函数。

关于析构和回收:

  • Java 有自动的垃圾回收器,不需要人工回收内存,所以Java 不支持析构器。

  • finalize 方法将在垃圾回收器清除对象之前调用。在实际应用中,不要依赖使用finalize 方法回收任何短缺的资源,这是因为很难知道这个方式什么时候才能够调用。

  • 在Java 中,package 与 import 语句类似于C++ 中的namespace 和 using 指令。

  • 如果没有在源文件中放置package 语句,这个源文件中的类就被放置在一个默认包(default package)中,默认包是一个没有名字的包。

2018年2月11日22:40:46
– end –