「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」
生命不息,学习不止
题外话
废话不多说,上货
学前小思考
思考
-
一个类的构造函数私有化以后,还能不能创建这个类的对象
-
能不能访问一个类对象中的私有方法? 私有属性
-
如果想把类中的所有的方法都调用一遍,怎么做
-
如何动态的调用某个方法
反射概述
JAVA反射机制:
是在运行状态中(注意不是编译的时候),对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能:
-- 在运行时判断任意一个对象所属的类;
-- 在运行时构造任意一个类的对象;
-- 在运行时判断任意一个类所具有的成员变量和方法;
-- 在运行时调用任意一个对象的方法;
-- 生成动态代理
反射类
JDK 中,关于反射的几个类
Constructor //代表类中的构造器
Method //代表类中的方法
Field //代表类中的字段
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,
注释是一种接口。每个数组属于被映射为 Class 对象的一个类,
所有具有相同元素类型和维数的数组都共享该 Class 对象。
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
Class 类的说明
//如何得到 Class 的对象
1) Class c=类名.class ==> Student.class
2) Class c=实例名称.getClass(); ==> Student stu=new Student(); Class c =stu.getClass();
3) Class c=Class.forName("类的全路径名"); ==>Class.forName("com.mysql.jdbc.Driver");
//例子 用反射创建一个对象 类名.class
class Test {
public static void main(String[] args) throws Exception {
//Dog d=new Dog();
//d.speak();
Class c =Dog.class;
Dog d=(Dog) c.newInstance(); //这个newInstance方法,是调用对象的无参的构造函数来创建对象的
//如果这个类中没有无参的构造函数,将出错
d.speak();
}
}
class Dog {
void speak() {
System.out.println("汪汪");
}
}
反射中的其他的类的说明
Constructor 代表类中的构造函数
Class 类 提供了以下几个方法
public Constructor<T> getConstructor(Class<?>... parameterTypes) //返回指定public构造器,参数为构造器参数类型集合
public Constructor<?>[] getConstructors() //返回类中所有的public构造器集合,默认构造器的下标为0
public Constructor<?>[] getDeclaredConstructors() //返回类中所有的构造器,包括私有的
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) //返回任意指定的构造器,包括私有的
Method
Class 类提供了以下四个方法
public Method[] getMethods() //获取所有的共有方法的集合,包扩继承的
public Method getMethod(String name,Class<?>... parameterTypes) // 获取指定公有方法,包扩继承的 参数1:方法名 参数2:参数类型集合
public Method[] getDeclaredMethods() //获取所有的方法(包扩私有的),除了继承来的
public Method getDeclaredMethod(String name,Class<?>... parameterTypes) //获取任意指定方法,除来了继承来的.包扩私有的
下一篇就讲Javaio,敬请期待
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!