java 代码块 类的继承 final关键字

一.代码块
1.什么是代码块?
一对{ }
2.代码块的分类以及特点
1.局部代码块
局部代码块定义在方法中,用大括号{ }包含。例如在method()方法中创建一个局部代码块

public void method() {
    {
        int x = 18;
        System.out.println("age = " + x);
        System.out.println("这是一个局部代码块");
    }



在上述代码中,我们可以直接去掉代码块的大括号,运行效果和加代码块一致。那么,有什么必要使用局部代码块吗?

局部代码块可以限制变量的生命周期(作用域的问题),也就是说在代码块中创建的变量只在代码块中有效,当代码块运行结束,变量就会被释放,从而节省内存空间。

2.构造代码块
构造代码块定义在类中 方法外用大{ }表示


可以看出:无论是使用无参构造还是有参构造来创建对象,首先都会执行构造代码块中的内容。所以它可以对对象进行初始化,在对象创建时,就会实现该功能,调用构造代码块,从而减少代码的冗余度,提高代码复用性。
调用顺序: 在你创建对象的时候,如果你有构造代码块 系统会帮你先调用构造代码块 再调用构造方法

作用:如果有相同的方法要去执行 可以在构造代码块中去调用

3.静态代码块
静态代码块同样是定义在类中的,相对于构造代码块,只是在大括号前加了一个static修饰符


可以看到,我们以无参和带参的形式创建对象,虽然同构造代码块一样,执行在构造方法前面,但是静态代码块仅执行一次。

静态代码块是在类加载时初始化的,只加载一次,随着类的加载而加载;所以有些代码必须在项目启动的时候就执行的话,需要使用静态代码块。

作用:加载驱动(JDBC数据库的连接)

4.优先级顺序


所以可以看出来优先执行顺序是静态代码块 > main()方法 > 构造代码块 > 构造方法。

二.类的继承
对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础。抽象、封装、继承、多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点

继承是所有OOP语言不可缺少的部分,在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承。比如下面这段代码:

  1.在类Man继承于Person类,这样一来的话,Person类称为父类,Man类称为子类,如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中,只允许单继承,不允许多继承,但是可以使用接口来实现,java中只允许多层继承(属性和方法会传递继承)也就是爷爷类 爸爸类 儿子类


如果一个类没有写继承的类 实际上是继承的系统的 Object类 ,Object类 是java中最顶端的类(基类)

比如说:
如果我想得到类中 共有的方法和属性 使用哪个类?
使用继承链最顶端的类
如果我想得到类中 特有的方法和属性 使用哪个类?
使用最末端的类

2.构造方法(构造器)

子类是不能够继承父类的构造方法的,但是要注意的是,如果父类的构造方法都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造

4.super

  super主要有两种用法:

  1)super.成员变量/super.成员方法;

  2)super( );// 调用父类的构造方法

  第一种用法主要用来在子类中调用父类的成员变量或者方法, super点属性(方法) : 可以调用到父类的属性(方法);第二种主要用在子类的构造方法中显示地调用父类的构造方法,要注意的是,如果是用在子类构造方法中,则必须是子类构造方法的第一个语句, super() :调用父类的构造方法

其实这个super和this关键字还是很相似的

5.this和super的区别

1.this 在类中代表本类的对象(当前类的对象)
2.super 在类中代表的是 父类的对象

this点属性 : 可以调用当前类的属性
(如果你现在当前类找这个属性 没找到的话 会去父类里去找) 遵循了就近原则
super点属性 : 可以调用到父类的属性

this() : 调用本类的构造方法
super() :调用父类的构造方法

6.两个类的继承

父类 没有 无参构造方法 (有 有参的构造方法)
子类的构造方法如何去写? 可以指定调用有参的构造方法


7.继承 父类和子类有相同 成员方法

父类和子类方法名完全一致时 叫做 方法重写
这时super点方法 可以调用父类的方法

重写的应用场景:
当子类的方法 相当于父类的方法 相对 父类方法有升级
这时你可以使用 方法的重写

Override和Overload有什么区别?
方法重载是方法名相同但是参数不一样
Override 重写
Overload 重载

三.final 关键字
final从字面上理解含义为“最后的,最终的”(绝育)。在Java中也同样表示出此种含义。

final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
1.final修饰变量

final 修饰的变量 相当于常量 (不能被修改的量)
命名规则 名字全部大写 多单词时下划线分开

public static final double MA_VALUE = 3.14;
1
2.final修饰类:

final修饰类即表示此类已经是“最后的、最终的”含义。因此,用final修饰的类不能被继承,即不能拥有自己的子类。

如果试图对一个已经用final修饰的类进行继承,在编译期间或发生错误。


3.final修饰方法:

final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写
————————————————
版权声明:本文为CSDN博主「小东啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34936541/article/details/78745849

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值