小东吖 之 java 代码块 类的继承 final关键字
来源:互联网 发布:2048js游戏源代码 编辑:程序博客网 时间:2024/06/06 04:04
一.代码块
1.什么是代码块?
一对{ }
2.代码块的分类以及特点
1.局部代码块
局部代码块定义在方法中,用大括号{ }包含。例如在method()方法中创建一个局部代码块
public void method() { { int x = 18; System.out.println("age = " + x); System.out.println("这是一个局部代码块"); }}
在上述代码中,我们可以直接去掉代码块的大括号,运行效果和加代码块一致。那么,有什么必要使用局部代码块吗?
局部代码块可以限制变量的生命周期(作用域的问题),也就是说在代码块中创建的变量只在代码块中有效,当代码块运行结束,变量就会被释放,从而节省内存空间。
2.构造代码块
构造代码块定义在类中 方法外用大{ }表示
class Teather{ String name; { //构造代码块 } public void introduce(){ System.out.println("我的名字" + name); }}
class Demo{public static void main(String[] args) { Test test = new Test(); System.out.println("-------------"); Test test2 = new Test(1); }}public class Test { public Test() { System.out.println("无参构造"); } public Test(int num) { System.out.println("带参构造"); } { System.out.println("构造代码块"); }}
结果
构造代码块无参构造-------------构造代码块带参构造
可以看出:无论是使用无参构造还是有参构造来创建对象,首先都会执行构造代码块中的内容。所以它可以对对象进行初始化,在对象创建时,就会实现该功能,调用构造代码块,从而减少代码的冗余度,提高代码复用性。
调用顺序: 在你创建对象的时候,如果你有构造代码块 系统会帮你先调用构造代码块 再调用构造方法
作用:如果有相同的方法要去执行 可以在构造代码块中去调用
3.静态代码块
静态代码块同样是定义在类中的,相对于构造代码块,只是在大括号前加了一个static修饰符。同样的,我们通过代码来看一下它的作用
class Demo01{public static void main(String[] args) { StaticTest st = new StaticTest(); System.out.println("----------------"); StaticTest st2 = new StaticTest(1); } }public class StaticTest { public StaticTest() { System.out.println("无参构造"); } public StaticTest(int num) { System.out.println("带参构造"); } static { System.out.println("静态代码块"); }}
结果
静态代码块无参构造----------------带参构造
可以看到,我们以无参和带参的形式创建对象,虽然同构造代码块一样,执行在构造方法前面,但是静态代码块仅执行一次。
静态代码块是在类加载时初始化的,只加载一次,随着类的加载而加载;所以有些代码必须在项目启动的时候就执行的话,需要使用静态代码块。
作用:加载驱动(JDBC数据库的连接)
4.优先级顺序
public class YouXianJi { public YouXianJi() { System.out.println("无参构造"); } public YouXianJi(int x) { System.out.println("带参构造"); } { System.out.println("构造代码块"); } static { System.out.println("静态代码块"); } // 成员方法 void method() { { System.out.println("局部代码块"); } } public static void main(String[] args) { System.out.println("main()方法"); YouXianJi yxJ = new YouXianJi(); // 无参方式创建对象 yxJ.method(); System.out.println("---------------------------------------"); YouXianJi yxji = new YouXianJi(1); // 带参方式创建对象 yxji.method(); }}
结果
[静态代码块main()方法构造代码块无参构造局部代码块---------------------------------------构造代码块带参构造局部代码块]
所以可以看出来优先执行顺序是静态代码块 > main()方法 > 构造代码块 > 构造方法。
二.类的继承
对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础。抽象、封装、继承、多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点
继承是所有OOP语言不可缺少的部分,在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承。比如下面这段代码:
实现代码:
class Demo{ public static void main(String[] args){ Man m = new Man; m.name = "小李子"; m.age = 12; m.introduce(); }}class Person { String name; int age; public Person() { } public void introduce(){ System.out.println(name + "---" + age); }}
1.在类Man继承于Person类,这样一来的话,Person类称为父类,Man类称为子类,如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中,只允许单继承,不允许多继承,但是可以使用接口来实现,java中只允许多层继承(属性和方法会传递继承)也就是爷爷类 爸爸类 儿子类
class Grandfather{}class Father extends Grandfather{ } class Son extends Father{ }
儿子 继承 爸爸 继承 爷爷 具有传递性
如果一个类没有写继承的类 实际上是继承的系统的 Object类 ,Object类 是java中最顶端的类(基类)
比如说:
如果我想得到类中 共有的方法和属性 使用哪个类?
使用继承链最顶端的类
如果我想得到类中 特有的方法和属性 使用哪个类?
使用最末端的类
2.构造方法(构造器)
子类是不能够继承父类的构造方法的,但是要注意的是,如果父类的构造方法都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造
// 形状类class Shape { String name; public Shape(){ // 无参构造方法 name = "shape"; } public Shape(String name) { // 有参构造方法 this.name = name; }}class Circle extends Shape { // 圆形类继承形状类 private double radius; // 半径 public Circle() { // 如果你没有调用父类的构造方法 // 那么系统会在这里帮你调用一下父类无参构造方法 radius = 0; } public Circle(double radius) { // 不管你是有参无参构造方法 // 只有你没有调用父类的无参构造方法 系统都会帮你调用 // 保证继承的完整性 super(); this.radius = radius; }}
4.super
super主要有两种用法:
1)super.成员变量/super.成员方法;
2)super( );// 调用父类的构造方法
第一种用法主要用来在子类中调用父类的成员变量或者方法, super点属性(方法) : 可以调用到父类的属性(方法);第二种主要用在子类的构造方法中显示地调用父类的构造方法,要注意的是,如果是用在子类构造方法中,则必须是子类构造方法的第一个语句, super() :调用父类的构造方法
其实这个super和this关键字还是很相似的
5.this和super的区别
1.this 在类中代表本类的对象(当前类的对象)
2.super 在类中代表的是 父类的对象
this点属性 : 可以调用当前类的属性
(如果你现在当前类找这个属性 没找到的话 会去父类里去找) 遵循了就近原则
super点属性 : 可以调用到父类的属性
this() : 调用本类的构造方法
super() :调用父类的构造方法
6.两个类的继承
父类 没有 无参构造方法 (有 有参的构造方法)
子类的构造方法如何去写? 可以指定调用有参的构造方法
实现代码:
public class Test { public static void main(String[] args){ DaZhong daZhong = new DaZhong(); daZhong.sayHi(); System.out.println("-------"); DaZhong daZhong2 = new DaZhong("奥迪"); daZhong2.sayHi(); }}// 我也不知道什么类class Cor{ String name; String color; // 无参构造方法// public Cor() {// System.out.println("Car 我是无参构造方法");// } public Cor(String name) { this.name = name; System.out.println("我是Car 的有参构造方法"); }}// 大众类class DaZhong extends Cor{ public DaZhong() { super("我很普通"); System.out.println("Da 我是无参构造方法"); } public DaZhong(String name) { super(name); this.name = name; } public void sayHi() { System.out.println(name + "--" + color); }}
7.继承 父类和子类有相同 成员方法
实现代码:
class Person{public void print(){ System.out.println("我会画画"); } } class Student{ // 注解 @Override 标识着这个方法是重写父类的方法 @Override public void print() { super.print;// 这里调不调用父类方法 要根据实际开发来写 System.out.print("我不仅会画画,也会涂鸦"); }}
父类和子类方法名完全一致时 叫做 方法重写
这时super点方法 可以调用父类的方法
重写的应用场景:
当子类的方法 相当于父类的方法 相对 父类方法有升级
这时你可以使用 方法的重写
Override和Overload有什么区别?
方法重载是方法名相同但是参数不一样
Override 重写
Overload 重载
三.final 关键字
final从字面上理解含义为“最后的,最终的”(绝育)。在Java中也同样表示出此种含义。
final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
1.final修饰变量
final 修饰的变量 相当于常量 (不能被修改的量)
命名规则 名字全部大写 多单词时下划线分开
public static final double MA_VALUE = 3.14;
2.final修饰类:
final修饰类即表示此类已经是“最后的、最终的”含义。因此,用final修饰的类不能被继承,即不能拥有自己的子类。
如果试图对一个已经用final修饰的类进行继承,在编译期间或发生错误。
public final class A {}// 编译错误!A是final类型,不可被继承! public class B extends A{ }
3.final修饰方法:
final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写
public class A { // final方法f public final void f() { System.out.println("类A中的final方法f被调用了"); }}public class B extends A { // 编译错误!父类的f方法是final类型,不可重写! public void f() { System.out.println("类B中的方法f被调用了"); }}
- 小东吖 之 java 代码块 类的继承 final关键字
- JAVA-代码块、继承、final关键字
- java代码块,继承,final关键字简述
- 代码块、继承、final关键字
- Java笔记之代码块、继承、final
- 08-java代码块,继承,方法重写,final关键字
- JAVA基础复习八-代码块、继承和final关键字
- java详解 --- 代码块、继承以及final关键字
- JAVA 代码块 继承 final
- 代码块,继承及final关键字
- java中static代码块,final关键字
- 继承-final-代码块
- 代码块,继承,final
- Day08 --代码块 继承 重写 this和super final关键字
- Java-基础-代码块-继承--关键字
- 代码块、继承、重写、final
- 继承之final关键字的使用
- java学习之路 之 高级类特性2-类的成员之四:初始化块、关键字final
- 面试
- 。
- 线程实现、启动及区分方式
- 短视频会成为下一个直播吗
- java详解 --- 代码块、继承以及final关键字
- 小东吖 之 java 代码块 类的继承 final关键字
- 细说VLAN与Trunk .
- 面试分享:一年经验初探阿里巴巴前端社招
- leetcode解题方案--068--Text Justification
- 静态方法与实例方法总结:
- Linux进程间通信方式(一)
- 1127. ZigZagging on a Tree (30)
- 1007. 素数对猜想 (20) c++
- Gogs安装