普通代码块和构造代码块

1.什么是静态属性、静态方法

1 | 用static修饰符修饰的属性和方法叫作静态属性和静态方法

静态属性和非静态属性的区别:
1.在内存中存放的位置不同:所有static修饰的属性和方法都存放在内存的方法区里,而非静态的都存在堆内存中
2.出现的时机不同:静态属性和方法在没创建对象之前就存在,而非静态的需要在创建对象才存在
3.静态属性是整个类都公用的
4.生命周期不一样,静态在类消失后被销毁,非静态在对象销毁后销毁
5.用法:静态的可以直接通过类名访问,非静态只能通过对象进行访问

2.使用static的注意事项

带静态修饰符的方法只能访问静态属性
非静态方法既能访问静态属性也能访问非静态属性
非静态方法不能定义静态变量
静态方法不能使用this关键字
静态方法不能调用非静态方法,反之可以

3.父子类中静态和非静态的关系

对于非静态属性,子类可以继承父类非静态属性,但是当父子类出现相同的非静态属性时,不会发生子类的重写并覆盖父类的非静态属性,而是隐藏父类的非静态属性
对于非静态方法,子类可以继承并重写父类的非静态方法
对于静态属性,子类可以继承父类的静态属性,但是如何和非静态属性一样时,会被隐藏
对于静态方法,子类可以继承父类的静态方法,但是不能重写静态方法,同名时会隐藏父类的

注:静态属性、静态方法、非静态属性都可以被继承和隐藏,但是不可以被重写,
非静态方法可以被重写和继承

4.静态代码块

1 | 静态代码块只能写在类中方法外,不能写在方法中,它会随着类的加载而优先于各种代码块和构造方法的加载,并且只会
2 | 加载一次,如果出现多个静态代码块,会按照书写顺序加载

  • 静态代码块的作用:

一般情况下,有些代码需要在项目启动的时候就执行,这时候就需要静态代码块,比如一个项目启动需要加载配置文件,或初始化内容等。

  • 静态代码块不能出现在任何方法体内

对于普通方法:普通方法是需要加载类new出一个实例化对象,通过运行这个对象才能运行代码块,而静态方法随着类加载就运行了。
对于静态方法:在类加载时静态方法也加载了,但是必须需要类名或者对象名才可以访问,相比于静态代码块,静态方法是被动运行,而静态代码块是主动运行

  • 静态代码块不能访问普通变量

普通变量只能通过对象调用的,所以普通变量不能放在静态代码块中。

5.普通代码块和构造代码块

静态代码块和构造代码块在声明上少一个static关键字
执行时机:
构造代码块在创建对象时被调用,每次创建对象都会调用一次,且优先于构造函数执行。

注:不是优先于构造函数执行,而是依托于构造函数,如果不创建对象就不会执行构造代码块

普通代码块和构造代码块的区别在于,构造代码块是在类中定于的,而普通代码块是在方法体中定义的,执行顺序和书写顺序一致。

6.执行顺序

静态代码块>构造代码块>构造函数>普通代码块

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值