唐僧喜欢小龙女

导航

static 的使用

1、概念

使用static 修饰成员变量,此时该成员变量又对象层级提升到类层级,被所有对象共享  该成员变量随着类的加载而准备就绪,与是否创建对象无关.

总之:类存在的时间比对象早

2、修饰的范围

static 修饰符表示静态的,可修饰字段、方法、代码块、内部类,其修饰的成员属于类,也就是说 static 修饰的资源属于类级别,而不是对象级别

3、静态属性

属性可以用类来调用,也可以用对象来调用,所有的实例共享这个静态属性。

 

/**
 *
 *  一、静态变量修饰属性
 *      1、属性可以用类来调用,也可以用对象来调用,所有的实例共享这个静态属性。
 *      2、静态变量随着类的加载而加载,类的加载比对象早
 *      3、静态变量加载比对象早
 *      4、由于类的加载只会有加载一次,则静态变量在内存中也一份,存在方法区的静态域中
 *      
 *
 */

public class Persion {

    private String name;
    private int age;
    private static String country = "china";

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    public static String getCountry() {
        return country;
    }

    public static void setCountry(String country) {
        Persion.country = country;
    }

    public void print(){
        System.out.println("name="+this.getName()+"age="+this.getAge()+"country="+Persion.getCountry());
    }
}

public class Test1 {
    public static void main(String[] args) {
        Persion persion = new Persion();
        persion.setAge(23);
        persion.setName("guanyu");
  
        persion.setCountry("蜀国");

        System.out.println("==================");
        persion.print();

        Persion persion1 = new Persion();
        persion1.setAge(25);
        persion1.setName("zhangfei");

        System.out.println("==================");
        persion1.print();

    }
}
//这里可以看到country 这个属性是共享的,任何一个对象改了后所有的别的对象都改了

==================
name=guanyuage=23country=蜀国
==================
name=zhangfeiage=25country=蜀国

  

 

 

3、静态方法

静态方法可以通过类名和对象来调用,建议使用类名

public class Persion {

    private static Map<String, String> conMap = new ConcurrentHashMap<String, String>();

    private String name;
    private int age;

    private static String country = "china";

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    public static String getCountry() {
        return country;
    }

    public static void setCountry(String country) {
        Persion.country = country;
    }

    public void print(){

        System.out.println("name="+this.getName()+"age="+this.getAge()+"country="+Persion.getCountry());
    }

    public static void test12(String key,String value){

        if(StringUtil.isNotEmpty(conMap.get(key))){

            System.out.println("buweikong");
        }else {
            conMap.put(key,value);
        }
        System.out.println(conMap.get(key)+"=====");
    }

}

public class Test1 {
    public static void main(String[] args) {

        Persion persion = new Persion();
        persion.test12("12","sss");

        Persion persion1 = new Persion();
        persion1.test12("12","sss1222");
    }
}

sss=====
buweikong
sss====

特别注意下上面的结果哈。第一次已经放了值 了,第二次就不会放了

  

  

4、静态代码块

后面跟着一段代码,这段代码只会初始化一次,且在类被第一次装载时。

 static {
        System.out.println("======static========");
    }

 

5、方法或者属性什么时候用static

/**
 *
 *  方法或者属性什么时候需要使用static修饰
 *  1、如果属性是所有对象共享的那么就是用static。例如设置常量的时候
 *  2、工具类中的方法使用static,方法中操作常量这个方法也要设置为static.
 *
 *
 */

  

 

posted on 2021-04-30 14:45  与时具进&不忘初心  阅读(85)  评论(0编辑  收藏  举报