本文主要总结在java基础教程中面相对象上、下两部视频中的一些淡忘的问题。
3.1.1 “==”运算符与equals()方法的区别
简单的理解就是 “equals()”是比较两个对象的引用是否相等,即堆中的引用是否相同。“==”是对变量的值比较。
3.1.2 构造函数
构造函数的理解:对类的一些必要参数进行初始化。
就象你购买一块豆腐,回家可以炒、切、扮、炖、煮——在后期给它任何它所支持的“属性”,但是在豆腐房里,别人做豆腐的就有 一套完整的流程来制作,而这个流程就是“构造函数”咯。它可以保证在豆腐出厂的时候,都是标准的四方型,而不是球的。。。。
如果说一个类中没有写构造函数,那么编译器会自动生成一个无参数的构造函数,倘若编写一个带参的构造函数,那么必须编写一个无参数的构造函数。
3.1.3 子类继承父类的问题
当父类中不包含无参数构造函数,子类须创建一个无参构造函数,并通过super()调用父类指定的构造函数,如子类通过super()调用无参构造函数,则父类必须创建无参构造函数。
当子类初始化时,优先调用父类无参构造函数。
注意:创建类的时候最好自己手动创建一个无参数构造含糊。
答:如果构造函数有this(),则调用其他的构造函数,其他的构造函数也会通过super()调用父类构造函数,如果当前构造函数也包含super()语句,则super()无任何意义。同时编译会报错。
问: 为什么 super( … ) 或 this( … ) 调用语句只能作为构造函数中的第一句出现?
答:构造方法优先调用this()。同时编译会报错。
子类中有父类中的函数同名时,则调用子类的函数。
若需要调用父类的函数时,则通过super.方法名()调用。
子类中方法的访问权限需大于等于父类中方法的访问权限。如父类中方法的public,则子类只能是public,同样父类的方法如果为private,则其他类和子类无法访问,子类无法继承父类的私有变量和方法,这样写法的形式无意义。
3.1.4 关于final关键字
成员变量前加了final关键字,则该变量无法对其赋值。
方法前面加了final关键字,则子类不能为其方法重写,只能继承父类的该方法。
方法或变量前面加了final关键字则为常量的生命。
final定义的常量不能被修改,只能一次赋值,即初始化时赋值,或在构造函数中对其赋值。
构造函数中不能对static的常量进行初始化,加了static使用 类名.常量名 进行使用,同时在这个常量需在定义时进行初始化。
3.1.5 抽象类与接口
抽象类中的方法不一定是抽象方法,但是抽象方法必须加abstract。若有一个方法是抽象方法,那么这个类则为抽象类。
子类必须覆重写有父类中的抽象方法才可以被实例化,否则这个子类仍旧是抽象类。
3.1.6 接口
接口是特殊的抽象类,是抽象方法和常量的集合,接口当中只能包含常量和方法的定义。
接口中的成员都是public访问类型
可以变相理解为,接口是抽象类的一种。
子类可以继承一个父类,但可以同时实现多个接口。
3.1.7 对象的类型转换
子类对象可以自动转换为父类。
父类需要强制转换为子类 例:(父类)子类
3.1.8 面相对象多态性
优点:不必为每个子类都编写对应的方法,提高代码复用性。派生类可以被基类的引用变量引用,即向后兼容,提高程序的可扩充性和可维护性。
3.1.9 匿名类
new 类名(){实现代码};
3.2.1 异常
ArithmeticException是Exception的子类,可以显示具体的异常详情。
e.printStackTrace();直接将异常输出。
异常会根据相应的异常进入对应的catch语句
catch语句中的异常类型有先后顺序,Exception类一定放到最后,否则前面无法的异常无法执行。
throws不一定是抛出异常,有时可以根据异常的特点,将对应的执行顺序跳转到其他位置,即程序跳转。
在try{}catch(){}finally{}中除使用System.exit(0)之外,其余情况下都执行finally{}的语句。
子类继承父类后,只能是抛出原有父类中的异常或父类中抛出异常类的子类,当然子类中也可以不抛出异常。
3.2.2 包
import——导包
package——设置包
3.2.3 访问控制
作用域 当前类 同一 package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
3.2.4 java命名习惯
1.包命名:全部字母小写:cn.package.bean
2.类命名:单词的首字母大写:SimpleBean
3.属性名称:第一个单词的首字母小写,之后每个单词的首字母大写studentName
4.方法命名:与属性命名相同:public void sayHello()
5.常量命名:全部单词大写:final String DBDRIVER="zhangde"