一、 单例设计模式
- 定义:通过只建立一个对象,解决问题
- 实现:
(1)为了避免其他程序过多的创建对象 先禁止其他程序创建该类对象私有化构造方法
(2)为了让其他程序可以访问到该对象 只好在本类中 创建一个对象
(3)为了方便其他程序对自定义对象的是访问 可以对外提供一个方法
3.步骤:
(1) 私有化构造方法
(2) 创建本类对象
(3) 对外暴漏一个可以访问该类的方法
4.特点:
(1)单例类只能有一个实例。
(2)单例类必须自己创建自己的唯一实例。
(3)单例类必须给所有其他对象提供这一实例。 懒汉式 和 饿汉式
5.好处
(1) 频繁创建对象,销毁对象,造成系统想能下降,浪费内存
(2) 饿汉式:类一加载,就创建本类对象 懒汉式:调用方法,才创建本类对象
二、 Object类的常用方法
- 定义: Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
- 常用方法
(1) boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
默认Object类中的equals方法 比较的是对象的地址值是否相同
==符号 和 equals()方法的区别****
==是一个比较运算符,既可以比较基本数据类型,又可以比较引用数据类型 基本数据类型比较的是值,引用数据类型,比较的是地址值
equals 只能比较引用数据类型
在方法重写前和==一样比较地址值,重写后比较的是对象中的属性值 一般都需要重写
(2) int hashCode() 返回该对象的哈希码值
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。
规定: 当 obj1.equals(obj2) 为true的时候 obj1.hashCode() == obj2.hashCode();
当obj1.equals(obj2) 为false的时候 obj1.hashCode() != obj2.hashCode();
(3) String toString() 返回该对象的字符串表示
三、 内部类
- 定义: 将一个类 定义在另一个类的里面 里面的那个类就叫做内部类 内置类 嵌套类
- 分类:成员内部类 静态内部类 局部内部类 匿名内部类
2.1成员内部类
2.1.1创建成员内部类对象格式:
外部类名.内部类名 变量名 = new 外部类对象.new内部类对象 Outer.Inner oi = new Outer().new Inner();
2.1.2特点:
(1)内部类可以直接访问外部类中的成员 包括私有的
(2)外部类如果想要访问内部类的成员 必须创建内部类对象
(3)当类为内部类的时候 可以使用private修饰 因为它是外部类的一个成员
(4)当内部类被私有化后 就不能在外部其他类中创建该类对象了
2.2静态内部类(当内部类被static修饰后)
2.2.1格式:
外部类名.内部类名 变量名 = new 外部类名.内部类对象Outer_02.Inner_02 oi = new Outer_02.Inner_02();
2.2.2 特点:
如果内部类被静态修饰了 那么只能访问外部类中被静态修饰的成员 访问出现了局限性
2.3局部内部类
2.3.1 特点:
放在类中方法中的类 在局部内部类 访问它所在的局部变量时 只能访问被final修饰的常量
2.4匿名内部类(内部类的简写模式)
2.4.1 前提条件:
内部类必须继承一个类或者实现一个接口
2.4.2 格式:
new 类或者接口名(){
重写方法
}.调用重写的方法();
2.4.3注意事项:
匿名内部类中定义的方法 最好不要超过3个