2020.10.21 Java static关键字、代码块

1.static关键字

static关键字被称为静态,可以用来修饰类的属性,方法,代码块,内部类。
特点:

  1. 随着类的加载而加载;
  2. 优先于对象存在;
  3. 修饰的成员被所有对象共享;
  4. 可以不创建对象,直接被调用。
    注意:如果其中一个对象将静态变量进行了修改,其他的对象的静态变量值跟着改变。
public class Chinese {

    String name;
    int age;
    /**
     * static 静态变量  当所有对象中的某个属性值都一样时,此属性值可以使用static修饰,在内存中只有一份,被所有对象共享
     * 若不使用static修饰,那么会给每个对象复制一份该变量,浪费内存空间
     * 特点:
     * 1.随着类的加载而加载
     * 2.优先于对象的存在
     * 3.修饰的成员被所有对象共享
     * 4.可不创建对象,直接被调用
     */
    static String country = "中国";
}
public class Test {
    public static void main(String[] args){

        //通过类名直接调用,省去创建对象  eg:Math.PI;  不创建对象直接调用
        System.out.println(Chinese.country);

        Chinese zs = new Chinese();
        zs.name = "张三";
        zs.age = 65;
        Chinese ls = new Chinese();
        ls.name = "李四";
        ls.age = 66;
        //对象名调用静态变量
        System.out.println(zs.country);
    }
}

当所有对象中的某个属性值都一样时,此属性可以使用static修饰,在内存中只有一份,被所有对象共享,对象名调用静态变量/通过类名调用静态变量,省去创建对象。
static修饰方法,被static修饰的方法也存在方法区,可以直接通过类名调用。
静态方法只能访问静态变量,而成员方法可以访问成员变量和静态变量。

public class StaticMethod {

    String name;
    static int age;

    public static void testStaitc(){ //可以通过类名调用,被static修饰的方法也是存储在方法区
        System.out.println("静态方法");//静态方法只能访问静态的变量
    }

    public void test(){
        System.out.println("成员方法");//成员方法可以访问成员变量和静态变量
    }
}

2.代码块

代码块:类似于一个没有名称的方法
分为:实例块:每次在创建对象时自动执行。
静态块:类加载时执行

/**
 * 代码块:类似于一个没有名称的方法
 * 1、实例块:每次在创建对象时自动执行
 * 2、静态块:类加载时执行
 *
 */
public class Demo {
    static int num = 10;
    {
        System.out.println("这是实例块");
    }
    static{
        System.out.println("这是静态块");
    }

    public static void main(String[] args){
        /*new Demo();
        new Demo();*/
        /*这是静态块
        * 这是实例块
        * 这是实例块*/
        /*System.out.println(num);
        System.out.println(num);
        System.out.println(num);*/
        /*这是静态块
        * 10
        * 10
        * 10*/
    }
}

为什么先打印静态变量和静态方法?
个人理解为:因为静态变量和静态方法随着类的加载而加载,而成员变量和成员方法在创建对象时才被创建。且在一个方法中一个类只加载一次,所以静态变量和静态方法也只被加载一次。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值