第二讲备课流程
一、回顾
1、Java值类型和引用类型的区别?
答:值类型,也就是基本数据类型,基本数据类型常被分为四类八种。四类:1整型,2浮点型,3字符型,4逻辑型
八种:1整型3种byte、short、int、long
2浮点型2种float、double
3字符型1种char
4逻辑型1种boolean
引用类型,除了四类八种基本类型外,所有的类型都称为引用类型(数组、类、接口、字符串)。
引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法改变这个变量的值,那么调用这个方法是传入的变量的值也将改变。值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初声明的变量的值不会变。通俗说法:值类型就是现金,要用直接用;引用类型是存折,要用还要先去银行取现。
2、简述Java垃圾回收机制?
答:1)垃圾回收是由虚拟机自动执行,不能人为干预。
2)系统比较空闲(垃圾回收线程)
3)对象不在被引用,对象处于引用的隔离岛状态(隔离引用),对象具备了回收的条件。
4)gc()方法,可以建议虚拟机执行垃圾回收,但是不能确定是否执行回收。
二、预习作业检查
1、了解什么是oop?
OOP = Object Oriented Programming = 面向对象的程序设计
2、面向对象和面向过程的区别?
答:
面向过程编程: 从解决问题的每一个步骤入手,适合于解决比较小的简单问题。
程序 = 算法+数据。
面向对象编程:按照现实世界的特点来管理复杂的事物,把它们抽象为一个对象,具有自己的状态和行为,通过消息的反应来完成一定的任务。
程序 = 对象+消息。
3、面向对象的优点?
答:1)易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2)质量高:在设计时,可重用现有的,在以前的项目领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3)效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4)易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展。而且成本较低。
三、本章目标
1、封装
2、继承
3、多态
4、接口
四、封装
1、理解封装的概念
2、掌握private关键字
3、掌握构造方法
4、掌握方法重载
五、继承和多态
1、掌握继承
2、掌握super关键字
3、掌握多态
4、补充:private\protected\public的区别?
5、抽象类(abstract)?
6、静态类和静态方法(static)?
7、什么是Java的内部类?为什么要使用内部类?什么是匿名内部类?
六、接口
1、掌握Java接口
2、理解Java接口与多态的关系
3、掌握面向接口编程的思想
4、掌握常量接口的使用
七、拓展
1、接口和抽象类的区别和各自适用的场合?
八、总结
1、什么是类?
答:类(Class)是对一组具有相同属性、操作和关系的同类事物的描述,是抽象的、概念上的定义。
2、类和对象的关系?
答:对象是类的具体表达,而类是对象的抽象表达。
3、如何理解类的封装?
答:封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。对一个类或对象实现良好的封装,可以实现以下目的:
1)隐藏类的实现细节;
2)让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;
3)可进行数据检查,从而有利于保证对象信息的完整性;
4)便于修改,提高代码的可维护性。
4、如何理解类的继承和多态?
答:1)继承:就是子类继承父类,使子类具有父类的各种属性和方法,好处就是避免多余的代码出现,例如,项目中常常要用到的数据库的开启关闭,就可以单独写一个父类,其他类要用的话可以去继承;
2)多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)多态的三个必要条件是:要有继承;要有重写;父类引用指向子类对象。
5、接口有何用?
答:定义变量,也可用于进行强制类型转换;调用接口中定义的常量;被其他类实现。
九、本章常见企业面试题
1、请简要讲解接口和抽象类的区别及使用场合上的不同?
答:抽象类和接口它们相似的地方就是:都可以定义抽象的类。
他们之间的区别:
1.接口可以多重继承 ,抽象类不可以
2.接口定义方法,不给实现;而抽象类可以实现部分方法
3.接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是
如果事先知道某种东西会成为基础类, 那么第一个选择就是把它变成一个接口。 只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。
使用:除了直接实例化以外,可以像使用普通类一样使用抽象类。而对于接口,几乎没有直接与之通信的可能性,因为它几乎不提供具象的东西,它是一种极端的抽象。
抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法。
2、什么是Java的内部类?为什么要使用内部类?什么是匿名内部类?
答:1)定义在其他类内部的类被称为内部类。
2)一个内部类的对象能够访问创建它的对象的实现,包括私有数据;对于同一个包中的其他类来说,内部类能够隐藏起来;匿名内部类可以很方便的定义回调;使用内部类可以非常方便的编写事件驱动程序。
3)匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,但使用匿名内部类还有一个前提条件:必须继承一个父类或实现一个接口。
3、static、final、finally、finalize的区别?
答:Static(静态),一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据
final-修饰符(最终类),如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的;将变量或方法声明为final,可以保证他们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally - Java错误处理类的关键字
finalize-方法名,Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其它清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。