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)。是我们类的第五大成员[思考:类的五大成员是哪些?[属性、方法、构造器、代码块、内部类],内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系,注意:内部类是学习的难点,同时也是重点,后面看底层源码时,有大量的内部类.内部类分为两类:
- 定义在外部类局部位置上:
- 局部内部类(有类名)
- 匿名内部类(没有类名)
- 定义在外部类的成员位置上:
- 成员内部类(没有static修饰)
- 静态内部类(使用static修饰)
9. 局部内部类的使用
- 说明: 局部内部类是定义在外部类的局部位置, 比如方法中,并且有类名。
- 可以直接访问外部类的所有成员,包含私有的
- 不能添加访问修修饰符的。但是可以使用final修饰,因为局部变量也可以使用final饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final
- 作用域 :仅仅在定义它的方法或代码块中。
- 局部内部类—访问---->外部类的成员[访问方式:直接访问]
- 外部类—访向---->局部内部类的成员,访问方式:创建对象,再访问(注意:必须在作用域内)
- 外部其他类–不能访---->局部内部类**(因为局部内部类地位是一个局部变量)**
- 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员) 去访问
10. 匿名内部类
- 本质还是类;内部类;该类没有名字;同时还是一个对象
- 说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名
- 匿名内部类的语法比较奇特,请大家注意,因为匿名内部类既是一个类的定义,同时它本身也是一个对象,因此从语法上看,它既有定义类的特征,也有创建对象的特征,对前面代码分析可以看出这个特点,因此可以调用匿名内部类方法。
- 可以直接访问外部类的所有成员,包含私有的
- 不能添加访问修饰符,因为它的地位就是一个局部变量。
- 作用域:仅仅在定义它的方法或代码块中。
- 匿名内部类—访向---->外部类成员[访问方式:直接访问]
- 外部其他类—不能访向---->匿名内部类(因为匿名内部类地位是一个局部变量)
- 如果外部类和匿名内部类的成员重名时,匿名内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员) 去访问
Java回炉学习(三)相关推荐
- Java回炉学习(一)
Java回炉学习(一) 参考至:韩顺平_循序渐进学java 1. JDK.JRE基本介绍 JDK全称(Java Development Kit,Java开发工具包) JDK=JRE+Java开发工具( ...
- Java回炉学习(七)
Java回炉学习(七) 1. 泛型 泛型的好处:1. 编译时,检查添加元素的类型,提高了安全性 2. 减少了类型转换的次数,提高效率 //泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型 ...
- Java并发学习三:银行转账的死锁问题解决及示例
Java并发学习系列文章:Java并发学习-博客专栏 今天在学习极客时间专栏:<Java并发编程实战> 从03 | 互斥锁(上):解决原子性问题到06 | 用"等待-通知&quo ...
- Java多线程学习三十八:你知道什么是 CAS 吗
CAS 简介 CAS 其实是我们面试中的常客,因为它是原子类的底层原理,同时也是乐观锁的原理,所以当你去面试的时候,经常会遇到这样的问题"你知道哪些类型的锁"?你可能会回答&quo ...
- java泛型学习三:受限制的通配符以及泛型方法
一.受限制的通配符 package generic; import generic.windcard.Circle; import generic.windcard.Shape; import ...
- Java多线程学习三十七:volatile 的作用是什么?与 synchronized 有什么异同
volatile 是什么 首先我们就来介绍一下 volatile,它是 Java 中的一个关键字,是一种同步机制.当某个变量是共享变量,且这个变量是被 volatile 修饰的,那么在修改了这个变量的 ...
- Java多线程学习三十三:Future 的主要功能是什么?
Future 类 Future 的作用 Future 最主要的作用是,比如当做一定运算的时候,运算过程可能比较耗时,有时会去查数据库,或是繁重的计算,比如压缩.加密等,在这种情况下,如果我们一直在原地 ...
- java多线程学习三
本章主要学习线程的静态方法 1.先忙先看一段代码: public class MyThread3 implements Runnable {static {System.out.println(&qu ...
- Java多线程学习三十九:CAS 有什么缺点?
CAS 有哪几个主要的缺点. 首先,CAS 最大的缺点就是 ABA 问题. 决定 CAS 是否进行 swap 的判断标准是"当前的值和预期的值是否一致",如果一致,就认为在此期间这 ...
最新文章
- CSS3动画过渡的jquery动态弹出框插件
- 学python用什么系统好-Python用什么系统环境好?老男孩Python
- 单因素方差分析_基于R语言开展方差分析(一)——单因素方差分析
- 【转】Qtcreator中常用快捷键和小技巧
- Anaconda是什么?Anconda下载安装教程 - Python零基础入门教程
- vim 高亮显示php代码
- HTTP协议方法及状态码(HTTP协议入门必备)
- 一加Nord或在国内上市:骁龙765G+90Hz双孔OLED屏
- LeetCode_database刷题记录(182. 查找重复的电子邮箱)
- VBA实战技巧精粹014:关于Range总结
- as400 编程语言c,AS400_RPG入门
- python爬取南京市房价_屌丝想买房,爬取南京20000多套二手房|上篇
- MATLAB 绘图笔记——绘制两端尖角colorbar
- android二维码图片生成模糊的问题
- 天干、地支纪年 月 日
- C/C++中生成随机序列——随机函数的选择和自我实现
- 【SQL管理】-Flyway数据库版本管理利器从入门到入味
- 实验七 函数程序设计 张玉生《C语言程序设计实训教程》双色版 配套实验书答案 (纯手打, 仅供参考)
- 爱是什么~~~~~~
- zha男/女的三种境界