目录
包和访问修饰符
包(类比文件夹)
1.域名倒置
2.功能划分详细
目的:
针对资源进行详细的划分
访问修饰符
名称 | 本类 | 同包 | 子类 | 其他 |
private(私有) | √ | × | × | × |
默认(friendly) | √ | √ | × | × |
protected(受保护) | √ | √ | √ | × |
public(公共) | √ | √ | √ | √ |
重写和重载
重写
·当从父类继承的方法无法满足子类的需求时进行方法的重写.
1.方法名与父类一致
2.返回值与父类一致
3.参数与父类一致
4.访问修饰符不能严于父类(访问权限不能低于父类)
重载
1.方法名相同
2.参数列表不同
3.与返回值无关
4.与访问修饰符无关
5.同类中重载
抽象类和final关键字
抽象方法
定义:[访问修饰符] abstract 返回值类型 方法名(参数)[异常列表];
·没有方法体的方法
·拥有抽象方法的类必须定义为抽象类
目的:方法的实现与不实现没有任何价值,没有必要实现方法体,构成抽象方法
抽象类
抽象类的定义:
[访问修饰符] abstract class 类名{}
·抽象类不能创建对象
·父类的抽象方法必须被重写,如果子类不重写,就必须定义为抽象类
·抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
//抽象类
public abstract class Employee {
public String name;
public double salary;
public void show(){
System.out.println("姓名:"+name+",工资:"+salary);
}
Employee(String name, double salary){
this.name = name;
this.salary = salary;
}
//抽象方法
abstract public double cacSalary();
}
final关键字
final修饰方法
[访问修饰符] final 返回值 方法名(参数)···········
·该方法不能被覆盖
final修饰变量
[访问修饰符] final 数据类型 变量名 = 值;
1.定义方法:
·final修饰变量,该变量就是一个常量
·常量必须初始化,并且使用Static修饰
注意:
常量的名称要大写
final修饰类
[访问修饰符] class 类名{}
·final修饰的类不能被继承
多态
什么是多态?
同一个引用类型,使用不同的实例而执行不同的操作
编译时多态
编译阶段,该对象属于哪个类,则调用相应的方法
运行时多态
运行阶段,根据对象的引用找到堆中实际类的对象,调用实际方法的原型
为什么要用多态?
多态解决了程序的拓展性问题
怎么实现多态?
1.继承,子类重写父类的方法。
2.父类的引用指向子类对象
多态对象转型问题
1.子类对象转换为父类对象
Pet dog = new Dog();
2.父类对象转换为子类对象(可能会出现ClassCastException)
Dog dog = (dog)pet;//如果不判断对象是否能转换就会在运行时报错
接口
什么是接口?
接口是一种需要强制遵守的约束(规范),如果不遵守规范就无法使用该接口
为什么要用接口?
java只能实现单继承,如果想要继承多个父类就会报错,接口就是解决方法,接口可以被多个接入
怎么使用接口?
[访问修饰符] interface 接口名称{}
public interface interf1 {}
class 类名 implements 接口名1,接口名2.......
public class Test implements interf1,interf2 {
//重写接口内的抽象方法
}
细节
1.接口的方法必须是public abstract(默认)方法(jdk1.8之后接口内可以有public static方法)
2.接口没有构造方法,所以不能实例化接口(抽象类有构造方法,不同于接口)
3.接口内的变量都是由public static final(默认)修饰的常量
4.接口的方法子类必须重写(抽象方法)
5.接口可以多实现
类与类的关系
继承
is...a:Student is a person
拥有
has...a: I have a pen
内部类
A.B b = new A().new B();
静态内部类
A.B b = A.new B();
匿名内部类
接口名称(抽象类名称) 对象名 = new 接口名(){
//接口方法的重写
}
一次性类,作用周期和存活时间极短。用完即销毁
代码块执行问题
代码块
执行时机:对象被调用之前
作用:对象创建之前的加载或者初始化工作
静态代码块
执行时机:类被加载到方法区时
作用:对类在被加载时执行操作,只会执行一次
异常结构和异常的处理
异常(Exception)
依靠程序本身可以解决的非严重性问题
1.运行时异常(RuntimeException)
NullPointerException(空指针异常)
ClassCastException(类转换异常)
ArithmeticException(除数异常)
InputMissMachException(输入异常)
ArrayOutofBoundException(数组索引下标越界异常)
NumberFormatException(数字格式化异常)
2.检查异常(CheckException)
ClassNotFoundException(类无法加载异常)
FileNotFoundException(文件无法加载异常)
IOException(IO流异常)
3.异常的处理
try:捕获异常
catch:处理相应的异常
finally:无论是否发生异常都必定会执行(通常在此释放内存资源,例如IO流对象)
注意:
·catch可以有多个
·当发生对应类型的异常时,JVM自动创建对应的exception对象
·catch后的异常类型,一定要按照从子到父的顺序处理
·异常处理语句中有return则先执行finally再执行return(finally优先级高于return)
错误(Error)
依靠程序本身不能解决的严重性问题(硬件问题)
自定义异常
1.自定义异常类
2.抛出异常对象
throw new 异常()
注意:方法内部抛出异常,要么try ...catch处理,要么throws将异常抛出后由调用者处理