|
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();
|