static 关键字的详解

static是Java中的一个关键字,单词本身是静态的含义。一个类的成员包括变量、方法、构造方法、代码块和内部类,static可以修饰除了构造方法以外的所有成员。

使用static修饰的成员成为静态成员,是属于某个类的;而不使用static修饰的成员成为实例成员,是属于类的每个对象的

1,实例成员变量存放在堆内存上面 静态成员变量存储在方法区中

public class Person {

    /**
     * static 修饰的成员变量叫做静态成员变量
     * 没有static修饰的成员变量叫做实例成员变量
     *    实例成员变量存放在堆内存上面
     *    静态成员变量存储在方法区中
     *
     *    静态成员变量被当前类对象共享
     *    实例对象是每个对象独有的
     *
     *    静态成员变量可以使用对象名.属性名访问
     *    推荐使用 类名.属性名 的方式进行访问
     *    实力成员变量只能有对象.属性名访问
     *
     */
    static String firstName;

    String lastName;

    public void name(){
        System.out.println("我叫"+firstName+lastName);
    }
}
此时的firstName被static修饰

可以看到当person1修改firstName后person的firstName也随之变化,这是因为static修饰的成员变量和实例成员存储的位置不一样,被static修饰的属性共用一个方法区的属性

2,静态成员推荐使用类名.属性名的方式访问, 实例成员变量只能有对象名.属性名的形式访问

这种只需要创建一个Person.firstName就可以了,如果修改仍然可以用对象.firstName修改

3,static修饰的方法叫做静态成员方法

静态成员方法中只能直接使用静态成员变量(可间接使用实例对象)
静态成员方法推荐使用类名.方法名调用(也可以使用对象名.方法名调用)
静态成员方法不能使用this关键字(如果使用this则使用类名.方法名this则不知道指向哪里)

静态成员方法只能直接调用其他静态成员方法

在构造方法 中,往往不会对静态成员变量进行初始化

4,static代码块

public class Block {

    static String firstName;

    String lastName;


    public void myName(){
        System.out.println("我叫"+firstName+lastName);
    }
    public static void showName(){
        System.out.println("show:"+firstName);
    }
    //普通代码块
    {
        System.out.println("普通代码块");
    }
    static {
        System.out.println("静态代码块");
    }
}

测试输出

public class BlockTest {
    public static void main(String[] args) {
        Block block = new Block();
        Block block1 = new Block();
    }
}

输出的结果为:

静态代码块
普通代码块
普通代码块

Process finished with exit code 0

可以看出

 普通代码块
 每次实例化对象时,都会执行一次全部的普通代码块
 一般可以用于初始化实例成员变量

 静态代码块
 当类的字节码进入内存时执行一次,后续不会再执行了
一般用于初始化静态成员变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值