1.static的基本使用
用于修饰成员变量和成员方法
被修饰的成员(包括成员变量和成员方法)会随着类的加载而加载,如果被修饰的是成员变量,此时就会在在类加载时候直接在堆中创建一片空间用于存储成员变量的值,如果是成员方法,就随着类的加载加载进方法区。
2.代码块的使用
2.1static静态代码块
用于在类加载的时候初始化静态成员变量的值,示例如下:
//属性:一副扑克牌,可以使用集合存储54个扑克牌
public static ArrayList<String> pooker = new ArrayList<>();
//花色字符串数组已提供
static String[] hua = {"♥", "♦", "♣", "♠"};
//字字符串数组已提供
static String[] zi = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
//将花色和数组放入集合中
//先遍历花
static {
for (int i = 0; i < hua.length; i++) {
for (int j = 0; j < zi.length; j++) {
String str = hua[i] + zi[j];
pooker.add(str);
}
}
pooker.add("大王");
pooker.add("小王");
}
2.2构造代码块
用于在创建对象的时候在执行构造函数之前执行一段代码,因为同一个类中多个构造函数中可能有重复的代码,提高了复用性。
private int a;
//构造代码块
{
System.out.println("好好学习");
}
public Teacher() {
System.out.println("空参数构造方法");
}
public Teacher(int a) {
System.out.println("带参数的构造方法...");
}
}
3.饿汉,懒汉单例模式
设计模式是前人推荐的一种解决问题的方案,经过了很多年的考验。
单例模式的类需要先将构造函数私有化,原因是不可以随意创建对象。然后要在类里面创建这个类的对象,并使用一个静态变量存储(用于被静态方法使用),再定义一个静态方法用于返回刚刚创建的对象。
3.1饿汉单例模式
在调用类的时候就创建对象,即使不一定需要创建,示例如下
public class SingleInstance {
//私有构造方法
private SingleInstance() {
}
//在定义静态变量的同时,用new创建一个对象,并且让这个静态变量记住这个对象
private static SingleInstance si = new SingleInstance();
//定义一个方法返回刚刚创建的对象
public static SingleInstance getSingleInstance() {
return si;
}
}
3.2懒汉单例模式
在需要使用对象的时候创建,就是在调用返回对象的方法里面创建,并且判断对象是否存在,如果不存在,才创建,实例如下
//静态属性记录了一个Music对象,类加载对象就创建,属于饿汉单例模式
//private static QQ qq = new QQ();
private static QQ qq;
//构造方法中使用打印语句模拟了创建音乐对象时,下载歌曲数据的过程
private QQ() {
System.out.println("=============================");
System.out.println("QQ软件153M,准备联网下载");
System.out.println("下载中...");
System.out.println("下载完毕,耗时10分钟!!!");
System.out.println("=============================");
}
/**
* 下载歌曲,获取音乐对象
*/
public static QQ getInstance() {
if (qq == null) {
System.out.println("yes");
//如果成立,则需要通过new创建qq对象
qq = new QQ();
}
return qq;
}
/**
* 展示歌曲信息
*/
public static void show() {
System.out.println("QQ,是腾讯QQ的简称,是一款基于互联网的即时通信软件");
System.out.println("QQ已经覆盖了Windows、macOS、iPadOS、Android、iOS、Windows Phone、Linux等多种主流平台");
System.out.println("其标志是一只戴着红色围巾的小企鹅");
System.out.println("腾讯QQ支持在线聊天、视频通话、点对点断点续传文件、共享文件、网络硬盘、自定义面板、QQ邮箱等多种功能,并可与多种通讯终端相连");
}