Java——static关键字

static关键字

成员变量+static=静态变量
    当我们在设计类的时候 发现多个对象中有共享数据的时候 我们就可以把这个共享的数据 定义为静态的
    name age虽然每个对象都有 但是值不一定一样 对象的特有数据->成员变量
    country虽然每个对象也都有 但是值一样 对象的共有数据-> 静态变量
    静态的东西从堆中对象的空间里抽取出来了 放到哪里了呢?静态方法区。

例:
    大家伙来公司上课 你要喝水 水杯/水壶?特有 饮水机?共有
    上述可以知道 共有的数据存在于一个特定的空间 静态方法区
    你来公司上课 饮水机在 你下课回家 饮水机还在 
    上述又说明一个问题 共有的数据 要 活的比 对象 长

成员函数+static=静态函数
    静态函数意味着就是对象的共有行为吗?不行的
    我们当前的成员函数如果不访问任何成员变量的情况下 这个函数就可以定义为静态的
    这就意味着 静态函数不能直接调用当前类中的成员变量 无法从静态上下文中引用非静态
    为啥?静态的生命周期要长于对象

 所以静态是优先于对象存在的静态也称之为是类的成员,我们可以直接通过类去调用类.(点)静态成员

特别提醒:为什么主函数是静态的?
        1、主函数是程序的入口,优于其它运行
        2、假设主函数是非静态的 那么必须先创建对象 才能调用主函数
        3、怎么去创建对象呢?是不是需要写代码?这段代码咋运行呢?

静态变量有没有默认初始化值?有  (运行时常量 永久代 JVM)
也有显示初始化

静态变量与成员变量的区别:

  1.生命周期
        成员变量随着对象的创建而创建 随着对象的消亡而消亡
        静态变量随着类的加载而创建 随着程序结束而消失
    2.调用方式
        成员变量必须先创建对象 在通过对象去调用
        静态变量可以被对象调用 也可以直接用类调用
    3.存储位置
        成员变量存在于堆内存中对象的所属空间里
        静态变量存在于静态方法区中类的所属空间里
    4.命名
        成员变量-对象的特有属性
        静态变量-对象的共有属性 类成员

代码块:

    代码块 { ... }
    
    局部代码块:存在于函数当中(包括函数) for(){...} if(){...}
    
    构造代码块:直接在类中出现的{...}
        当对象创建一次 构造代码块执行一次
        作用等同于构造函数

    静态代码块:直接在类中出现的static{...}
        当类被加载的时候 仅且只执行一次
        作用于 对类进行一些初始化操作 JDBC

 具体的代码实现:

 

class ExtendsDemo02{
    public static void main(String[] args){
        Zi zi=new Zi();
        System.out.println(zi.num1);//20
        System.out.println(zi.num2);//30
        System.out.println(zi.num3);//50
        zi.show();
        zi.sing();
    }
}
//子父类中成员变量的特点
/*
class Grandfather{
    int num1=100;
    int num4=200;
}
*/
class Fu {//extends Grandfather{
    int num1=10;
    static int num2=40;
    static int num3=50;
    Fu(){
        super();//Object(){} 显示初始化父类空间中的成员变量
        System.out.println("Fu constructor1......");
    }
    Fu(int num){
        System.out.println("Fu constructor2......");
    }
    void sing(){
        System.out.println("Fu sing......");
        System.out.println("爸爸我会唱红歌");
    }
}
class Zi extends Fu{
    int num1=20;
    static int num2=30;
    
    Zi(){
        this(0,0);
        System.out.println("Zi constructor1......");
    }
    Zi(int num1){
        this(0,0);
        System.out.println("Zi constructor2......");
    }
    Zi(int num1,int num2){
        super();
        System.out.println("Zi constructor3......");
    }
    void show(){
        //局部变量和成员变量如果重名了 this区分
        System.out.println(num1+","+num2+","+num3);
        //局部变量/成员变量和父类变量重名了 super区别 super.xxx => 你爸爸的xxx
        System.out.println(super.num1+","+super.num2+","+num3);
        //System.out.println(super.super.num1);
        //System.out.println(num4);
    }
    @Override
    void sing(){
        System.out.println("Zi sing......");
        System.out.println("儿子我会唱摇滚、民谣、爵士、蓝调、电子");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值