面向对象
-
面向对象VS面向过程
面向对象:问题由不同的部分组成
面向过程:问题由顺序步骤组成
-
面向对象编程的本质:以类的方式组织代码,以对象的组织(封装)数据。类:某一类对象都有的属性和方法;对象:个性 new实例化
类是个性抽象出的共性
-
三大特性:封装,继承,多态
-
Alt+Enter IDEA快捷创建对象
-
静态方法和类一起加载,非静态方法是类实例化(和对象一起)加载,这样做可能可以优化资源的使用,真正实例化后才占用内存。
-
值传递和引用传递
-
this--->这个类
-
引用:栈--->堆(内存地址)
构造器
-
一个类即使什么都不写,它也会存在一个方法(与类名相同,也不存在返回值) 作用:实例化初始值。使用new关键字,本质是在调用构造器,必须要有构造器。
-
一旦定义了有参构造,无参就必须显式定义,否则没有无参构造。
-
alt+insert 自动生成构造器
封装
-
private
-
get/set 属性私有,但提供可以操作这个数据的方法。(alt+insert)可以在方法里做安全性的检查,保护数据,隐藏代码的实现细节,统一接口,提高系统可维护性。
继承
-
继承的本质是对一批类的抽象 extends
-
Ctrl+H 可以查看树 Java中所有类都是继承Object类
-
Java只有单继承,没有多继承!
-
super访问父类属性,私有无法被继承。先调用父类的构造器super(),必须在构造方法的第一个。
-
方法重写:override(重写)
静态方法:父类的引用指向了子类,方法的调用只和定义的数据类型有关。
非静态方法:方法重写,只保留子类的方法。(*public)区别于重载
-
为什么需要重写?
多态
-
动态编译
-
实际类型确定,指向的引用类型不一定。对象只能执行对象类型的方法,子类能调用子类和继承父类方法,父类指向子类,但不能调用子类独有的方法。
-
多态是方法的多态。多态:一个对象的实际类型是确定的,但可以指向对象的引用类型有很多。
-
instanceof 判断是否具有父子关系
-
上转型:子类对象赋值给父类变量。对象拥有的是属性,变量拥有的是方法。通俗讲就是儿子装爹,本质上还是儿子。 向上转型是字子类对象当作父类来用,本质生说它是子类的对象,但是是父类的引用。所以只能看见父类的成员变量,而子类自己的成员变量就看不到。 也就是说,上转型对象能处理的是自己的和被子类改写的部分,而子类新增的部分看不到。
-
子转父,向上转型。父转子,向下转型,强制转换。儿子有父亲的方法,变回父亲可以直接变。但是父亲没有儿子的新东西,所以不能直接变成儿子。
static
-
static{} 静态代码块 加载执行一次,和类一块加载。匿名代码块,实例化时加载。
-
静态导入包 final类无法被继承
abstract
-
抽象类:子类必须实现它所有方法 不能new,只能靠子类实现
-
抽象方法:只有方法名
-
抽象方法必须在抽象类中,抽象类中可以写普通的方法。
接口interface
-
只有规范,自己无法写方法。(完全抽象)
-
接口中所有方法默认public abstract,所有属性都是public static final
-
implements实现接口 alt+enter:实现所有方法
-
利用接口可以实现多继承
内部类
-
获得外部类的私有属性
-
一个java类中可以有多个class类,只能有一个public class
异常类
-
Error和Exception
-
try/catch 假设要捕获多个异常,从小到大。Throwable所有 快捷:ctrl+alt+T
-
throw 抛出异常 在方法里用,说明该方法处理不了此异常,让其他方法去处理这个异常。(甩锅) 如果throw了一个异常必须捕获或者交给上一级处理。
-
自定义异常类 继承Exception类