一、代码块
代码块就是使用 { } 括起来的内容。代码块根据定义的位置不同分为:局部代码块,构造代码块,静态代码块,同步代码块。
1、局部代码块
局部代码块在于方法中出现。局部代码快可以限定变量的声明周期,提早释放,可以提高内存的利用率。局部代码块中的变量,外部不能调用,而在代码块内部可以调用外部的变量。
2、构造代码块
构造代码块出现在类中方法外。多个构造方法方法中相同的代码存放到一起,每次调用构造代码块都执行,并且在构造方法前执行。构造代码块,在创建对象时执行,优先于构造方法执行,并且每创建一个对象都会执行一次。
3、静态代码块
静态代码块在类中方法外出现,加了static修饰,静态代码块随着类的加载而加载,且静态代码块只执行一次。在静态代码块里面只能访问静态变量,其余的均不能访问 。
二、继承
继承在面向对象开发思想中是一个非常重要的概念,在程序中复用一些已经定义完善的类不仅可以减少软件开发的周期,也可以提高软件的可维护性和可扩展性。
当多个类中存在相同的属性或行为时,那么我们可以把这些内容抽取到一个类中,那么多个类就无须再定义这些内容,只需要继承这一个类即可。
继承的格式:
class 子类名 extends 父类名 {}
继承的优点:
- 提高了代码的复用性;
- 提高了代码的维护性 。
继承的缺点:
- 增加了类的耦合性。
继承的特点:
- 只支持单继承,不支持多继承;
- 支持多层继承。
继承的注意事项:
- 子类不能继承父类的私有方法;
- 子类不能继承父类的构造方法,但是可以通过super调用父类的构造方法
- 继承的时候看利是否大于弊,也就是说不要为了部分功能去使用继承,因为继承会增加类的耦合性。
三、方法重写
方法重写是指子类中出现和父类一模一样的方法(方法名、返回值类型、参数列表),也称为方法覆盖。当子类需要父类的方法,又要拥有自己特色的内容,就可以重写父类的方法。这样既继承了父类的方法,又定义了子类特有的功能。简单来说,子类对父类的方法的功能不满意,子类可以使用方法重写,体现了java的可扩展性。
方法重写的注意事项:
- 父类的私有方法不能被重写;
- 子类重写父类方法时,访问权限不能比父类更低,最好保持和父类一致;
- 父类的静态方法,子类也必须通过静态方法进行重写。(算不上重写)
在方法的前面可以加一个@override可以判断该方法是否为方法重写。
super、final关键字的使用
1、super
当子类在继承父类的时候可能会出现子类的成员变量与父类成员重名时,父类的变量被隐藏,或者发生方法重写,如果子类需要调用或访问父类被隐藏的变量或者被重写的方法,这时就可以使用super关键字来实现。
super代表父类空间的标识,可以理解为父类空间的引用,可以操作父类中的成员。
super有三种情况可以使用:
- 用来访问父类中被隐藏的成员变量。
- 用来访问父类中被重写的方法。
- 用来调用父类中的构造方法。
对应的super的使用:
super.成员变量
super.成员方法
super(...)
2、final
final的意思为“最终的”,可以修饰变量,成员方法和类。final修饰符的特点有一下几点。
- 修饰类:当final修饰类的时候,该类不能被继承。
- 修饰成员变量:当修饰成员变量时,该变量不能被重新赋值。
- 修饰方法:当修饰方法时,该方法不能被重写。
- final类中的所有成员变量和方法都被默认为final的。