【Java】static

static静态关键字

        static是静态的意思,可以修饰成员变量和成员方法

        static修饰成员变量表示该成员变量只在内存中只存储一份共享访问修改

例:

public class User{

        public static int onlineNumber = 161;

        private String name;

        private int age;

}

成员变量可以分为2类

        静态成员变量(有static修饰,属于类,内存中加载一次):需要被共享的信息,可以共享访问

public class User{

        //类名.静态成员变量(推荐)

        //对象.静态成员变量(推荐)

        public static int onlineNumber = 1;

}

        实例成员变量(无static修饰,存在于每个对象中):属于每个对象的信息

public class User{

        //对象.实例成员变量

        private String name;

        private int age;

}

static修饰成员方法的基本用法

静态成员方法(有static修饰,属于类)建议用类名访问,也可以用对象访问

        表示该方法是以执行一个共用功能为目的,则可以申明成静态方法

实例成员方法(无static修饰,属于对象)只能用对象触发访问

        表示对象自己的行为时,且方法中需要访问实例成员的,则该方法必须申明成实例方法

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
//实例成员方法
    public void stduy(){
        System.out.println("好好学习,天天向上");
    }
//静态成员方法
    public static void getMax(int a,int b){
        System.out.println(a>b?a:b);
    }

    public static void main(String[] args) {
        Student s = new Student("大珍珠",23);
        getMax(12,15);
        Student.getMax(13,16);
        s.getMax(14,17);
        s.stduy();
    }
}

static访问注意事项

        静态方法只能访问静态成员不可以直接访问实例成员

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

        静态方法中时不可以出现this关键字

 static工具类

        工具类中定义的都是一些静态方法,每个方法都是以完成一个公用的功能为目的

工具类好处:

        ①调用方便 提高代码复用(一次编写处处可用)

        实例方法需要创建对象调用,此时用对象只是为了调用方法,这样只会浪费内存

public class Util {

    private ItheimaUtil(){
    }

    public static String createVerifyCode(int n){
        String code="";
        String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();

        for (int i = 0; i < n; i++) {
            code += s.charAt(random.nextInt(s.length()));
        }
        return code;
    }
}

注意:

        建议将工具类的构造器进行私有化,工具类无需创建对象

        里面都是静态方法,直接用类名访问即可

static代码块

代码块:

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

在Java类下,使用{}括起来的代码称为代码块

静态代码块:

格式:static{}

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

使用场景:在类加载到时候做一些静态数据初始化的操作,以便后续使用

public class StaticDemo {
    public static int onLineNumber;

    static{
        System.out.println("静态代码块");
        onLineNumber=99;
    }

    public static void main(String[] args) {
        System.out.println("main方法");
        System.out.println(StaticDemo.onLineNumber);
    }
}

构造代码块:

格式:{}(很少用)

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

使用场景:初始化实例资源

public class StaticDemo {
    private String name;

    public StaticDemo2() {
        System.out.println("构造器");
    }

    {
        System.out.println("实例代码块/构造代码块");
        name = "大珍珠";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        StaticDemo2 s2 = new StaticDemo2();
        System.out.println(s2.getName());
    }
}

 static单例

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

        例如任务管理器对象我们只需要一个就可以解决问题了,这样可以节省内存空间

饿汉单例模式

        在用类获取对象的时候,对象已经提前创建好了

设计步骤:

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

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

public class Singlelnstance {

    private Singlelnstance(){
    }

    public static Singlelnstance singlelnstance = new Singlelnstance();
}

懒汉单例模式

        在真正需要对象的时候,才去创建一个对象(延迟加载对象)

设计步骤:

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

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

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

public class Singlelnstance {

    private Singlelnstance(){
    }

    private static Singlelnstance singlelnstance;

    public static Singlelnstance getSinglelnstance(){
        if (singlelnstance==null){
            singlelnstance = new Singlelnstance();
        }
        return singlelnstance;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值