静态关键字static

静态关键字static

静态关键字可以用来修饰成员变量和成员方法,表示共享的意思。

在同一个类中,调用成员变量和成员方法,类名可以省略。

static用来修饰成员变量

属于类,在内存中只加载一次,并且是共享的。

public class StaticDemo {
    static int onlinenumber=160;
    public    void login(){
        onlinenumber++;
    }

    public static void main(String[] args) {
        if(true){
            onlinenumber++;
        }
        StaticDemo staticDemo=new StaticDemo();
        staticDemo.login();

        System.out.println(onlinenumber);

    }
    运行结果:162

static修饰成员变量的内存图

当类加载时,同时会在堆内存中开辟静态变量区。

总结:

被static修饰的静态成员变量可以用类名调用、也可以用对象名调用(但不建议使用)。

static修饰成员方法

静态成员方法的属于类,所以建议使用类名访问,也可以用对象名访问,可以被共享。

什么时候用static修饰成员方法呢?

1.若表示对象自己的行为,并且要访问实例成员的方法,则该方法必须申明成实例方法。

2.如果该方法时执行一个共用的方法,则定义为静态方法。

public class StaticDemo {
    static int onlinenumber=160;
    public static void login(){
        onlinenumber++;
    }


    public static void main(String[] args) {
       login();
       StaticDemo.login();
       StaticDemo staticDemo=new StaticDemo();
       staticDemo.login();
        System.out.println(onlinenumber);
    }

用static修饰成员方法的内存图

static的注意事项:

静态方法只能访问静态的成员(静态成员变量或静态成员方法),不可以直接访问实例成员。

实例方法可以访问静态成员,也可以访问实例成员。

不能使用this关键字。

static修饰的代码块

概述:

代码块是类中的5大成分之一(成员变量、构造器、方法、代码块、内部类),定义在内中方法外。

在java中,用{}括起来的为代码块。

代码块的分类:

静态代码块:

static{}

随着类的加载而加载,并且自动触发,只执行一次。

作用:用于初始化静态资源。

构造(实例代码块)代码块: 每次创建对象时都会执行。(一般不用)

{}

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

作用:初始化实例资源。

静态代码块的应用案例:

斗地主游戏:

开始时,提前准备54张牌。

定义一个静态的集合。

static应用:设计模式

什么是设计模式?

开发中的最优解。

学习设计模式学两点:

第一:这种设计模式是用来解决什么样的问题

第二:遇到这种问题,该模式是怎样写的,他是如何解决这个问题的.

单例模式:

可以保证系统中,应用该模式的类永远只有一个实例,即一个类只能创建一个对象。

比如:任务管理器。节省内存空间

单例的实现方式:

饿汉式单例实际模式:在用类获取对象的时候,对象已经创建好了

设计步骤:

定义一个类,私有构造器

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

public class single {
    public static single single=new single();
    private single(){

    }
}
public class Test {
    public static void main(String[] args) {
       single s1=single.single;
       single s2=single.single;
        System.out.println(s1==s2);

    }
}

懒汉单例设计模式:在真正需要的该对象的时候,才去创建一个对象(延迟加载对象)

设计步骤:

定义一个类,私有构造器。

定义一个静态变量存储一个对象(不能直接创建对象)

提供一个返回单例对象的方法

public class single2 {
    private static single2 single2;//最好私有
    public static single2 getInstance(){
        if(single2==null){
            single2=new single2();
        }
        return single2;
    }
    private single2(){

    }
}
public class Test2 {
    //懒汉单例
    public static void main(String[] args) {
        single2 s1=single2.getInstance();
        single2 s2=single2.getInstance();
        System.out.println(s1==s2);

    }
}

public static void main(String[] args) {
single2 s1=single2.getInstance();
single2 s2=single2.getInstance();
System.out.println(s1==s2);

}

}














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值