zoukankan      html  css  js  c++  java
  • 内部类

    内部类

    如果A类需要直接访问B类中的成员, 而B又需要A类的对象, 这时候为了方便设计和访问, 直接将A类定义在B类中, 就可以了, A类就称为内部类, 内部类可以直接访问外部类的成员, 而外部类想要访问内部类就得建立内部类的对象

    • 外部类名.内部类名 变量名 = 外部类对象.内部类对象
    • Outer.Inner in = new Outer.new Inner()//因为内部类通常由外部类调用, 所以这种方法很少用
    为什么内部类可以直接访问外部类中的成员?

    因为内部类中持有外部类的一个引用:外部类.this
    内部类编译后的文件名: 外部类名字$内部类名.java

    匿名内部类: 没有名字的内部类, 就是内部类的简化形式,一般只用一次就可以用这中形式。

    使用场景:

    当函数的参数是接口类型的引用, 如果接口中的方法不超过2个, 可以通过匿名内部类来完成参数的传递。

    //1
    new Object(){
    void show(){
    System.out.println("show run");
    }
    }.show();
    //2
    Object obj = new Object(){
    void show(){
    System.out.println("show run");
    }
    };
    obj.show();
    

    一二内部类哪个可以编译成功和失败为什么?
    因为第二种类型用Object的obj引用指向show方法的时候,被提升为Object类型, 编译器检查的时候是没有发现这个show方法, 所以报错

    class InnerClassDemo6 {
    +(static)class Inner{
    void show(){}
    }
    public void method(){
    this.new Inner().show();//可以
    }
    public static void main(String[] args) {//static不允许this
    This.new Inner().show();//错误,Inner类需要定义成static
    }
    }
    
    interface Inter{
    void show();
    }
    class Outer{//通过匿名内部类补足Outer类中的代码。
    public static Inter method(){
    return new Inter(){
    public void show(){}
    };
    }
    }
    class InnerClassDemo7 {
    public static void main(String[] args) {
    Outer.method().show();
    /*
    Outer.method():意思是:Outer中有一个名称为method的方法,而且这个方法是静态的。
    Outer.method().show():当Outer类调用静态的method方法运算结束后的结果又调用了show方法,意味着:method()方法运算完一个是对象,而且这个对象是Inter类型的。
    */
    

    异常:

    指:程序在运行的时候出现的不正常的情况, 然后根据面向对象的思想将其封装成异常类,这样方便操作问题以及处理问题。
    比如数据下标越界, 空指针问题。
    它的异常体系可以为:

    --------java.lang.Throwable:
    Throwable:可抛出的。
    |--Error:错误,一般情况下,较为严重
    |--Exception:异常,可以有针对性的处理方式

    1. 异常体系有个特点: 可抛性
    2. 在定义功能的时候发现一些问题, 应该 将问题定义的时候标示出来。通过throws标示出来。调用这个功能的人必须进行处理, 要么继续抛出要么进行捕获,

    对于捕捉:java有针对性的语句块进行处理。

    try {
    需要被检测的代码;
    }
    catch(异常类 变量名){
    异常处理代码;
    }
    fianlly{
    一定会执行的代码;
    }
    
    catch (Exception e) { //e用于接收try检测到的异常对象。
    System.out.println("message:"+e.getMessage());//获取的是异常的信息。
    System.out.println("toString:"+e.toString());//获取的是异常的名字+异常的信息。
    e.printStackTrace();//打印异常在堆栈中信息;异常名称+异常信息+异常的位置。
    }
    
    1. 异常处理的原则: 功能抛出几个异常, 功能调用如果进行tey处理需要与之对应的catch代码块, 这样的处理有针对性。
    2. throw和throws关键字的区别:
      throw用于抛出异常, 后面常跟的是异常对象,throws用于抛出异常类, 后面跟着的是异常类名。
    3. 什么时候定义try, 内部可以处理的时候就用try, 如处理不了就必须声明出来,让调用者处理。
    4. 自定义异常:如果开发的时候出现没有定义过的问题, 且自认为有必要, 则创建自定义异常。

    自定义异常的步骤:
    1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。
    2:通过throw 或者throws进行操作


    常见异常:
    脚标越界异常(IndexOutOfBoundsException)包括数组、字符串;
    空指针异常(NullPointerException)
    2、类型转换异常:ClassCastException

    包:

    定义包用的package关键字

    1. 给类文件进行分类管理
    2. 给类文件提供多层名称空间

    全类名:包名.类名

    包与包之间的访问权限:
    public protected

    总共权限有: public private default protected

    导入

    import 导入

    常见软件包:

    Java.lang language java 核心包, Object System
    Java.awt 图形化界面的对象
    javax.swing 提供所有的windows桌面应用程序包括的控件, 比如:Frame, Dialog, Table, List等等
    java.net 用于Java网络编程方面
    java.io : io流的对象包
    java.util : 工具包, 时间对象, 集合框架都在里面
    java.applet: applet + server 就变成servlet

  • 相关阅读:
    SQL基础-子查询&EXISTS&UNION
    SQL基础-汇总统计及GROUP BY
    SQL基础-创建新的输出字段
    SQL基础-过滤数据
    获取图片为二进制流,并且显示图片到网页
    计算两个日期相差的工作小时数,过滤了周末双休小时数
    计算两个日期相差的工作天数,过滤了周末双休天数
    WEB性能测试工具
    C#整合VS2010和NUnit
    如何打开Windows Server 2008 R2的域安全策略
  • 原文地址:https://www.cnblogs.com/jwlxtf/p/7929990.html
Copyright © 2011-2022 走看看