JAVA内部类和设计模式

今天是来到天亮的第16天,今天主要讲了内部类和设计模式。

内部类:定义在类里的类,一般是让外部类使用,还有可以访问外部类私有化属性。

分类 : 
           成员变量 --> 成员内部类/普通内部类
           静态变量 --> 静态内部类
           局部变量 --> 局部内部类
           形参/实参 --> 匿名内部类

可以看似。

内部类分为:成员内部类,静态内部类,局部内部类,匿名内部类。

成员内部类:

不能有静态声明,可以用权限控制修饰符,可以直接访问外部类属性。

内部类的类名 : 外部类$内部类。

静态内部类:

可以用权限控制修饰符,可以声明所有属性,静态成员

可以访问外部类静态属性,加上外部类名可以访问成员属性。

局部内部类:

不能有静态声明,不能用static和权限控制修饰符修饰,

如果外部方法是静态方法,则局部内部类不能直接访问外部类的成员属性,

如果外部方法 是成员方法,则局部内部类中可以直接访问外部类的所有属性。

如果使用外部方法中的局部变量,变量必须用final修饰(1.8开始,可以省略)

匿名内部类:(重点,用的最多)

在方法调用的时候,需要传入一个类的对象,这个时候可以直接传入一个匿名内部类,一般该对象,是接口的实现类对象,匿名内部类 等于是子类,可以使用super等关键字;

语法 : 方法(new 父类/接口(){ 类体 });

好处 少定义一个类,缺点 无法重复使用.

设计模式:

人们总结的编码方式,形参了固定的结构,就是固定模式。

单例模式 :实例化多次,得到同一个对象,让某个类只能被实例化一次。

实现思路:

1.不能让用户创建对象,构造方法私有化

2.对象由我们创建一个给用户,并只创建一次即可,提供获取对象的方法,必定是静态方法(成员方法需要对象调用,而没有对象)。

3.保证每次创建的对象地址唯一,设定一个变量局部变量 : 具有临时性,方法执行完后就不存在了,下一次调用该方法时,变量重新初始化
                      成员变量 : 静态方法中不能 操作成员变量
                       静态变量 : 和类相关,和类生命周期一致
               所以应该创建一个用来保存当前类对象的静态变量

过程:1.构造方法私有化2,提供一个私有的静态的用来保存当前类对象的静态变量,3提供一个公共的静态方法,用来获取该对象

根据创建对象时机不同,分为两种1.懒汉模式,用的时候在创建对象2.类加载直接创建对象。

区别:1.内存,懒汉模式好一些,恶汉浪费内存

           2.线程安全:饿汉模式是在类加载阶段就初始化的,所以在多线程环境下没有问题,因为类在生命周期中只会加载一次,懒汉模式在多线程并发性的情况下,就不行了,可能创建多个对象,但是可以通过双重校验加锁解决
所以,一般我们使用懒汉模式居多,尽管在多线程下,也使用懒汉模式,使用双重校验加锁解决并发问题即可 。

工厂模式:

工厂模式顾名思义就是创建一个工厂类,要什么就输出什么,在增加产品时,不必更改用户类代码,只需更改工厂类代码即可。

但是工厂模式会增加代码复杂度,因为增加了类,所以在复杂的对象关系中才适合使用工厂模式,简单的对象无需使用工厂模式,徒徒增加复杂度。例:

public class DaiMa8 {
    public static void main(String[] args) {
        A a = new A();
//         a = new B();
        a = AFactory.getA();
        a = AFactory.getB();
        a = AFactory.getC();
        a = AFactory.getA();
        a = AFactory.getA();
        a = AFactory.getA();
    }
}

class AFactory {
    public static A getA() {
        return new A();
    }
    public static B getB() {
        return new B();
    }
    public static C getC() {
        return new C();
    }
}
class A {

}
class B extends A {

}
class C extends A {

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值