// 多态
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;
}
}