markdown
## 概述
```text
每个Class都对应着一个运行实例
```
### 简易实例
```text
Class personalClass = Personal.class;
try {
Constructor constructor = personalClass.getConstructor(Integer.class, String.class,
Double.class);
#newInstance 时必须提供相应的构造器
Personal dashwood = constructor.newInstance(2132, "dashwood", 170.1);
Field id = personalClass.getDeclaredField("id");
id.set(dashwood,1111);
System.out.println(dashwood);
#调用公共方法
Method hashCode = personalClass.getDeclaredMethod("hashCode");
System.out.println(hashCode.invoke(dashwood));
```
### 调用私有结构
```text
Class personalClass = Personal.class;
try {
Constructor declaredConstructor = personalClass.getDeclaredConstructor(String.class);
Personal test = declaredConstructor.newInstance("Test");
System.out.println(test);
Field name = personalClass.getDeclaredField("name");
name.setAccessible(true);
name.set(test,"hello world");
System.out.println(test);
} catch (NoSuchMethodException | InvocationTargetException | InstantiationException |
IllegalAccessException | NoSuchFieldException e) {
throw new RuntimeException(e);
}
}
```
### ClassLoader
```text
将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后在堆
中生成一个代表这个类的java.long.Class对象,作为方法区中类数据的访问入口
1. 引导类加载器
2. 拓展类加载器
3. 系统类加载器
```
```text
ClassLoader classLoader = ClassName.class.getClassLoader();
System.out.println(classLoader);
System.out.println(classLoader.getParent());
```
### 获取类的属性结构
```text
Field[] declaredFields = personalClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println(declaredField);
}
```
### 获取类的方法
```text
Method[] declaredMethods = personalClass.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println(declaredMethod);
}
```
### 获取类的构造器结构
```text
Constructor[] constructors = personalClass.getDeclaredConstructors();
for (Constructor constructor1 : constructors) {
System.out.println(constructor1);
}
```
*
*[返回教程主页](https://www.monody.net/p/blog-page_3.html)*
*
评论