当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-Java 中的反射是什么意思?

金三银四精选java面试题-Java 中的反射是什么意思?

来源:图灵教育
时间:2023-11-28 10:22:45
 

Java 中的反射是什么意思?

什么是Java反射?

官方给出的解释:Java的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法; 并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。

简单的说:在运行时动态地获取、操作和修改类或对象的属性、方法、构造函数等信息的能力,而不需要在编译时预先知道类的具体信息。

如何利用反射机制获取class对象?

  • 使用 Class.forName 静态方法

在使用Class.forName获取Class对象时,需要提供完整的类名(包括包名)。如果User类不在默认包中,还需要加上包名,如Class.forName("polo.User")。

  • 使用类名.class 方法
@Test
public void classDemo1() {
    // 使用类的.class获取Class对象
	Class<?> userClass = User.class;
    System.out.println(userClass);
}
  • 使用实例对象的 getClass() 方法
@Test
public void classDemo1() throws ClassNotFoundException {
    // 使用实例获取Class对象
    User user = new User();
    Class<?> userClass = user.getClass();
}

利用反射创造对象

//方式一
Class class = Class.forName("polo.User");
User user = (User) class.newInstance();
System.out.println(user);

//方式二
Constructor constructor = class.getConstructor();
User user1 = (User) constructor.newInstance();
System.out.println(user1);

利用反射获取方法

//方法一
Class class1 = Class.forName("polo.User");
Method[] declaredMethods = class1.getMethods();
System.out.println(Arrays.tostring(declaredMethods));

利用反射成员变量

Class class1 = Class.forName("polo.User");
Field email = class1.getDeclaredField("email");
System.out.println(email);
Field username = class1.getDeclaredField("username");
System.out.println(username);

利用反射获取类构造器

Class class1 = Class.forName("polo.User");
//Class<?>[] parameterTypes = null; //调用无参构造器,也可以直接不传任何参数
Class<?>[] parameterTypes = {int.class, String.class, String.class}
Constructor<? extends User> constructor1 = Class.getConstructor(parameterTypes);
System.out.println(constructor1);
//constructor1.newInstance();
constructor1.newInstance(1,"baili","baili.com");