[Java][面向对象进阶]static

本文探讨了Java中静态成员变量的特性,如何通过static关键字修饰成员变量,以及静态方法和静态代码块的内存原理。重点介绍了饿汉模式和懒汉模式的单例模式实现,帮助读者掌握工具类的静态方法设计和单例类的最佳实践。
摘要由CSDN通过智能技术生成

static

用于修饰成员变量,只在内存中存储一份,可被共享访问和修改。

在类中定义:

访问:

内存原理:

static方法与类,main方法一起加载到方法区;

遇到static方法的调用时,直接到方法区中调(实例方法是通过构建对象调用);

 注意事项:

(1)静态方法中不可出现this(this用于指向当前所在对象,静态方法可能未通过对象调用)

(2)静态方法只能访问静态成员,实例方法都可以访问

static应用知识

工具类:里面都是静态方法,由开发人员共同使用(直接调用);

使用时无需创建对象(为防止创建对象,应将构造器私有:private 类名() {})。

代码块(类中一大成分):

(1)静态代码块:static {}

需要通过static关键字修饰,随着类的加载而加载,自动触发,只执行一次

(2)动态代码块:{}

每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并在构造器执行前执行

单例模式(一个类只能对外产生一个对象):

饿汉模式(在用类获取对象时,对象已经提取建立好了):

(1)定义一个类,把构造函数私有

(2)定义一个静态变量存储一个对象

package wryyyyy;

/*
饿汉模式
 */
public class SingleInstance
{
    public static SingleInstance instance = new SingleInstance();
    /*
    * public 让这个对象能够被访问到
    * static 这个对象只需要一个
    * 对象类型为对象本身
    * */
    private SingleInstance() {};//将构造器私有化,防止创建对象
}
package wryyyyy;

public class test
{
    public static void main(String[] args)//main方法
    {
        SingleInstance s1=SingleInstance.instance;//静态成员变量可以直接用类名.访问
        SingleInstance s2=SingleInstance.instance;//再得到一个对象
        /*
        验证这个类对外是一个单例类,只需看两个变量拿的是不是同一块地址
         */
        System.out.println(s1==s2);//输出为true

    }
}

懒汉模式(真正需要该对象时,才去创建):

(1)定义一个类,把构造函数私有

(2)定义一个静态变量存储一个对象

package wryyyyy;

/*
懒汉模式
 */
public class SingleInstance
{
    private static SingleInstance instance ;//不能把单列类对象new出来,要等到真正需要对象时才创建
    //为防止用类名.instance拿到一个为null的对象,应将其定义为私有
    /*
    * public 让这个对象能够被访问到
    * static 这个对象只需要一个
    * 对象类型为对象本身
    * */
    public static SingleInstance getInstance()
    {
        //不能直接构建一个对象返回,这样每调用一次这个方法都会产生一个新对象
        //如果没有这个对象才去创建
        if (instance==null)
        {
            instance=new SingleInstance();
        }
        return instance;
    }
    /*
    提供一个方法,对外返回单例对象
     */
    /*
    * 声明为static,因为要通过类名访问
    * 返回类型为这个类
    * */
    private SingleInstance() {};//将构造器私有化,防止创建对象
}
package wryyyyy;

public class test
{
    public static void main(String[] args)//main方法
    {
        SingleInstance s1=SingleInstance.getInstance();//静态成员变量可以直接用类名.访问
        SingleInstance s2=SingleInstance.getInstance();//再得到一个对象
        //第一次调的时候创建对象,第二次不调,直接返回
        System.out.println(s1);
        System.out.println(s2);

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值