static的作用,修饰成员变量的用法
static是静态的意思,可以修饰成员变量,表示该成员变量在内存中只存储一份,可以被共享访问、修改。含义是无论通过这个类创建了多少对象,这些对象都共用这一块的内存。
成员变量可以分为两类,以及它们的访问方式
静态成员变量(有static修饰)
实例成员变量(无static修饰)
static修饰的成员变量的内存原理
静态成员变量属于类,有static修饰,只加载一次,可以被共享访问,随类的加载而为他分配内存,内存在静态变量区(是堆内存的子集)
static修饰成员方法的基本用法
成员方法的分类
静态成员方法(有static修饰,属于类),建议用类名访问,也可以用对象访问
实例成员方法(无static修饰,属于对象),只能用对象访问
实例成员方法的使用场景
表示对象而不是类的行为,并且方法中要访问实例成员的,就必须申明成实例方法
静态成员方法的使用场景
如果该方法是以执行一个通用功能为目的,或者需要方便访问,就可以声明为静态方法
static修饰成员方法的内存原理
工具类
工具类产生的原因
在实际开发时,有时候会对一个功能进行在不同场景下的开发,这样会出现代码重复性过高的问题
工具类的定义
对一些应用程序中多次需要用到的功能,可以将这些功能封装成静态方法,放在一个类中,这个类就是工具类
工具类的好处
工具类的原理和延伸
static的注意点
1.静态方法只能访问静态成员,不能直接访问实例成员,实例方法
因为静态方法属于类,实例成员属于对象,对象没有创建自然无法访问
2.实例方法既可以访问静态成员,静态方法,又可以访问实例成员,实例方法
使用实例方法时,对象已经创建
3.静态方法中不能出现this关键字
this表示的是当前对象,自然不能出现在静态方法中
代码块的简单介绍和代码块的类别
代码块是类的五大成分之一(成员变量,构造器,方法,代码块,内部类)定义在类中方法外
在Java类下,使用{ } 括起来的代码被称为是代码块
静态代码块
格式:static{}
特点:需要通过是static关键字修饰,随着类的加载而加载并优先执行,并且自动触发,而且只执行一次
适用场景:在类加载的时候做一些静态数据初始化操作,以便后续使用
package edu.dhu.objectdemo;
public class StringDemo {
public static int num;
public static void main(String[] args) {
System.out.println("main方法先执行");
System.out.println(num);
}
static {
num = 10;
System.out.println("静态代码块先执行");
}
}
特点解释:静态代码块在类加载之后会优先执行(和它在代码中的位置无关),优先于任何的方法(包括main方法)
构造代码块
格式:{}
特点:创建对象是通过构造器实现的,每次创建对象时,会先执行代码块中的代码,然后在执行构造器,也就是说在创建对象时,代码块的执行顺序在构造器之前(每创建一个对象它会执行一次)
适用场景:初始化实例资源
static应用知识:单例设计模式
什么是设计模式
设计模式是一套被前人反复使用,多数人知晓,经过分类编目的代码设计经验的总结,后来者可以拿来解决问题
设计模式是软件设计中的常见解决方案,好的设计模式可以进一步提高代码的重用性
单例模式
可以保证系统中,应用该模式的这个类永远只有一个实例,即一个雷永远只创建一个对象
单例的场景和作用
例如任务管理器对象我们只需要一个就能解决问题,这样就可以节省内存空间
单例的实现方式
饿汉单例模式
在用类获取对象的时候,对象已经为你提前创建好了
格式:
public class 类名{
public static 类名 变量名 =new 类名();//定义一个静态变量存储一个该类对象,由于是静态类型因此它只在类加载时创建一个
private 类名(){ //构造器必须私有(藏起来),不能被别人调用
}
}
懒汉单例模式
真正需要该对象的时候,才去创建一个对象(延迟加载对象)
格式:
public class 类名{
public static 类名 变量名;//声明一个静态变量存储一个该类对象(并不初始化),由于是静态类型因此它只在类加载时创建一个
private 类名(){ //构造器必须私有(藏起来),不能被别人调用
}
public static 类名 getInstance(){
'''
return ...;
}
}
特点:
定义一个类,构造器私有
定义一个静态变量存储一个对象(不初始化)
定义一个静态方法,做判断,如果没有初始化就初始化,已经初始化就不再操作
例子:
懒汉单例的静态变量一般私有