Java笔记 | Java进阶
- Java 反射机制
Java 反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 java 语言的反射机制。
优点:
--提高了 java 语言的灵活性和扩展性。
--可以提高代码复用率。
缺点:
--性能较差。
--程序的可维护性相对较差,业务代码和反射的代码交织在一起。
- 利用反射机制获取类
调用对象的 getClass() 方法:对象.getClass()
调用类的 class 属性:类名.class
使用 Class 类的 forName() 静态方法:Class.forName(String className)
- 利用反射机制获取类的方法和属性
方法主要分普通方法、构造方法、静态方法
getMethods():返回本类及父类所有public普通方法。
getDeclaredMethods():返回本类所有普通方法。
getMethod(方法名,方法参数):返回本类及父类的public指定普通方法。
getDeclaredMethod(方法名,方法参数):返回本类的指定普通方法。
invoke(类的对象,方法具体参数):调用方法。
getConstructors()、getDeclaredConstructors():返回构造方法。
getFileds()、getDeclaredFileds():返回类的属性。
set()、get()、getType():设置属性值、获取属性值、获取属性类型。
- 内部类
成员内部类:
--成员内部类相当于外部类的一个成员变量,可以使用任意访问修饰符。
--成员内部类中定义的方法可以直接访问外部类中的数据而不受访问修饰符的影响。
--外部类不能直接使用成员内部类的成员和方法,需要借助成员内部类的对象。
--需要通过外部类对象来创建成员内部类实例。
--如果外部类和成员内部类具有相同的成员,成员内部类默认优先访问自己的成员。(“外部类.this.对象成员”“外部类.静态成员”)
--编译后产生:外部类$内部类.class
静态内部类:
--静态内部类对象可以不依赖于外部类对象而直接创建。
--静态内部类不能直接访问外部类的非静态成员。(“外部类对象.成员”)
--外部类中可以通过“内部类.成员名”的方式直接访问静态内部类中的静态成员。
方法内部类:
--定义在外部类方法中的内部类,也称局部内部类。
--方法内部类只在其所在方法的内部可见。
--方法内部类不能使用访问控制符和static修饰符,可以用final和abstract修饰。
--编译后产生:外部类$数字.class
匿名内部类:
--如果某个类的实例只用一次,则可以将类的定义与创建放到一起完成,即在定义类的同时就创建一个类。
--属于局部内部类。
--不能有构造方法,可以有构造代码块。不能定义静态成员和静态方法。不能使用public、protected、private、static、abstract、final修饰。
--编译后产生:Outter$1.class