一、Filed

image.png

  1. package com.xit.reflect.reflect2;
  2. import java.lang.reflect.Field;
  3. public class ReflectTest07 {
  4. public static void main(String[] args) throws Exception, InstantiationException, IllegalAccessException {
  5. Student s = new Student();
  6. s.no = 11111;
  7. //class com.xit.reflect.reflect2.Student
  8. Class classStudent = Class.forName("com.xit.reflect.reflect2.Student");
  9. Object obj = classStudent.newInstance();
  10. Field field = classStudent.getDeclaredField("no");
  11. field.set(obj,2222);
  12. field.get(obj);
  13. }
  14. }

二、Mehod(方法)

1、可变长度参数

  1. 语法——类型…(三个点)
  2. 要求参数个数是:0-n个
  3. 可变长参数在参数列表上必须在最后一个位置,而且可变长度参数只能有一个
  4. 可变长参数可以当做一个数组对待 ```java package com.args;

public class ArgsTest { public static void main(String[] args) { m1(); m1(10); m1(10,100,222);

  1. m2(2,"avv");
  2. m3("ss","dasd");
  3. }
  4. public static void m1(int... args){
  5. System.out.println("m方法执行了");
  6. }
  7. public static void m2(int a,String... args){
  8. }
  9. public static void m3(String... args){
  10. for (int i =0;i<args.length;i++){
  11. System.out.println(args[i]);
  12. }
  13. }

}

  1. <a name="wTuKw"></a>
  2. ## 2.反射机制调用方法
  3. 1.找到类 2,获取对象 3.获取方法 4.返回值
  4. ```java
  5. package com.xit.reflect.reflect2;
  6. import java.lang.reflect.Method;
  7. /*
  8. 通过反射机制怎么调用对象的方法
  9. */
  10. public class ReflectTest10 {
  11. public static void main(String[] args) throws Exception {
  12. /*
  13. 4要素
  14. 1.对象
  15. 2.login方法名
  16. 3.实参列表
  17. 4.返回值
  18. */
  19. //不使用反射机制
  20. UserService userService = new UserService();
  21. boolean loginSuccess = userService.login("admin","123");
  22. System.out.println(loginSuccess ? "登录成功" : "登录失败");
  23. /*
  24. obj对象
  25. loginMethod方法
  26. "admin","123"实参
  27. retValue返回值
  28. */
  29. //1.找到类 2,获取对象 3.获取方法 4.返回值
  30. Class c = Class.forName("com.xit.reflect.reflect2.UserService");
  31. //实例化对象
  32. Object obj = c.newInstance();
  33. //获取Method
  34. Method loginMethod = c.getDeclaredMethod("login", String.class, String.class);
  35. Object retValue = loginMethod.invoke(obj,"admin","123");
  36. System.out.println(retValue);
  37. }
  38. }

三、Constructor(构造方法)test12

  1. package com.xit.reflect.reflect2;
  2. import java.lang.reflect.Constructor;
  3. public class ReflectTest12 {
  4. public static void main(String[] args) throws Exception{
  5. Class c = Class.forName("com.xit.reflect.reflect2.Vip");
  6. // 调用无参构造方法
  7. Object obj = c.newInstance();
  8. System.out.println(obj);
  9. //调用有参构造方法
  10. //先获取到这个有参数的构造方法
  11. Constructor con = c.getDeclaredConstructor(int.class,String.class);
  12. //调用构造方法new对象
  13. Object newObj = con.newInstance(110,"jack");
  14. System.out.println(newObj);
  15. }
  16. }

四、通过类获取父类和接口

  1. package com.xit.reflect.reflect2;
  2. public class ReflectTest13 {
  3. public static void main(String[] args) throws ClassNotFoundException {
  4. Class stringClass =Class.forName("java.lang.String");
  5. //获取父类
  6. Class superClass = stringClass.getSuperclass();
  7. System.out.println(superClass.getName());
  8. //获取接口
  9. Class[] interfaces = stringClass.getInterfaces();
  10. for (Class in : interfaces){
  11. System.out.println(in.getName());
  12. }
  13. }
  14. }