变量与对象 final关键字 和 static关键字
2021-05-01 本文已影响0人
_River_
1:变量与对象
Bean bean = new Bean();
这个bean即是对象 但 同时也是变量
回到最开始对变量与对象最基本的定义:
变量的定义:【数据类型】 【变量名】;
数据类型又分为两种:基本数据类型和引用数据类型。
基本数据类型:int long 等等等等
引用数据类型:String 等等
那么对象呢?
实际上String不就是对象吗 因此对象也就是变量的一种 ,只不过是引用对象类型的变量。
2:final与static的定义
Final(最终的)final修饰类 类不能被继承
final修饰方法 方法不能被重写
final修饰的变量为常量 值不能被改变
修饰变量后,该值必须赋值并且不可以被修改
注意:
final修饰的变量初始化变为常量 也是在类加载阶段执行
final修饰的变量初始化变为常量 也是在类加载阶段执行
final修饰的变量初始化变为常量 也是在类加载阶段执行
static不能修饰类
静态方法可以用 类名.静态方法名 直接使用
静态变量可以 类名. 静态变量名称 直接使用
如果属性或者方法没有被static 则需要先把该类的对象创建出来
对象名.方法名 使用普通方法
对象名.变量名 使用普通变量
第一次:new Bean(); 类会进行懒加载 (类加载仅执行一次) 这时候会执行static修饰的静态代码块 并且初始化 静态变量
new Bean();
第二次:new Bean(); 这个时候不会进行类加载了
new Bean();
特别注意:
用static修饰的变量时, 在类加载时就会去初始化变量 而静态方法时需要调用的时候才执行
用static修饰的变量时, 在类加载时就会去初始化变量 而静态方法时需要调用的时候才执行
用static修饰的变量时, 在类加载时就会去初始化变量 而静态方法时需要调用的时候才执行
特别注意:
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块。
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块。
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块。
3:final与static 一起使用
final和static一起用
static final用来修饰成员变量和成员方法,可简单理解为全局常量
修饰变量,表示一旦赋值就不能修改,可以通过类名可以访问。
修饰方法,表示不可以覆盖,可以通过类名直接访问
例子:被 final修饰的变量必须赋值
public final static String string=“hesuijin”;
4:对于单例模式 final static 他们之间有什么关系
个人认为 他们没有任何关系
只因他们所各有的特质,搭配起来使用,可以达到单例的效果。
虽然final 修饰的这个变量本身是不能被改变的,但并不妨碍我new出更多的uniqueInstance。
注意:现在把final去掉 也可以生成单例
但是注意每一次都会把这个单例重新初始化
你首先要明白final修饰变量的功能是,一次初始化不能再被修改,既然是私有变量,就只考虑内部对这个变量的处理了,
如果需要修改就不加final 而在单例模式中,如果存在释放资源的情况下,就不能加final修饰
public void releaseInstance(){
if(instance != null){
instance = null;
}
}
饿汉式:在类加载时产生单例对象
懒汉式:在静态方法被调用时产生单例对象
对于单例的更多深入了解,请查看单例设计模式(双重校验 饿汉式 懒汉式的选择)
//饿汉式
public class Singleton {
//1:类加载时 静态变量需要初始化
private static Singleton uniqueInstance = new Singleton();
//2:由于步骤1 导致需要执行 Singleton构造方法
private Singleton (){}
public static Singleton getInstance() {
return uniqueInstance ;
}
}
//懒汉式
public class Singleton {
//1:类加载时 定义一个静态变量存储当前类的对象
private static Singleton uniqueInstance = null;
//3:由于步骤2 导致需要执行 Singleton构造方法
private Singleton(){}
//2:在该静态方法调用时 定义一个静态方法返回类的对象
public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}