java中的static关键字

1.static修饰方法

static修饰的方法不能被重写,可以被继承

Test1

Test2

可以看到,被static修饰的方法可以被继承

而下面的代码

 

从这个打印结果可以看出,父类Test1的方法并没有被重写

这也解释了为什么抽象类中的方法不能被static修饰

 抽象类是不能被实例化的,也就是不能被分配内存的,而static在类被加载之前就会分配内存,这样就会很矛盾,所以抽象类中的方法不能被static修饰

2.static修饰成员变量

static修饰的成员变量在类被加载的时候初始化,静态变量和非静态变量存放的位置不一样,静态变量存放在数据区中,非静态变量如类的属性存放在对象中,而对象存放在堆中,所以非静态变量可以有多个副本并且互不影响,静态变量被所有对象共享,只有一个副本

例如下面的代码

打印的结果为

 可见,flag有多个副本,互不影响

3.static修饰代码块

用static修饰代码块会提高程序的性能,节省内存

例如:

package Day4;

public class Person {
    private int age;

    public Person(int age) {
        this.age = age;
    }

    void printInfo() {
        Integer initialAge = 20;
        if ((initialAge - this.age) == 0) {
            System.out.println("年龄等于20岁");
            return;
        }
        if ((initialAge - this.age) >= 0) {
            System.out.println("年龄小于20岁");
            return;
        }
        if ((initialAge - this.age) < 0) {
            System.out.println("年龄大于20岁");
            return;
        }
    }

    public static void main(String[] args) {
        Person p1 = new Person(20);
        p1.printInfo();
    }
}

这段代码在每次调用printInfo()方法的时候都会创建Integer对象

下面这段代码用静态代码块优化了后,就不用在每次调用方法后都创建对象,可以节省内存

package Day4;

public class Person1 {
    private int age;
    private static Integer initialAge;

    public Person1(int age) {
        this.age = age;
    }

    static {
        initialAge = 20;
    }

    void printInfo() {
        if ((initialAge - this.age) == 0) {
            System.out.println("年龄等于20岁");
            return;
        }
        if ((initialAge - this.age) >= 0) {
            System.out.println("年龄小于20岁");
            return;
        }
        if ((initialAge - this.age) < 0) {
            System.out.println("年龄大于20岁");
            return;
        }
    }

    public static void main(String[] args) {
        Person1 p1 = new Person1(20);
        p1.printInfo();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值