JavaSE总结笔记-5

简单概述

此文章是自己进行java学习的一个总结内容, 可能会有多篇内容.

设计模式

定义

软件行业发展后总结出来的一套思维模式.

模式种类

单例模式

定义

内存中有且仅有一个类的实例, 如何创建:

  1. 无参构造私有化
  2. 创建一个静态方法, 其返回值为类本身
  3. 创建一个由staticfinal修饰的类成员变量.
单例模式分类
饿汉模式

饿汉模式当类进行创建时就会将对象创建

public class SingleObject{
	// 创建一个由static与final修饰的类成员变量
	private static final SingleObject instance = new Single();
	// 私有化构造方法
	private SingleObject(){}
	// 创建一个静态方法, 获取此对象
	public static SingleObject getInstance(){
		return instance;
	}
}
懒汉模式

懒汉模式当类进行调用创建方法时才进行对象的创建

  1. 懒汉模式-线程不安全版本
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.

  1. 懒汉模式-线程安全
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;
	}
}

此模式版本, 效率较低, 一般情况下不使用

  1. 懒汉模式-登记式
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关键字就可以定义一个静态代码块, 其中代码块要满足在类中, 且再方法外.

作用

静态代码块可以进行预加载提升运行效率, 而作为相反懒加载则是使用时才进行加载, 这种情况下可以节省资源的使用.

静态常量

定义

staticfinal关键字修饰的变量称之为静态常量, 对于接口来说其默认构建的变量由public static final进行修饰, 因此我们可以直接写一个接口来表示所有的静态常量.

作用

其作用就是用来定义一个常量, 如果出现一些类似的操作, 比如我们要在switch中使用类似1, 2, 3这些数组来表示周一, 周二, 周三, 此时我们可以直接定义一个静态常量来代替数字常量, 增加代码的可读性.

权限修饰符

定义

权限修饰符主要是用来限定类, 方法, 变量使用的作用域范围的, 总共有4个: public, protected, 默认的, private.

权限范围表

publicprotected默认的private
同一类中
同一包中(子类与无关类)
不同包的子类
不同包中的无关类

内部类

定义

写在类中类就可以称之为内部类

格式

创建

class 外部类{
	class 内部类{
		
	}
}

访问

外部类名.内部类名 对象名 = new 外部类().new 内部类();

分类

成员内部类

定义

在类中同成员变量与成员方法平级创建的类就称之为成员内部类.

特点
  1. 没有静态修饰
  2. 无限制访问外部类的平级内容

静态内部类

定义

在类中同静态变量和静态方法平级创建的类就称之为静态内部类, 静态内部类由static修饰

特点

其内部可以定义静态成员变量和非静态成员变量

静态内部类的使用
  1. 调用静态内部类当中的静态成员
外部类名.内部类名.静态成员名称;
  1. 调用静态内部类当中的非静态成员
外部类名.内部类名 对象名 = new 外部类名.内部类名();
对象名.非静态成员

局部内部类-了解

定义

定义在方法中的类, 其与局部变量是平级关系.

匿名内部类

定义

其可以定义任意位置, 是一个没有名字的内部类.

条件
  1. 重写内部方法的父类或者抽象类的接口
  2. 方法内部直接new父类名称或者抽象类接口名
  3. 格式
new 父类(){
	父类需要重写的方法;
}
new 接口(){
	接口需要重写的方法;
}
分类
  1. 普通类匿名内部类
  2. 抽象类匿名内部类
  3. 接口类匿名内部类
使用场景

当接口或者类中需要重写的方法少于4个时可以调用匿名内部类进行重写.

其他

引用类型的传递

引用类型在方法的参数列表和方法的返回值中传递的是引用类型的地址.

如果是抽象类, 则是继承抽象类的子类对象; 如果是接口, 则是实现接口的实现类对象.

组合类

一个类中的成员变量利用到了另一个类, 这种情况下该类称为组合类.

关于我

我的Github: PorterZhang2021
我的博客地址:PorterZhang

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值