Java 反射


        // 多态
        User user = new Child();
        user.test1();
        //user.test2();

        // 类对象
        Class<? extends User> aClass = user.getClass();

        // TODO 获取类的名称
        System.out.println(aClass.getName()); // 获取类的完整名称(包含包名)
        System.out.println(aClass.getSimpleName()); // 获取类的名称
        System.out.println(aClass.getPackageName()); // 获取包的名称

        // TODO 获取类的父类
        Class<?> superclass = aClass.getSuperclass();
        System.out.println(superclass);

        // TODO 获取类的接口
        Class<?>[] interfaces = aClass.getInterfaces();
        System.out.println(interfaces.length);

        // TODO 获取类的属性
        //Field f = aClass.getField("xxxx");  // public
        //Field f1 = aClass.getDeclaredField("xxxx"); // 所有权限


        Field[] fields = aClass.getFields();  //public
        Field[] declaredFields = aClass.getDeclaredFields();  //所有权限


        // TODO 获取类的方法
        Method method = aClass.getMethod("test2"); //public
        Method declaredMethod = aClass.getDeclaredMethod("test2"); //所有权限

        Method[] declaredMethods = aClass.getDeclaredMethods();  //所有权限
        Method[] methods = aClass.getMethods(); //public


        // TODO 构造方法
        //Constructor<? extends User> constructor = aClass.getConstructor();
        //Constructor<?>[] constructors = aClass.getConstructors();

        //Constructor<? extends User> declaredConstructor = aClass.getDeclaredConstructor();
        //Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();

        // TODO 获取权限(修饰符) : 多个修饰符会融合成一个int值
        int modifiers = aClass.getModifiers();
        boolean aPrivate = Modifier.isPrivate(modifiers);
        System.out.println(aPrivate);

    }
}
class User {
    public void test1() {
        System.out.println("test1...");
    }
}
class Child extends User {
    public void test2() {
        System.out.println("test2...");
    }
}
  // 加载类
        // Java中的类主要分为3种:
        // 1. Java的核心类库中的类:String , Object
        // 2. JVM软件开发商
        // 3. 自己写的类,User,Child
        // 类加载器也有3种
        // 1.BootClassLoader : 启动类加载器 (加载类时,使用操作系统平台语言实现)
        // 2.PlatformClassLoader : 平台类加载器
        // 3.AppClassLoader : 应用类加载器


        // TODO 获取类的信息
        Class<Student> studentClass = Student.class;
        // 获取类的加载器对象
        ClassLoader classLoader = studentClass.getClassLoader();
        System.out.println(classLoader);
        System.out.println(classLoader.getParent());
        System.out.println(classLoader.getParent().getParent());

        Class<String> stringClass = String.class;
        // 获取类的加载器对象
        ClassLoader stringClassClassLoader = stringClass.getClassLoader();
        System.out.println(stringClassClassLoader);


        // 加载Java的核心类库 > 平台类库 > 自己的类
    }
}
class Student {

}
   // 员工的登录功能

        // 构造方法对象
        Class empClass = Emp.class;
        Constructor declaredConstructor = empClass.getDeclaredConstructor();
        // 构建对象
        Object emp = declaredConstructor.newInstance();

        // 获取对象的属性
        Field account = empClass.getField("account");
        Field password = empClass.getField("password");

        // 给属性赋值
        account.set(emp,"admin");
        password.set(emp,"admin");

        // 获取登录的方法
        Method login = empClass.getMethod("login");

        // 调用方法
        Object result = login.invoke(emp);

        System.out.println(result);

    }
}
// 员工
class Emp {
    public String account;
    public String password;

    public boolean login() {
        if ( "admin".equals(account)&& "admin".equals(password) ) {
            return true;
        } else {
            return false;
        }
    }

  // 员工的登录功能

        // 1. ClassNotFoundException , 类找不到异常
        // 2. NoSuchMethodException , 没有方法的异常
        // 3. IllegalArgumentException , 参数异常
        // 4. NoSuchFieldException , 没有属性异常
        // 5. IllegalAccessException , 访问权限异常
        // 6. InvocationTargetException , 调用目标异常


        // 构造方法对象
        //Class empClass = Emp.class;
        //Class<? extends Emp> empClass = new Emp().getClass();
        Class<?> empClass = Class.forName("chapter10.Emp");

        Constructor declaredConstructor = empClass.getDeclaredConstructor();
        // 构建对象
        Object emp = declaredConstructor.newInstance();

        // 获取对象的属性
        Field account = empClass.getField("account");
        Field password = empClass.getField("password");

        // 给属性赋值
        account.set(emp,"admin");
        password.set(emp,"admin");

        // 获取登录的方法
        Method login = empClass.getMethod("login");

        // 调用方法
        Object result = login.invoke(emp);

        System.out.println(result);

    }
}
// 员工
class Emp4 {
    public String account;
    public String password;

    public boolean login() {
        if ( "admin".equals(account)&& "admin".equals(password) ) {
            return true;
        } else {
            return false;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值