黑马程序员----JAVA基础之面向对象

来源:互联网 发布:javascript接受数据 编辑:程序博客网 时间:2024/05/01 02:52




------ 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的区别,

前者指调用其他的构造方法,后者是一个普通的赋值语句。


为了便于直观地看到子类对象的实例化过程,我将上面的流程用图进行了重复描述。

黑马程序员----JAVA基础之面向对象总结 - lucy198921 - 星爺的博客


回过头来想一想:

1).为什么super(…)和this(…)调用语句不能同时在一个构造函数中出现?

2).为什么super(…)或this(…)调用语句只能作为构造函数中的第一句出现?

对照对象初始化实例变量过程,我们就发现这两种情况都违背上面的过程,

所以我们应该明白上面两个问题的原因了。




------ android培训java培训、期待与您交流! ----------


原创粉丝点击