抽象类:abstract关键字
//由抽象方法的类一定是一个抽象类,但是抽象类中可以没有抽象方法 public abstract class AbstractTest { public int age; public AbstractTest(){} //没有抽象的构造方法 //public abstract AbstractTest(int a); //使用abstract修饰的方法叫做抽象方法,而且没有方法体 public abstract void method(); } //子类继承父类的时候,如果父类中由抽象方法,那么子类就会报错,需要在父类中的抽象方法,如果 // 没有重写父类中全部的抽象方法,子类就需要定义成一个抽象类,否则编译报错 class test extends AbstractTest{ @Override public void method() { //抽象类不能创建对象; //AbstractTest at=new AbstractTest(); //可以创建抽象类类型的对象由之类对象赋值,向上转型 AbstractTest at= new test(); }
接口:
package com.haina.lesson14; //接口的使用interface修饰 //可以有1个或0个用public修饰的接口 public interface InterfaceTest { //接口中没由抽象方法 //interfaceTest (){} //默认用public static final修饰 int a=10;//静态常量 //默认使用public abstract 修饰 void method(); //jdk1.8之后可以有普通方法 default void doSomething(){} //静态方法可以有方法体 static void saySomething(){} } //一个接口可以有多个接口 interface Test01{} //public修饰的接口要更文件的名字一样 //public interface Test02{} interface Test03{} //继承关键字extends只能写一次,多继承要用逗号隔开 //接口与接口之间是多继承关系 interface Test04 extends Test03,Test05{} interface Test05{} interface Test06{} //类和接口之间是实现关系,多实现, //继承和实现写完的现象是一样的,所以当类实现接口的时候,会自动拥有接口中的所有方法,因此类中会有接口 // 中的抽象方法,如果不重写接口中全部的抽象方法,那么就要定义成抽象类,否则编译报错 class Test07 extends Test08 implements Test06,InterfaceTest{ //一个类可以在继承一个类的同时实现多个接口,但是要求继承写在实现前面 @Override public void method() { //接口不能创建对象 //InterfaceTest it=new InterfaceTest(); //向上转型,由实现类创建对象给接口类型赋值,创建出接口类型的对象 InterfaceTest it=new Test07(); } } class Test08{} class Test09{} class Test10{}
异常:
/** * Java异常类:是用于处理Java中的异常的 * 异常的父类是Throwable * Throwable有两个类一个是error,一个是Exception * error是错误,是由于系统原因有、类似于软件问题或者jdk问题等引起的,不知程序员的问题 大问题 * Exception是异常,通常由于程序员的逻辑问题引起的可以听过调试代码解决 小问题 * * Exception有两个分类,一个是检查性异常,一个是非检查性异常 * 检查性异常:范围是runtimeException及其子类以外的其他类 * 写在代码中会直接报错,需要预先处理 * * 非检查性异常:范围是runtimeException及其子类 * 写在代码中不会直接报错,需要运行时才会报错 * */
public void method(){ //try 代码块中写的是可能出现异常的代码 //try不能单独存在 try { //Class.forName("com/haina/lesson15/ExceptionTest04.java"); int [] a=new int [5]; System.out.println(a[5]); System.out.println("下标越界"); //try中发生异常会直接在异常发生的位置停止运行,进入catch进行捕获 }//catch代码块中写的是解决异常的代码 // catch (ClassNotFoundException e) { // e.printStackTrace();//默认解决异常的方式 // } catch (ArrayIndexOutOfBoundsException e){ System.out.println("数组越界"); }//多个catch的时候,父异常不能写在子异常的前面 catch(Exception e){ } //finally中写的是受保护的代码,或者说是不管异常是否发生都要执行的代码 //只能写一个或0个finally finally { System.out.println("finally中的代码"); } } public static void main(String[] args) { ExpcetionTest04 e=new ExpcetionTest04(); e.method(); }
当一个异常不进行处理,抛出后会向上抛出,如果都不处理,在后有jvm(虚拟机)处理;