zoukankan      html  css  js  c++  java
  • java

    一、接口:

    接口对期成员变量和方法有很多限制:

    1.接口中的成员变量默认都是public、static、final类型的,因而必须被显式的初始化;

    2.接口中的方法默认都是public,abstract类型的.

    3.接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法.

    4.一个接口不能实现另一个接口,但是它可以继承其它多个接口.

    接口和抽象类的主要区别:

    1.在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,提高代码的可重用性;而接口中只能包含抽象方法.

    二、异常

    异常流程的运行过程

    (1)finally语句不能被执行的唯一情况是先执行了用于终止程序的System.exit()方法。

    (2)return语句用于退出本方法.在执行try或catch代码块中的return语句时,假如有finally代码块,会先执行finally代码块.

    public class WithResult{
        public int methodA(int money) throws SpecialException{
            if(--money<=0) throw new SpecialException("Out of money");
            return money;
        }
        public int methodB(int money)
        {
            try
            {
                System.out.println("Begin");
                int  result=methodA(money);
                return result;
            }
            catch (SpecialException e) {
                // TODO: handle exception
                System.out.println(e.getMessage());
                return -100;
            }
            finally{
                System.out.println("Finally");
            }
        }
        public static void main(String[] args)
        {
            System.out.println(new WithResult().methodB(1));
        }
    }

    结果:

    Begin

    Out of money

    Finally

    "return -100"

    (3)finally代码块虽然在return语句之前被执行,但finally代码块不能通过重新给变量赋值的方式来改变return语句的返回值.

    public static int test()
    {
        int a=0;
        try{
            return a;
        }
        finally
        {
            a=1;
        }
    }
    public static void main(String[] args)
    {
        System.out.println(test());
    }

    尽管先执行a=1;但是return 的值是0
    (4)建议不要在finally代码块中使用return语句,因为它会导致一下两种潜在的错误。第一种是会覆盖try或者catch代码块中的return语句,第二种是丢失异常(try或者catch块中有抛出异常,但是在finally中被无意间取消)。

    在程序运行中,任何中断正常流程的因素都被认为是异常.按照面向对象的思想,java语言用java类来描述异常.所有的异常类的祖先类为java.lang.Throwable类。他有两个方法:getMessage()和printStackTrace()。Throwable类有两个子类:Error类,表示仅靠程序本身无法恢复的严重错误,比如内存空间不足,或者java虚拟机的方法调用栈溢出。Exception类,表示程序本身可以自己处理的异常。

    应该尽量保持异常的原子性.异常的原子性是指当异常发生后,各个对象的状态能够恢复到异常发生前的初始状态,而不至于停留在某个不合理的中间状态.保持异常的原子性有以下办法:

    (1)最常见的方法是先检查方法的参数是否有效,确保当异常发生时还没有改变对象的初始状态.

    (2)编写一段恢复代码,由他来解释操作过程中发生的失败,并且使对象状态回滚到初始状态.

    (3)在对象的临时拷贝上进行操作,当操作成功会,把临时拷贝中的内容覆盖到原来的对象中.

    三、内部类

    内部类:在一个类的内部定义的类称为内部类。

    实例内部类:成员内部类的一种,没有static修饰符。

    (1)在创建实例内部类的实例时,外部类的实例必须已经存在。例如,要创建Inner类,则先必须创建Ourter类。

        Outer.Inner tool=new Outer().Inner()

    (2)实例内部类的实例自动持有外部类实例的应用,可以访问外部类的所有成员。

    (3)外部类实例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部类实例,而一个外部类实例可以引用多个内部类实例。

    (4)在实例内部类中不能定义静态成员,而只能定义实例成员。

    (5)如果实例内部类B与外部类A包含同样的成员v,那么在类B中使用this.v表示B的成员,A.this.v表示A的成员

    静态内部类:成员内部类的一种,使用static修饰。

    (1)静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必先创建外部类。

    (2)静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,就必须先创建外部类的实例。通过外部类的实例去访问。

    (3)在静态内部类中可以定义静态成员和实例成员。

    (4)客户类可以通过完整的类名直接访问静态内部类的静态成员。

  • 相关阅读:
    Solr多核的配置
    Solr开发参考文档(转)
    Solr使用solr4J操作索引库
    Solr和IK分词器的整合
    Solr与mmseg4J的整合
    Lucene实例教程
    Lucene简介
    PHP实现大文件的上传设置
    图片上传预览功能实现
    Logstash 安装和使用
  • 原文地址:https://www.cnblogs.com/limingluzhu/p/2830105.html
Copyright © 2011-2022 走看看