Javase06

1.instanceof  判断两个是否存在继承关系

public class Demo01 {

    public static void main(String[] args) {
        //Object>String
        //Object>Person>Teacher
        //Object>Person>Student
        Object o1 = new Student();
        System.out.println(o1 instanceof Student);//True
        System.out.println(o1 instanceof Person);//True
        System.out.println(o1 instanceof Object);//True
        System.out.println(o1 instanceof Teacher);//False
        System.out.println(o1 instanceof String);//False
        System.out.println("===========================");
        Person p = new Student();
        System.out.println(p instanceof Student);//True
        System.out.println(p instanceof Person);//True
        System.out.println(p instanceof Object);//True
        System.out.println(p instanceof Teacher);//False
        //System.out.println(p instanceof String);//编译报错,有继承关系才会编译通过
        System.out.println("===========================");
        Student s = new Student();
        System.out.println(s instanceof Student);//True
        System.out.println(s instanceof Person);//True
        System.out.println(s instanceof Object);//True
        //System.out.println(s instanceof Teacher);//编译报错
        //System.out.println(s instanceof String);//编译报错



    }

}

2.Static详解

  (1)静态变量或者方法可以直接用类名调用,也成类变量或方法;

  (2)静态变量或方法只执行一次,可以用来初始化;

3.抽象

  (1)抽象类的抽象方法必须得由子类实现

  (2)抽象类本质是类,只能单继承

  (3)抽象类不能实例化,只能由子类实现

  (4)抽象类可以写普通方法,抽象方法必须在抽象类中

4.接口(Interface)

  (1)接口是规范;

  (2)接口中的方法都是public abstract,可以不用写;

  (3)类 implements 接口;

  (4)接口中定义的变量是常量(public static final);

  (5)接口不能被实例化,没有构造方法

5.内部类

  (1)成员内部类可以获得外部类private的变量

  (2)局部内部类

  (3)匿名内部类,不用将实例保存到变量中

6.异常(分为运行时异常和非运行时异常)(异常要抛出和捕获)

Javase06

 

 

 

public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try{//监控区域
            System.out.println(a / b);
        }catch (ArithmeticException e){//有异常才会执行
            System.out.println("程序出现异常,变量b不能为0");
        }finally {//无论有没有异常都会执行,善后工作,可以不写
            System.out.println("finally");
        }

    }

选中一行代码按 Ctrl+Alt+t 自动生成try catch

if(b == 0){//主动的抛出异常
                throw new ArithmeticException();
            }
 public void fun(int a,int b){
        if(b == 0){//主动的抛出异常
            throw new ArithmeticException();//一般用在方法中
        }
        System.out.println(a / b);
    }
public static void main(String[] args) {

        try {
            new Demo01().fun(1,0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }

    }


    //假设这个方法中处理不了这个异常,可以方法上抛出异常
    public void fun(int a,int b)throws ArithmeticException{
        if(b == 0){//主动的抛出异常
            throw new ArithmeticException();//一般用在方法中
        }
    }

7.自定义异常

package 异常.Demo01;

public class Test {

    //可能会存在异常的方法

    static void test(int a) throws MyException {

        System.out.println("传递的参数为:" + a);

        if (a > 10){
            throw new MyException(a);//抛出
        }
        System.out.println("ok!");
    }

    public static void main(String[] args) {
        try {
            test(110);
        } catch (MyException e) {
            System.out.println("MyException->" + e);
        }
    }

}
package 异常.Demo01;

public class MyException extends Exception{

    //传递数字>10抛出异常
    private int detail;

    public MyException(int detaila){
        this.detail = detaila;
    }

    //toString:异常的打印信息
    @Override
    public String toString() {
        return "MyException{" +
                "detail=" + detail +
                '}';
    }
}

8.异常总结

  (1)处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理

  (2)在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常

  (3)对于不确定的代码,也可以加上try-catch,处理潜在的异常

  (4)尽量去处理异常,切记只是简单的调用printStackTrace()去打印输出

  (5)具体如何处理异常,要根据不同的业务需求和异常类型去决定

  (6)尽量添加finally语句块去释放占用的资源

 

上一篇:【Noip模拟 20160929】选数


下一篇:Effective Java--读书笔记(三)【第一版待完成】