面向过程
线性思维
第一步做什么,第二步做什么
属性加方法变成一个类
面向对象
分类的思维模式,需要先分类
类是一个模板,对象是一个具体的实例
适合处理发杂的问题
本质:以类方式组织代码,以对象的形式封装数据
三大特性
-
封装:把数据包装起来,装到盒子里
-
继承
-
多态
先有对象后有类,对象是具体事务。
创建对象:
使用new关键字创建对象。
构造器
快捷键:alt+insert
public +类名{}
一个类什么都不写也会给一个,自动加一个构造器
作用:使用new关键字必须要有构造器
用来初始化值:有参构造器()
注意点:
定义有参构造后,再使用无参构造,必须明确的定义一个无参构造
封装
追求:高内聚,低偶和
即private的使用
属性私有,get/set
作用:
-
提高安全性
-
隐藏代码细节,设置年龄先支
-
统一的接口
继承
类的抽象,字类时父类的拓展
子类可以继承父类的方法(注意权限修饰符)
类只有单继承,一个儿子只能有一个爸爸,一个爸爸可以有多个儿子
语法:extands:拓展
快捷键:ctrl+h //显示出继承关系
在JAVA中所有的类都是Object类
Super
先调用父类的无参构造,若自己构造父类的构造器,必须要把super放在第一行
注意点:
- 调用父类的构造方法
- 必须只能出现中子类的方法或者构造方法中
- super跟this不能同时调用构造方法
- this本身调用的对象,代表父类对象的引用
方法的重写跟多态
并不是重载。
非静态的方法是重写
重写的关键词也只能是public
方法的名字之类的全都是一样的。
都写都是方法的重写,跟属性无关。
方法的调用只跟左边有关,跟右边定义的类型无关
这是两个静态方法的重写
这是两个普通方法的重写,子类重写了父类的方法
多态
有一个比较需要注意的东西
Student student = new Student();
Person person = new Student();
Object object=new Student();
对象能执行哪些方法主要看左边。
instanceof和类型转换
判断是不是那个类型
A instanceof B:A是对象 B是类型,继承关系也行,A必须是父类对象。
类型转换:父类代表高的,子类代表低的。
Person stdent=new Student();
// 此时不能使用Student中的方法
如果要使用student中的方法,要进行强制转换
例子:
(子类)父类.方法
(Student)Person.show();
注意:
- 父类引用指向子类的对象
- 子类转换为父类为向上转型
- 父类转换为子类,向下转型
Static
静态的变量,一般在多线程中使用
静态方法不能去调用非静态方法,因为在加载类方法的时候,非静态方法还没有被调用
静态代码块比构造方法的加载时间还要早一些
静态代码块,只执行一次
静态导入包:用于导入包是直接导入方法,以方便直接使用该方法
抽象类
使用abstract来修饰类名
接口可以多继承
抽象方法:只有方法的约束,只有方法名字,不需要写方法体,在别人继承的时候必须实现。
正常类继承抽象类以后必须实现他的抽象方法
特点:
- 不能new,也就是不能实现,只能用子类进行
接口
面向接口编程,接口的本质是锲约
接口的实现语法:interface 不用class
子类的定义通过:implements
接口里边的所有定义都是public,而且是抽象的
接口里边定义的是静态的常量
接口的一些特点:
- 约束
- 定义一些方法,让不同的人实现
- 不能被实例化
- 可以实现多个
- 都是public
内部类
成员内部类
通过外部类实例化内部类
Outer.Inner =outer.new.Inner()
内部类可以访问内部类的私有方法
局部内we部类
在方法中行成内部类
匿名内部类
不定义内部前边的名字 只用new
new A();
异常
Exception
提出异常处理框架
程序运行中,出现了不期而至的各种情况
- 检查性异常
- 运行时异常
- 错误ERROR
Error跟Exception
Error JVM直接给关闭了
异常的抛出跟抓取
try 尝试着去处理,监控区域,必须得要
catch抓取,可以捕获多个异常
finally走不走都要,处理关闭工作
throw:主动抛出异常,一般在方法里边用
throws:throws是方法可能抛出异常的声明,有多个
假设要捕获多个异常要从小到大的去捕获
自动生成捕获代码块快捷建 :ctrl+alt+t //选择代码块以后
捕获异常的实例
自定义异常
- 自定义异常类
- 在方法中用throws
这是第一步:自定义异常类