• day13


    三、有名字的局部内部类(很少)(了解)
        1、语法格式
          【修饰符】 class 外部类{
               【修饰符】 返回值类型  方法名(【形参列表】){
                       【修饰符】  class 局部内部类{
                                            }
                               }
                      }
             局部内部类:在方法体、代码块中声明的,和方法的局部变量很多方面是一样
     
        2、局部内部类也是一个类
           (1)有自己的字节码文件
               外部类名$编号局部内部类名
               这里用编号原因,在不同的方法中,局部内部类可能同名
          (2)成员
             A:属性
             B:方法
             C:构造器
             D:代码块
             E:内部类
                  不能有静态的成员
                  即唯一能声明静态成员的内部类只有一个“静态内部类”,其他内部类统统都不可以有静态成员。
     
        3、使用
         (1)在外部类中使用局部内部类
                  只能在声明局部内部类的下面才能使用,即先声明后使用
                  并且有作用域的限制。
         (2)在外部类的外面
                   肯定不行
           (3)在局部内部类中使用外部类的成员
              局部内部类是否可以使用外部类的非静态的成员,取决于所在方法是否是静态的
           (4)在局部内部类中可以使员工外部类的“局部常量”,即有final修饰
              JDK1.8之前:必须手动加final
              JDK1.8之后,自动加final

    四、匿名内部类(重要)
         1、语法格式:
               外部类{
                    方法{
                           new 父类(【实参列表】){
                          成员
                          }
                           new 父接口(){
                           成员
                         }
                    }           
             }

        2、特点
          (1)没名字
                  所以不写构造器
          (2)匿名内部类必须在声明类的同时就要创建对象,也只有唯一的一个对象
          (3)必须指定匿名内部类的父类或父接口
       3、匿名内部类也是类
         (1)有字节码文件
                 外部类名$编号.class
        (2)也有成员
                 属性、方法、代码块、内部类、构造器都有,不能有静态的,一般不会写这么多。
                一般匿名内部类都是重写父类的方法或实现接口的抽象方法
     
        4、在匿名内部类中要使用外部类的成员的话
           (1)是否可以使用外部类的非静态成员,要看所在的方法是否是静态的
           (2)只能使用外部类的局部常量,必须有final

    枚举:也是一个种类型,也是一个类
        1、什么是枚举?
             中文:枚举  的近义词  列举,穷举,罗列
            Java中,枚举,罗列出该类型的所有对象
     
        2、什么情况会用枚举?
             当某个类型它的对象是有限的几个,这个时候就可以使用枚举。
             例如:Week类型,它的对象,我想限定为7个
             Season类型,它的对象,限定为4个
             付款方式Payment,它的对象,限定为:微信付款wechat,支付宝alipay,银行卡card,信用卡creditCard,现金cash
             员工的状态:(OA)系统中,定义为:Busy忙,Free闲,Vocation休假,Left离职
        3、如何声明枚举类

           JDK1.5之后:
            1、枚举类的声明格式
               【修饰符】 enum 枚举类名{
                   枚举类的常量对象列表 【;
                           其他成员列表
                   】
                   }
               说明:
                 (1)如果枚举常量对象列表后面要写其他成员,那么需要在常量对象列表后面加;分隔,如果没有其他成员,那么;可写可不写
                 (2)构造器一定是私有化的
                 (3)枚举类型的默认父类不是Object,而是java.lang.Enum类,当然Enum也是Object的子类
                          枚举类型不能再继承别的类型

              java.lang.Enum类:
                (1)构造器
                    protected Enum(String name,int ordinal)
                    name是为Enum类中的name属性赋值,自动赋值为常量对象的名称
                    ordinal是Enum类中的ordinal属性赋值,自动赋值为常量对象的“序号”,这个序号是从0开始
                    他们的get方法没有按照普通类的get方法的命名,而是直接用属性名作为get方法的名称:name(),ordinal()
                    因为父类Enum只有唯一的一个有参构造,意味着我们自己写的枚举类的构造器和普通类(默认调用父类的无参构造)不一样,
                    默认调用的是父类的有参构造。
                (2)Enum实现了java.lang.Comparable接口
                    所有的枚举类型都支持比较大小,因为Enum实现了java.lang.Comparable接口,按照常量对象的顺序比较大小。
                    父类中把这个int compareTo()加了final,子类不能重写
                (3)两个API中没有的方法
                    static 枚举类型[] values():用来返回枚举类型的所有常量对象
                    static 枚举类型  valueOf(字符串类型的常量对象名)
     注解(annotation):它又称为注释,它本质上也是注释,只不过它是代码级别的注释,即它用代码注释代码。
                                   因为说注释容易让人误解为单行和多行的普通注释,很多人就故意叫做“注解”, 注解是JDK1.5之后引入。

    注解长什么样?  @注解
          一个完整的注解,它应该有三部分组成:
          (1)定义,声明
                可能是程序员自己声明的,也可能是别人声明好的
                开发中,绝大多数都是用别人声明好的。
         (2)注解的使用
                你看到在类上面、方法上面、属性上面....用到了@注解,就是在使用注解
         (3)读取注解
                 得有代码去读取这个注解,理解代码的用意,信息...
                 读取注解需要用代码去读取,这个代码我们称为“注解处理流程”,大多数情况下,这个代码也是别人写好的,
                一般都是谁定义,谁复制编写读取注解的代码。
                 注解在后面的框架中使用最多,它的作用是用来替代xml的配置文件,对代码进行解释。
                因为xml的配置方式,一个是复杂,另一个与所解释的代码是独立的,所以有的地方不用xml,用注解
     
     常见的注解:
           一、系统定义的最基本的三个注解(必须都认识,会写,会用)
             1、@Override:
                  这个注解的声明是在JDK的核心类库中声明的,
                  这个注解的读取是编译器来读取的,编译器:javac.exe,eclipse中有自己编译器
                  这个注解的使用由程序员来使用,用在所有的重写的方法的上面,表示让编译器,按照重写的要求对该方法进行格式检查和编译。
     
             2、@SuppressWarings(xx) 
                  这个注解的声明是在JDK的核心类库中声明的,
                  这个注解的读取是编译器来读取的,编译器:javac.exe,eclipse中有自己编译器
                  这个注解的使用由程序员来使用,用在任意需要抑制警告的地方 
                 @SuppressWarnings("all")
                 @SuppressWarnings({ "rawtypes", "unused" })
            3、@Deprecated
                这个注解的声明是在JDK的核心类库中声明的,
                这个注解的读取是编译器来读取的,编译器:javac.exe,eclipse中有自己编译器
                这个注解的使用由程序员来使用,用在任意需要标记为“已过时”的元素上面,可能是方法,可能是类,
               “已过时”的东西,不建议程序继续使用的,如果使用可能有问题

  • 相关阅读:
    移动浏览器的四大内核
    H5页面移动端兼容性测试
    如何定义关键字
    web通用测试点总结
    katalon数据库处理
    jmeter jdbc请求测试
    jmeter实现数据驱动分离(if控制器的使用)
    Vue3 具名插槽+作用域插槽同时使用的方法
    webpack-5.x版本 启动server服务时的报错和解决办法
    webpack 图片打包时,,出现图像未加载问题
  • 原文地址:https://www.cnblogs.com/zzz222zzz/p/11580509.html
Copyright © 2020-2023  润新知