static修饰的变量和方法

1、被static修饰的方法和变量不需要依赖对象来进行访问,只要类被加载了,就能通过类名直接调用;
2、在实际开发中,我们也可以通过static修饰代码块来优化性能;
3、static方法就是没有this的方法,在static方法里面不能调用其他非静态的方法,但是在非静态方法里面可以调用静态方法(因为static修饰的代码块总是优先被加载);

static修饰的变量

1、static修饰的变量也称为静态变量,他被类中的所有对象所共享,在内存中只有一个副本,它当且仅当类在初次加载的时候会被实例化;
2、而非静态变量是对象所拥有的,在创建对象的时候会被初始化,存在多个副本,各个对象拥有的副本互不影响;
3、static成员变量的初始化顺序按照定义的顺序进行初始化;

static修饰的代码块

1、我们通常会使用static来修饰代码块来提高性能,static代码块可以放在类的任何地方,类中可以有多个static代码块,在类初次被加载的时候,会按顺序依次执行每个static代码块,并且只会执行一次;
2、特点:在类初次被加载的时候执行一次,可以优化性能;

例如:

class Student{
private Date birthDate;
 public  StudentDate birthDate){
 	this.birthDate=birthDate;
 } 
 boolean isBorn(){
	Date startDate = Date.valueOf("1995");
Date endDate = Date.valueOf("2000");
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}

isBorn方法用来判断这个人是不是1995-2000年出生的,但是在该方法被调用的时候,都会去生成startDate 和endDate 对象,造成了空间的浪费。因此,我们可以进行如下改造;

class Student{
private Date birthDate;
private static Date startDate, endDate; //这里把开始时间和结束时间定义成静态的,在类加载的时候就对其进行初始化;

static{
startDate = Date.valueOf("1995");
endDate = Date.valueOf("2000");
}
public Person(Date birthDate) {
this.birthDate = birthDate;
}

boolean isBorn() {
return birthDate.compareTo(startDate) >= 0 && birthDate.compareTo(endDate) < 0;
}
}

3、很多时候我们通常将只需要一次的初始化操作放在static代码块中;
4、java程序的初始化工作可以在很多不同的代码中来完成(静态代码块、构造函数等),其执行顺序如下:
父类静态变量>父类静态代码块>子类静态变量>子类静态代码块>父类非静态变量(父类实例成员变量)>父类构造函数>子类非静态变量(子类实例成员变量)>子类构造函数

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值