Java回炉学习(三)

Java回炉学习(三)

1. 单例模式

  • 构造器私有化 -> 防止直接 new
  • 类的内部创建对象
  • 向外暴露一个静态的公共方法,返回单例对象
  • 一个类有且只有一个适用

2. 饿汉式和懒汉式的区别

  • 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
  • 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(后面学习线程后,会完善一把)
  • 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
  • 在我们javaSE标准类中,java.lang.Runtime就是经典的单例模式。

3. final关键字

  • 当不希望类被继承时,可以用final修饰.
  • 当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字
  • 当不希望类的的某个属性的值被修改,可以用final修饰.
  • 当不希望某个局部变量被修改,可以使用final修饰
  • 一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法。final不能修饰构造方法(即构造器)
  • final和static 往往搭配使用,效率更高,不会导致类加载.底层编译器做了优化处理。
  • 包装类(Integer, Double,Float, Boolean等都是final),String也是final类。

4. abstract关键字

​ 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。

  • 抽象类不能被实例化
  • 抽象类不一定要包含abstract方法。 也就是说,抽象类可以没有abstract方法
  • 一旦类包含了abstract方法,则这个类必须声明为abstract
  • abstract只能修饰类和方法,不能修饰属性和其它的。
  • 抽象类可以有任意成员[抽象类本质还是类]
  • 抽象方法不能有主体,即不能实现
  • 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类
  • 抽象方法不能使用private、final 和static来修饰,因为这些关键字都是和重写相违背的。

5. 模板设计模式

​ 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造但子类总体上会保留抽象类的行为方式。

6. 接口

​ 小结:接口是更加抽象的抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体jdk7.0 。接口体现了程序设计的多态和高内聚低偶合的设计思想。

  • 接口不能被实例化
  • 接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
  • 一个普通类实现接口,就必须将该接口的所有方法都实现
  • 抽象类实现接口,可以不用实现接口的方法
  • 一个类同时可以实现多个接口
  • 接口中的属性,只能是final的,而且是public static final修饰符。比如:int a=1;实际上是public static final int a= 1; (必须初始化)
  • 接口中属性的访问形式接口名.属性名
  • 接口不能继承其它的类,但是可以继承多个别的接口

7. 实现接口和继承类区别

  • 如果子类需要扩展功能,可以通过实现接口的方式扩展.
  • 可以理解实现接口 是 对 java 单继承机制的一种补充

8. 内部类

​ 个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成员[思考:类的五大成员是哪些?[属性、方法、构造器、代码块、内部类],内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系,注意:内部类是学习的难点,同时也是重点,后面看底层源码时,有大量的内部类.内部类分为两类:

  1. 定义在外部类局部位置上:
    • 局部内部类(有类名)
    • 匿名内部类(没有类名
  2. 定义在外部类的成员位置上:
    • 成员内部类(没有static修饰)
    • 静态内部类(使用static修饰)

9. 局部内部类的使用

  1. 说明: 局部内部类是定义在外部类的局部位置, 比如方法中,并且有类名。
  2. 可以直接访问外部类的所有成员,包含私有的
  3. 不能添加访问修修饰符的。但是可以使用final修饰,因为局部变量也可以使用final饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final
  4. 作用域 :仅仅在定义它的方法或代码块中
  5. 局部内部类—访问---->外部类的成员[访问方式:直接访问]
  6. 外部类—访向---->局部内部类的成员,访问方式:创建对象,再访问(注意:必须在作用域内)
  7. 外部其他类–不能访---->局部内部类**(因为局部内部类地位是一个局部变量)**
  8. 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员) 去访问

10. 匿名内部类

  1. 本质还是类;内部类;该类没有名字;同时还是一个对象
  2. 说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名
  3. 匿名内部类的语法比较奇特,请大家注意,因为匿名内部类既是一个类的定义,同时它本身也是一个对象,因此从语法上看,它既有定义类的特征,也有创建对象的特征,对前面代码分析可以看出这个特点,因此可以调用匿名内部类方法。
  4. 可以直接访问外部类的所有成员,包含私有的
  5. 不能添加访问修饰符,因为它的地位就是一个局部变量。
  6. 作用域:仅仅在定义它的方法或代码块中
  7. 匿名内部类—访向---->外部类成员[访问方式:直接访问]
  8. 外部其他类—不能访向---->匿名内部类(因为匿名内部类地位是一个局部变量)
  9. 如果外部类和匿名内部类的成员重名时,匿名内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员) 去访问
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程哥哥吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值