美文网首页
变量与对象 final关键字 和 static关键字

变量与对象 final关键字 和 static关键字

作者: _River_ | 来源:发表于2021-05-01 20:55 被阅读0次
    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;
        }
    }
    

    相关文章

      网友评论

          本文标题:变量与对象 final关键字 和 static关键字

          本文链接:https://www.haomeiwen.com/subject/ozkzrltx.html