文章目录
简单概述
此文章是自己进行java学习的一个总结内容, 可能会有多篇内容.
设计模式
定义
软件行业发展后总结出来的一套思维模式.
模式种类
单例模式
定义
内存中有且仅有一个类的实例, 如何创建:
- 无参构造私有化
- 创建一个静态方法, 其返回值为类本身
- 创建一个由
static
与final
修饰的类成员变量.
单例模式分类
饿汉模式
饿汉模式当类进行创建时就会将对象创建
public class SingleObject{
// 创建一个由static与final修饰的类成员变量
private static final SingleObject instance = new Single();
// 私有化构造方法
private SingleObject(){}
// 创建一个静态方法, 获取此对象
public static SingleObject getInstance(){
return instance;
}
}
懒汉模式
懒汉模式当类进行调用创建方法时才进行对象的创建
- 懒汉模式-线程不安全版本
public class SingleObject{
// 创建一个由static与final修饰的类成员变量
private static final SingleObject instance = null;
// 私有化构造方法
private SingleObject(){}
// 创建一个静态方法, 获取此对象
public static SingleObject getInstance(){
if (instance == null) {
instance = new SingleObject();
}
return instance;
}
}
此模式版本单线程情况下, 没有问题, 但是一旦在多线程情况下就会出现问题, 没有加锁synchronized
.
- 懒汉模式-线程安全
public class SingleObject{
// 创建一个由static与final修饰的类成员变量
private static final SingleObject instance = null;
// 私有化构造方法
private SingleObject(){}
// 创建一个静态方法, 获取此对象
public static synchronized SingleObject getInstance(){
if (instance == null) {
instance = new SingleObject();
}
return instance;
}
}
此模式版本, 效率较低, 一般情况下不使用
- 懒汉模式-登记式
public class SingleObject{
// 创建一个静态内部类
private static class SingleHolder {
// 创建一个由static与final修饰的静态对象
private static final SingleObject INSTANCE = new SingleObject();
}
// 私有化构造方法
private SingleObject(){}
// 创建一个静态方法, 获取对象
public static final SingleObject getInstance(){
return SingleHolder.INSTANCE;
}
}
static关键字
静态代码块
定义
在一个代码块外加一个static
关键字就可以定义一个静态代码块, 其中代码块要满足在类中, 且再方法外.
作用
静态代码块可以进行预加载提升运行效率, 而作为相反懒加载则是使用时才进行加载, 这种情况下可以节省资源的使用.
静态常量
定义
由static
和final
关键字修饰的变量称之为静态常量, 对于接口来说其默认构建的变量由public static final
进行修饰, 因此我们可以直接写一个接口来表示所有的静态常量.
作用
其作用就是用来定义一个常量, 如果出现一些类似的操作, 比如我们要在switch中使用类似1, 2, 3这些数组来表示周一, 周二, 周三, 此时我们可以直接定义一个静态常量来代替数字常量, 增加代码的可读性.
权限修饰符
定义
权限修饰符主要是用来限定类, 方法, 变量使用的作用域范围的, 总共有4个: public
, protected
, 默认的
, private
.
权限范围表
public | protected | 默认的 | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中(子类与无关类) | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
内部类
定义
写在类中类就可以称之为内部类
格式
创建
class 外部类{
class 内部类{
}
}
访问
外部类名.内部类名 对象名 = new 外部类().new 内部类();
分类
成员内部类
定义
在类中同成员变量与成员方法平级创建的类就称之为成员内部类.
特点
- 没有静态修饰
- 无限制访问外部类的平级内容
静态内部类
定义
在类中同静态变量和静态方法平级创建的类就称之为静态内部类, 静态内部类由static
修饰
特点
其内部可以定义静态成员变量和非静态成员变量
静态内部类的使用
- 调用静态内部类当中的静态成员
外部类名.内部类名.静态成员名称;
- 调用静态内部类当中的非静态成员
外部类名.内部类名 对象名 = new 外部类名.内部类名();
对象名.非静态成员
局部内部类-了解
定义
定义在方法中的类, 其与局部变量是平级关系.
匿名内部类
定义
其可以定义任意位置, 是一个没有名字的内部类.
条件
- 重写内部方法的父类或者抽象类的接口
- 方法内部直接new父类名称或者抽象类接口名
- 格式
new 父类(){
父类需要重写的方法;
}
new 接口(){
接口需要重写的方法;
}
分类
- 普通类匿名内部类
- 抽象类匿名内部类
- 接口类匿名内部类
使用场景
当接口或者类中需要重写的方法少于4个时可以调用匿名内部类进行重写.
其他
引用类型的传递
引用类型在方法的参数列表和方法的返回值中传递的是引用类型的地址.
如果是抽象类, 则是继承抽象类的子类对象; 如果是接口, 则是实现接口的实现类对象.
组合类
一个类中的成员变量利用到了另一个类, 这种情况下该类称为组合类.
关于我
我的Github: PorterZhang2021
我的博客地址:PorterZhang