JAVA反射

119 阅读3分钟

「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战

生命不息,学习不止

题外话

废话不多说,上货

在这里插入图片描述

学前小思考

思考

  1. 一个类的构造函数私有化以后,还能不能创建这个类的对象

  2. 能不能访问一个类对象中的私有方法? 私有属性

  3. 如果想把类中的所有的方法都调用一遍,怎么做

  4. 如何动态的调用某个方法

反射概述

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,敬请期待

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述