------ android培训、java培训、期待与您交流! ----------
面向对象的总结:
1.面向对象的思想
面向过程向面向对象转换,由执行者变成指挥者.比如把汽车封装成一个类,这个类里面定义了汽车的所有功能和属性,我们需要开车的时候只需要
调用汽车类的实力对象的开车功能即可。
2. 类和对象的关系
类是描述现实生活中具体存在的事物
对象就是现实生活确实存在的个体.
类好比是图纸,对象好比是按照图纸生产的汽车
3建立对象,并调用方法(******)
类 变量= new 类()
变量.方法();
4 匿名对象
new 类();
函数只需要一次调用的时候使用
将匿名对象作为参数传递,其实传递的是对象的引用地址
5 封装
将实现细节隐藏,对外提供公共访问方式
封装的好处:便于重复使用,安全性高。
6 构造函数
构造函数,是对象初始化建立的时候,调用仅仅一次
用于建立对象的时候给对象中的成员变量赋值
构造函数可以进行重载.
7 this关键字
this表示本类对象的引用,谁调用的this就表示这个对象
this用于区分成员变量和局部变量的重名情况.(this.表示成员变量)
this语句 可以在构造函数之间调用,保证this语句是构造函数的第一行
构造函数不允许递归调用.(不允许调来调去)
8 static 关键字
static静态修饰符
被static修饰的成员变量,属于对象的共享数据
被static修饰的成员,类名直接调用
被static修饰的成员随着类的加载而加载,随着类的消亡而消亡,存在方法区的静态区
静态不能调用非静态
当出现对象共享数据的时候,使用static修饰
当类中的成员函数,都没有访问过类中的成员变量的时候,使用static修饰
9 main函数
主函数是静态,不需要对象,直接被类名调用
10 文档工具类的制作
数组的操作制作的工具类
私有了构造函数,其他函数都是静态
Java中的特有注释 /***/
Javadoc -d 目录 -author -version 文件名.java
11 单例设计模式(******) 保证对象的唯一性
饿汉式,代码必须会写
懒汉式,代码必须会
12 继承
extends 继承父类
父类是子类共性内容提取出来的
提高代码的复用性,减少代码量(*******)
继承的出现,使类和类出现了关系,这个关系导致了面向对象第三个特征多态
子类可以直接使用父类成员(不是全部)
13 继承中,成员特点
成员变量
super关键字,用于区分子类和父类重名的成员变量
子类有就用子类的,子类没有就用父类的
成员函数
当子类和父类出现了一模一样的函数,就是函数的覆盖特性
覆盖必须保证子类中的权限大于或者等于父类中的权限
手机的例子(******)
构造函数
子类继承不了
子类的构造函数第一行默认有个语句 super() 访问父类空参
子类的所有构造函数都会访问父类的狗仔函数
子类中的构造函数可以间接的访问父类的构造函数
14 final关键字
final是修饰符 ,可以用来修饰类 函数 成员变量 局部变量
被final修饰的类不能再派生子类
被final修饰的方法,不能被覆盖
被final修饰的变量,只能一次赋值,不能在改值
被final修饰的变量,其实就是一个常量
15 接口
接口中的成员是固定的(******)
public static final int X=3;
public abstract void show();s
16 类与接口的关系
一个子类可以实现多个接口并覆盖接口中的抽象方法,建立子类对象
17接口和抽象类的区别
接口中的方法全部是抽象方法,抽象类中可以有普通方法
子类继承抽象类,可以直接使用抽象类中的非抽象方法
子类只有全部覆盖接口中的全部方法才能建立对象
抽象类是这个继承体系中的共性内容,接口是这个体系的扩展内容.
继承是一个Is a的关系,接口是一个Like a的关系
18 继承和实现的区别
1. 继承只能单继承
2. 可以多实现
3. 继承后,子类可以直接使用父类的功能
4. 实现后,子类必需全部覆盖父类中,或者接口中的抽象方法
5. 实现的出现,避免的单继承的局限性
19 多态(******) 主板和USB设备的案例
一个事物具备的多种形态
代码体现 父类或者接口引用指向自己的子类对象
这个父类引用或者接口引用,只能调用子父类中的公共方法,不能调用子类特有方法
进行类型的强制转换 已经提升为父类类型的子类,转回到子类类型
判断一个引用是否属于这个类型 instanceof
20 多态的优势:
降低程序的耦合性,提高程序扩展性,方便后期维护
21 多态中,子父类中的成员特点 (模板设计模式 练习***)
多态中,子父类中成员变量,成员函数,静态成员函数,静态成员变量的特点
非静态成员函数,编译看左边,运行看右边
其他情况,编译看左边,运行看左边
22 Object类
equals
toString,子类覆盖toString方法,建立自己的独特字符串表现形式
23 内部类
格式 外部类名.内部类名 变量=new 外部类名().new 内部类名()
格式 外部类名.内部类名 变量=new 外部类名.内部类名()
格式 外部类名.内部类名.函数名
内部类出现在局部位置上,要想访问外部类中函数的局部变量,这个局部变量需要加final(原因在于它们的生命周期不一样)
24 匿名内部类
前提:必须实现接口,继承一个类
格式:
接口名 变量 =new 接口(){
覆盖接口方法
};
变量.方法
25 异常 (异常的处理方法******方式) (老师电脑上的异常案例******)
异常的面向对象思想
java将异常都封装成了对象
异常体系:
Throwable
Exception
小问题,可处理
Error
大问题,必须修改代码
异常的处理方式(******************)
try{
//可能发生异常的代码
}catch(异常类 变量){
// 处理方式
}
打印异常信息的3个常用方式
getMessage();
toString();
printStackTrace() ;
异常的第二种处理方式 抛出异常(********面试)
throw
throws
编译时期异常和运行时期异常
调用了抛异常的方法,调用者没有处理异常
运行时期异常对象描述 RuntimeException 和他的子类
这个异常,在运行时期抛出,不需要在函数上声明,也不需要处理
运行时期异常,一旦出现,程序停止运行,修改源代码
26 自定义异常
java中,没有完全描述所有的异常,有的异常是java没有描述的,需要自定义异常
继承Exception 或者 继承RuntimeException
调用父类构造方法,传递异常信息
27 包
分类管理文件,提供多层命名空间 package就是文件夹
28 包与包之间类的访问
public protected default private
29 import 关键字
导入类 如果需要子包中的类,导入到子包.
30 jar
jar -cvf 文件名.jar 包
PS:第15个要点 子类实例化,以下加详解.
对象中的成员变量的初始化是按下述步骤进行的:
1).分配成员变量的存储空间并进行默认的初始化,就是用new关键字产生对象后,
对类中的成员变量按第三章的表3.1中的对应关系对对象中的成员变量进行初始化赋值。
2).绑定构造方法参数,就是new Person(实际参数列表)中所传递进的参数赋值给构造方法中的形式参数变量。
3).如有this()调用,则调用相应的重载构造方法(被调用的重载构造方法又从步骤2开始执行这些流程),
被调用的重载构造方法的执行流程结束后,回到当前构造方法,当前构造方法直接跳转到步骤6执行。
4).显式或隐式追溯调用父类的构造方法(一直到Object类为止,Object是所有Java类的最顶层父类),
父类的构造方法又从步骤2开始对父类执行这些流程,父类的构造方法的执行流程结束后,回
到当前构造方法,当前构造方法继续往下执行。
5).进行实例变量的显式初始化操作,也就是执行在定义成员变量时就对其进行赋值的语句,如:
public Student extends Person
{
String school = ”it315”;// 显式初始化
……
}
将“it315”赋值给school成员变量。
6).执行当前构造方法的方法体中的程序代码,如
public Student extends Person
{
public Student(String name,int age,String school)
{
super(name,age);
this.school=school;
}
}
这一步将执行this.school=school;这条语句,其中用到的super()或this()方法调用语句已在前面的步骤中执行过,
这里就不再执行了。注意区别刚才所说的this()方法调用语句与this.school=school的区别,
前者指调用其他的构造方法,后者是一个普通的赋值语句。
为了便于直观地看到子类对象的实例化过程,我将上面的流程用图进行了重复描述。
回过头来想一想:
1).为什么super(…)和this(…)调用语句不能同时在一个构造函数中出现?
2).为什么super(…)或this(…)调用语句只能作为构造函数中的第一句出现?
对照对象初始化实例变量过程,我们就发现这两种情况都违背上面的过程,
所以我们应该明白上面两个问题的原因了。
------ android培训、java培训、期待与您交流! ----------