瑞翼工坊项目纪实(十一)

作者:738b71676587 — 已发布 2018/11/14 15:20:00 GMT+0, 上次修改时间: 2022-05-21T07:32:10+00:00
2018年11月14日晚19:00,辽宁科技学院曙光大数据学院瑞翼工坊的课程在新楼201再一次开始啦!这次的主讲内容是《Java编程思想》和《Java的继承》。分别由孟庆鹏同学以及崔雨阳同学主讲,两位小老师把自己觉得受益匪浅的知识分享给大家。给同学们拓展一些专业知识,以便于以后更好地学习。

孟庆鹏同学在学习之余看了《Java编程思想》的这本书,他从中总结了一些书中他觉得很有价值的东西分享给大家。

    首先,他简单介绍了一下《Java编程思想》这本书:它是Java学习必读经典,不管是初学者还是编程牛人都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题,也有深入的涉及RTTI和JVM底层反编译知识。

    所以,这本书对我们学习java也是大有好处滴!孟庆鹏同学建议同学们可以利用课余时间学习一下里面的知识,以此拓展自己的知识范围。

以下是孟庆鹏同学总结的书中的一些主要知识点:

Java中的多态性理解

    Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定—它会自动发生。

    final方法会使编译器生成更有效的代码,这也是为什么说声明为final方法能在一定程度上提高性能。

    如果某个方法是静态的,它的行为就不具有多态性。

    构造函数并不具有多态性,它们实际上是static方法,只不过该static声明是隐式的。因此,构造函数不能够被override。

    在父类构造函数内部调用具有多态行为的函数将导致无法预测的结果,因为此时子类对象还没初始化,此时调用子类方法不会得到我们想要的结果。

Java中构造函数的调用顺序

    (1)在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制0;

    (2)调用基类构造函数。从根开始递归下去,因为多态性此时调用子类覆盖后的draw()方法(要在调用RoundGlyph构造函数之前调用)。

    (3)按声明顺序调用成员的初始化方法。

    (4)最后调用子类的构造函数。

组合和继承之间的选择

    组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形。即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口。为取得此效果,需要在新类中嵌入一个现有类的private对象。但有时,允许类的用户直接访问新类中的组合成分是极具意义的,即将成员对象声明为public。如果成员对象自身都隐藏了具体实现,那么这种做法是安全的。当用户能够了解到你正在组装一组部件时,会使得端口更加易于理解。比如Car对象可由public的Engine对象、Wheel对象、Window对象和Door对象组合。

final关键字

    当final修饰的是基本数据类型时,它指的是数值恒定不变(就是编译期常量,如果是static final修饰,则强调只有一份),而对对象引用而不是基本类型运用final时,其含义会有一点令人迷惑,因为用于对象引用时,final使引用恒定不变,一旦引用被初始化指向一个对象,就无法再把它指向另一个对象。然而,对象其自身却是可以被修改的,Java并未提供使任何对象恒定不变的途径(但可以自己编写类以取得使对象恒定不变的效果),这一限制同样适用数组,它也是对象。

使用final方法真的可以提高程序效率吗?

    将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。只要编译器发现一个final方法调用,就会(根据它自己的判断)忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理)。相反,它会用方法主体内实际代码的一个副本来替换方法调用。这样做可避免方法调用时的系统开销。类内所有private 方法都自动成为final。由于我们不能访问一个private 方法,所以它绝对不会被其他方法覆盖(若强行这样做,编译器会给出错误提示)。可为一个private方法添加final指示符,但却不能为那个方法提供任何额外的含义。

工坊11-1.jpg

 了解完Java的编程思想,接下来是崔雨阳同学给大家讲解Java中继承的知识啦!

    1.什么是继承:Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

    2. Java继承的优势:Java继承的从某种意义上讲,Java继承的短暂美就如同宇宙中所有事与其它事情都存在一种特殊的关系。教育者试图向门外汉们解释继承的概念,常常通过讨论相关动物群之间的关系来解释这一概念。在Java和NET中,在某种程度上讲,所有事物都是对象类型的一种软件组件。然而,从那里开始,开发选择什么在子类和超类继承中进行关联是设计的重点。

    3.继承的分类:继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。由于多继承会带来二义性,在实际应用中应尽量使用单继承。Java语言中的类只支持单继承,而接口支持多继承。Java中多继承的功能是通过接口(interface)来间接实现的 .

继承的特征

    (1)继承关系是传递的。若类C继承类B,类B继承类A(多层继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

    (2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

    (3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

    (4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

    (5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。

工坊11-3.jpg

本次瑞翼工坊的课堂效果极佳,两位小老师倾囊相授、一丝不苟。同学们认真聆听,积极配合。通过他们的讲解,同学们牢牢掌握了这次培训的主要内容。同学们在学习专业知识的过程中感受到了快乐。两位小老师在授课过程中也锻炼了自己,并实现了自我价值。瑞翼工坊培训课程中,小老师们和同学们共同进步,达到了“共赢”的效果。这也是设立瑞翼工坊的初衷。我相信,在不久的将来,一定会有越来越多的同学在瑞翼工坊学习到更多的专业知识,一批批优秀人才也会从中涌现出来!