Java中的内部类和反射
发布日期:2021-10-02 09:00:29 浏览次数:6 分类:技术文章

本文共 1925 字,大约阅读时间需要 6 分钟。

 

 

Java中的内部类和反射是Java中学习最难的一部分,可能对于初学着来说很难第一时间内就全部掌握,先来看一下他们的具体定义吧。
内部类
   1) 从 JDK 1.1 以后,把具有包含关系的类应用到语法上的包含的一种实现
   2) 包括了静态内部类、成员内部类、局部内部类、匿名内部类
   3) 静态内部类和成员内部类定义于类内部,局部内部类和匿名内部类定义在方法内部

   静态内部类:

   a.定义在类的内部
   b.相当于静态成员
   Out t = new Out();
   t.member/member()
   t.this.imember
   OutStatic os=new Out.Static()  os.inmember/()
   c.添加static修饰符
   d.编译后产生的class的命名规则如下,
       外部类名$内部类名.class

   成员内部类

   a.定义在类的内部
   b.相当于类的成员
      1.直接访问外部类的成员
      2.在外部类创建成员内部类实例this.new inner()
      3.外部类的外部创建成员内部类
        (new outter()).new inner()
        out_in_class.imember

   c.编译后产生的class的命名规则同静态内部类

   局部内部类

   a.定义在方法的内部
   b.相当于方法的局部变量
      1.实例化方法   new inner()
      2.由于其是局部内部类,不能在方法外访问,不能加访问        权限修饰符
   c.编译后产生的class的命名规则为 
      外部类名$序号内部类名.class
          Week2$1DayIterator.class

   匿名内部类

   a.定义在方法内部
   b.匿名内部类只能实现一个接口或者继承一个抽象类
   c.匿名内部类对接口和抽象类必须全实现
   d.匿名内部类中不可以显式定义构造器
     非静态初始化代码块
       { ... }  实现成员变量初始化功能

   f.匿名内部类产生的class的命名规则为

          外部类名$序号.class
         Week2$1.class
写法:
  new 接口/抽象类名称(){...}

10.反射

   通过一种机制获得类的具体的内容的过程成为反射。
   这种机制我们成为反射机制。
   1.创建一个类  new ...();
     classname   constructor  field  method ...
     Class {......  .... ... ....}
   2.创建一个类的对象的同时也对这个类创建一个Class对象。
     使用Class对象保存类的信息。
   3.对一个类通过反射机制可以把它的信息反射到Class对象中,获取该类的信息。
   4.反射机制的作用:
     a. 可以在运用类之前,把封装在类中信息反射得到;
     b. 在不知道一个类的名字的时候,不运行也可以创建类的    实例
     c. 可以通过反射突破封装特性获取/设置属性
     d. 可以通过反射在不运行类的情况下,可以执行方法
     e. 可以不运行的情况下,创建数组,设置长度,调整元素

   5.所有的反射机制的功能 在 java.lang.reflect包下

    在使用Java反射方面是内容是需要用到的Java架包和一些API
     API包括:
        java.lang.Class
        java.lang.reflect.Field
    java.lang.reflect.Method
        java.lang.reflect.Array
    java.lang.reflect.Constructor
好了,今天就先看到这里了。

 

 Class<?> classIntance = Class.forName(this.getClass()
      .getCanonicalName()
      + "$" + className);
    System.out.println(classIntance.getCanonicalName());
    Constructor<?> constructor = classIntance
      .getDeclaredConstructor(SfsDownLoadCheck.class);
    constructor.setAccessible(true);
    Object newInstance = constructor.newInstance(sfsDownLoadCheck);
    // Invoke the method to download file
    DownloadStrategies downloadStrategies = (DownloadStrategies) newInstance;
    int length = downloadStrategies.getContent(filePath).length();

转载地址:https://blog.csdn.net/jiafu1115/article/details/7093281 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:sql server快速删除记录方法
下一篇:Java method invoke的指令简介

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月15日 19时46分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章