目录
一、高级语言区分类
二、面向对象分析方法
三、面向对象的两个要素
四、类和对象的实现过程
五、变量赋值
六、高内聚低耦合
七、封装性的体现
八、构造器
九、权限修饰符
十、继承性
十一、多态性
十二、在eclipse中进行Junit单元测试的步骤
十三、Object类和包装类
十四、杂项
十五、面试题
一、高级语言区分类
- 面向过程:强调功能行为,以函数为最小单位,考虑怎么做。
- 面向对象:强调具备某功能的对象,以类/对象为最小单位,考虑谁做
二、面向对象分析方法
- 根据问题,确定问题中要针对的是现实中的实体。(谁)
- 找出所需要的实体属性和功能,汇总起来形成概念中的类。(汇总需要的特性)
- 抽象的实体通过计算机语言描述,形成计算机世界中类的定义。即把类通过某些工具(编程语言)做成计算机能够识别处理的信息数据(数据结构)。(转成编程语言)
- 类的实例化形成计算机世界中的对象,通过对象解决计算机世界中的任一问题。(实例化解决问题)
- 问题举例:收银员统计商品的金额。收银员和商品均可作为一个类。
三、面向对象的两个要素
- 类:对一类事物的描述,是抽象的、概念上的定义。
- 类的成员:属性(成员变量)、行为(成员方法、函数)。
- 对象:是实际存在的该类事物的每个个体,也被称为实例。
四、类和对象的实现过程
- 创建类,设计类的成员
- 创建类的对象
- 通过 “对象.属性” 或 “对象.方法” 调用对象的结构。
五、变量赋值
- 变量为基本数据类型,赋值为变量保存数据值。
- 变量为引用数据类型,赋值为变量保存数据的地址值(含变量的数据类型)。
六、高内聚低耦合
- 高内聚:类的内部操作数据细节自动完成,不受外界干扰。
- 低耦合:仅暴露少量的方法开放外部使用。
七、封装性的体现
- 将类的属性 xxx 私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值。
- 不对外暴露私有的方法。
- 单例模式。
八、构造器
- 名称与类相同。
- 不声明返回值类型(勿与void声明混淆)。
- 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值。
- 创建对象。
- 初始化对象的信息。
- 若没有显式定义类的构造器,则系统默认提供一个无参构造器(一个类中至少有一个构造器)。
- 若已显式定义类的构造器,则系统不在提供默认无参构造器,需要自己书写。
- 定义构造器的格式:权限修饰符 类名(形参列表){} 。如 public show(int n){}。
- 一个类中定义的多个构造器,彼此间构成重载。
九、权限修饰符
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
private | Yes | | | |
default | Yes | Yes | | |
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
十、继承性
???????class A extends B{},其中A为子类(派生类、subclass),B为父类(超类、基类、superclass)。
- 一个类可被多个子类继承。
- 单继承性:一个子类只能有一个父类。
- 子父类是相对概念。即子类直接继承的父类被称为直接父类,间接继承的被称为间接父类。
- 子类继承父类后,即可获取直接父类以及所有间接父类中声明的属性和方法。
- 若没有显式声明类的父类,则该类继承java.lang.Object类。
- 所有java类(除java.lang.Object类外)都直接或间接继承java.lang.Object类。
- 若子类A继承父类B之后,子类A可获取父类B中的结构(属性、方法)。
- 特别地,父类中声明为private的属性和方法,子类继承父类后,仍可获取父类中私有的结构,但因封装性的影响,子类无法直接调用父类的该结构。
- 子类继承父类以后,仍可声明自身特有的属性和方法,实现功能的拓展。
- 减少冗余代码,提高代码复用性。
- 便于功能的扩展。
- 为多态的使用提供前提。
十一、多态性
- 理解:父类的引用指向子类的对象(或子类的对象赋给父类的引用)<向上转型>。
- 使用(虚拟方法调用):当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法。即在编译期,只能调用父类中声明的方法,但在运行期,实际执行的是子类重写父类的方法。(总结:编译看[等号]左边,运行靠右边)。
- 注:多态性只适用于方法。
- 编外:若子类重写了父类的方法,则子类中定义的方法彻底覆盖父类中的同名方法;但实例变量无法彻底覆盖父类中定义的实例变量,父类和子类仍可各自调用该同名实例变量。
十二、在eclipse中进行Junit单元测试的步骤
- 选中当前工程->单元选择:Build Path ->Configure Build Path ->Libraries ->Classpath ->Add Library ->JUnit ->Next -> Finish
- 创建Java类,进行单元测试(注:要求该Java类此时:①此类是public的。②此类提供public权限的无参构造器)。
- 此类中声明单元测试方法(注:此时单元测试方法的权限为public,无返回值,无形参)。
- 此单元测试方法上需要声明注解(需在单元测试类中导包:import org.junit.Test;):@Test。
- 声明单元测试方法后,即可在方法体内写入相关代码。
- 代码写入后,左键单元测试方法名,右键Run As ->JUnit Test。
- 说明
- 若执行结果没有异常,显示绿色进度条。
- 若执行结果出现异常,显示红色进度条。
十三、Object类和包装类
- Object(java.lang.Object)类
- Object类是所有Java类的根父类。
- 若在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类。
- Object类中的功能(属性和方法)具备通用性。
? ? ? ? ? ? ? ? -->equals():对象比较。??
性质 ? | 用途解析 |
对称性 | 若x.equals(y)返回true,则y.equals(x)也返回true。 |
自反性 | x.equals(x)必须返回true。 |
传递性 | 若x.equals(y)返回true,且y.equals(z)也返回true,则x.equals(z)返回true。 |
一致性 | 若x.equals(y)返回true,则只要x和y内容不变,x.equals(y)一直为true。 |
x.equals(null)永为false。x.equals(y)[y和x不同类型的对象]永为false。 |
????????????????-->toString():对象打印。
????????4.Object类中只声明了一个空参的构造器。
| 基本数据类型 | 包装类 | 基本数据类型 | 包装类 |
包装类对应父类:Number | byte | Byte | short | Short |
int | Integer | long | Long |
float | Float | double | Double |
| Boolean | Boolean | char | Character |
?
- 自动装箱:基本数据类型 --> 包装类(举例:int num_2 = 22; Integer in_1 = num_2;)。
- 自动拆箱:包装类 --> 基本数据类型(举例<结合自动装箱的例子>:int num_3 = in_1;)
十四、杂项
- 局部变量(不包括形参)没有初始值。
- 在方法中,可以调用当前类的属性或方法,但不可以定义方法。
- 内存解析说明:引用类型的变量,只可能存储两类值: null 或 地址值(含变量的类型)。
- 匿名对象的使用:new Student().show(); 注:Student为对象名,show为方法名匿名对象仅可次单次调用。
- 方法重载:同一个类中,允许存在一个以上的同名方法,但需要它们的参数个数或参数类型不同。即同一个类,相同方法名,参数列表(个数/类型)不同,又称“两同一不同”。
- 可变个数形参的格式:数据类型 … 形参名 。
- Java中方法的参数传递方式只有一种,即值传递。
- 赋值优先级:默认初始化 -> 显式初始化 -> 构造器中初始化 -> 通过“对象.方法“或”对象.属性“的方式赋值。
- JavaBean(可重用组件<类>)定义标准:1、类是公共的。2、有一个无参的公共构造器。3、有属性,且有对应的get、set方法。
- this关键字可理解为当前对象(方法中)或当前正在创建的对象(构造器中)。
- 方法重写:子类继承父类,对父类中同名同参的方法进行覆盖操作(重新写方法体)。
- super:子类中调用父类的属性或方法,格式为“super.属性“或”super.方法“。
- instanceof:判断(a instanceof A)中对象a是否为类A的实例,是则返回true,反之false。常用于向下转型时使用,避免转型失败直接报错而停止运行后续程序。
- 自动装箱注意点:Integer内部已定义IntegerCache结构,其中又定义Integer[],用于保存范围为-128~127的整数。若自动装箱时,对Integer赋值的范围符合Integer[],则直接指向该数组中元素,而不是重新创建(new)一个Integer对象,进而提高效率。反之,若不在Integer[]范围,则需要重新创建Integer对象来存放数据。
十五、面试题
- “==”与equals的区别
- 可以在基本数据类型和引用数据类型变量中使用。
- 若比较的是基本数据类型变量,则比较两个变量保存的数据是否相等(类型不一定相同)。
- 若比较的是引用数据类型变量,则比较两个变量的地址值是否相同,即两个引用是否指向同一对象实体。
- 只适用于引用数据类型。
- Object类中equals()方法的定义:
? ?public boolean equals(Object obj) {
?? ??????????? return (this == obj);
?? }
? ?说明:Object类中定义的equals()和“==”的作用是相同的,即比较两个变量的地址值是否相同。
- 如String、Date、File、包装类等皆已重写Object类中的equals()方法。则重写之后,比较的是两个对象的“实体内容”是否相同。
- 自定义类为使用equals()方法来比较两个对象(该类)的“实体内容”是否相同,需要重写Object类中的equals()方法。重写要求:比较两个对象的“实体内容”是否都相同。