static、final和成员变量

  1. final
  • final类不能被继承,没有子类,final类中的方法默认是final
  • final方法不能被子类的方法覆盖,但可以被继承【修补继承打破封锁规则】
  • final成员变量表示常量,只能被赋值一次,赋值后不能再被改变
  • final不能用于修饰构造方法
  • private不能被子类方法覆盖private类型的方法默认是final类型的
  1. static
    成员变量与静态变量的区别:
名称所属内存位置存在时间消失时间调用
成员变量实例对象堆内存对象new存在对象被回收对象调用
静态变量类变量方法区类加载时存在类消失对象(共享)或类名

static代码块随着类加载而被执行,只执行一次(new 多个对象只执行一次),和主函数在同一个类中优先于主函数被执行
执行顺序:静态代码块—>构造代码块—>构造函数(补充:之间区别

class A{
    public A(){
        System.out.println("class A()");
    }
    final void print(){ // 继承的一个弊端--打破了方法的封装性--解决办法final
        System.out.println("print");
    }
}
class B extends A{
    final int a = 10; // 最终变量必须初始化而且无法被改写

    public B(){}
    public B(int a){
        System.out.println("class B()");
    }
    public B(String B){
        System.out.println("class B(String)");
    }
}

public class Test extends B{
    static int B = 2 ;

    static{
        System.out.println("static block");
    }
    public Test(){
        // 必须要写父类的无参构造--否则必须显示指明调用的父类那个构造方法
        System.out.println("class Test()");
    }
    public Test(String A){
        super(""); // 必须位于第一行 如果不写那么默认调用B()
        System.out.println("class Test(String)");
    }
    public static void main(String[] args) {
        Test test = new Test("") ;
        test.print();
        System.out.println(test.B); // 通过实例对象调用--共享变量
        System.out.println(Test.B);
    }
}
output~:
static block
class A()
class B(String)
class Test(String)
print
2
2
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值