static的使用

  • 使用 static 可以修饰变量、方法和代码块。

1.static修饰变量

public class StaticDemo {
/*
  1.被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。
  2. 静态成员可以使用类名直接访问,也可以使用对象名进行访问。
  3.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收
 */
    static String hobby="abc";
    public static void main(String[] args) {
        System.out.println("通过类名来访问hobby:"+StaticDemo.hobby);
        StaticDemo sd  = new StaticDemo();
        System.out.println("通过对象名访问hobby:"+sd.hobby);
        //使用对象名的形式修改静态变量的值
        sd.hobby="123";
        //再次通过对象名访问静态变量,值已被修改
        System.out.println("通过对象名访问hobby:"+sd.hobby);
    }
}
通过类名来访问hobby:abc
通过对象名访问hobby:abc
通过对象名访问hobby:123

2.static修饰方法

  • static 修饰方法,称为静态方法或类方法。
 public class StaticDemo {

    String name="张三";
    static String hobby="java";

    //静态方法
    public static void print(){
        //1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
        System.out.println("爱好:"+hobby);
        //2.如果希望在静态方法中调用非静态变量,可以通过创建类的对象,
        //然后通过对象来访问非静态变量
        StaticDemo sd = new StaticDemo();
        System.out.println("姓名:"+sd.name);
    }
    //3.普通成员方法中,可以直接访问同类的非静态变量和静态变量
    public void show(){
        System.out.println("姓名:"+name);
        System.out.println("爱好:"+hobby);
    }

    /*
     * 4.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
     * main方法就是静态方法
     */
    public static void main(String[] args) {
        print();
        StaticDemo sd = new StaticDemo();
        sd.show();

    }
}
爱好:java
姓名:张三
姓名:张三
爱好:java

3.static修饰初始化块

  • 静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
public class StaticDemo {

    int num1;       //声明变量num1
    int num2;       //声明变量num2
    static int num3;//声明静态变量num3

    public StaticDemo(){//构造方法
        num1=91;
        System.out.println("通过构造方法为变量num1赋值");
    }

    { //初始化块
        num2=74;
        System.out.println("通过初始化块为变量num2赋值");
    }

    static{ //静态初始化块
        num3=83;
        System.out.println("通过静态初始化块为静态变量num3赋值");
    }

    public static void main(String[] args) {
        StaticDemo sd = new StaticDemo();  //创建类的对象
    }
}
通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值

//从运行结果可以看出:程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。
public static void main(String[] args) {
        StaticDemo sd = new StaticDemo();  //创建类的对象
        System.out.println("num1="+sd.num1);
        System.out.println("num2="+sd.num2);
        System.out.println("num3="+num3);
    }
通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1=91
num2=74
num3=83
public static void main(String[] args) {
        StaticDemo sd = new StaticDemo();  //创建类的对象
        System.out.println("num1="+sd.num1);
        System.out.println("num2="+sd.num2);
        System.out.println("num3="+num3);

        StaticDemo sd1 = new StaticDemo();  //创建类的对象

    }
通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1=91
num2=74
num3=83
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值

由于静态初始化块只在类加载时执行一次,所以当再次创建对象sd2时并未执行静态初始化块。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值