java static作用盘点

本文详细介绍了Java中static关键字的使用,包括其与C++的区别,如不能修饰局部变量,以及它如何修饰成员变量和方法。static关键字用于创建静态成员和静态方法,这些在类加载时初始化并独立于对象存在。此外,还讨论了static代码块及其优化程序性能的用途,例如在Person类示例中避免重复创建日期对象。总结了static关键字的主要特点和规则,强调了其在内存管理和代码优化中的作用。
摘要由CSDN通过智能技术生成

java的static关键字和C++还是有较大差别的。

static不可以修饰局部变量

和C++有出入。C++还有静态全局变量,java没有全局变量这中说法,因为所有语句包括定义语句都必须写在类或者接口或者方法内,而方法也必须写在类或者接口内。

修饰成员变量

package school;

public class School {
	static String name;
	public static void main(String[] arg) {
		System.out.println(School.name);
	}
}

静态方法或者静态属性,独立于对象,所以可以直接通过类名.的方式访问或者调用。事实上,在类内部,类名都可以省略(没有被局部变量覆盖的话)。

虽然static方法或者属性不属于对象,但也可以通过对象.的方式来访问。这和C++也是一致的。

修饰方法

1、静态方法没有this引用,即不可以使用this来访问对象成员,所以导致了规则2。

2、重点:静态方法不能访问非静态成员(包括属性和方法),main方法也不例外。但是非静态方法是可以访问静态方法或者静态属性的。
在这里插入图片描述

静态代码块

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。下面看个例子:

class Person{
    private Date birthDate;
     
    public Person(Date birthDate) {
        this.birthDate = birthDate;
    }
     
    boolean isBornBoomer() {
        Date startDate = Date.valueOf("1946");
        Date endDate = Date.valueOf("1964");
        return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
    }

isBornBoomer是用来这个人是否是1946-1964年出生的,而每次isBornBoomer被调用的时候,都会生成startDate和birthDate两个对象,造成了空间浪费,如果改成这样效率会更好:

class Person{
    private Date birthDate;
    private static Date startDate,endDate;
    static{
        startDate = Date.valueOf("1946");
        endDate = Date.valueOf("1964");
    }
     
    public Person(Date birthDate) {
        this.birthDate = birthDate;
    }
     
    boolean isBornBoomer() {
        return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
    }
}

因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

总结

  • 修饰的属性所有对象都只有一个值,这一点和C++一致。
  • static不可以修饰局部变量。
  • static没有this和super引用
  • static虽然没有this,但是对象里可以通过this来访问static方法或者属性,这和可以通过对象.的形式来访问本质是一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值