所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂!
GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual
搜索关注微信公众号“码出Offer”,送你学习福利资源!
目录
一、什么是类对象
二、获取类对象的方法
三、常见方法
四、工厂设计模式
五、单例设计模式
思维导图参考:【十六】Java反射思维导图
一、什么是类对象
- 类的对象: 基于某个类new出来的对象,也称为实例对象
- 类对象: 类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)
二、获取类对象的方法
- 通过类的对象,获取类对象
- Person p = new Person();
- Class c = p.getClass();
- 通过类名获取类对象
- Class c = 类名.class;
- 通过静态方法获取类对象
- Class c = Claa.forName(“包名.类名”);
package com.sweetown.reflect.reflect1.reflects;
public class TestGetClassObject {
public static void main(String[] args) throws ClassNotFoundException {
/*1.通过类的对象,获取Class对象*/
Person person = new Person();//类的对象
Class c = person.getClass();//类对象(Class对象,保存了Person.class这个文件中的所有信息)
System.out.println(c.getName());//com.sweetown.reflect.reflect1.reflects.Person
/*2.通过类名获取Class对象*/
Class c1 = Person.class;
System.out.println(c1.getName());//com.sweetown.reflect.reflect1.reflects.Person
/*3.通过Class的静态方法获取Class对象*/
Class c2 = Class.forName("com.sweetown.reflect.reflect1.reflects.Person");
System.out.println(c2.getName());//com.sweetown.reflect.reflect1.reflects.Person
}
//该方法返回一个类对象(Class对象)
public static Class getClassObject(String className) {
Class c = null;
try {
c = Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return c;
}
}
class Person {
}
三、常见方法
- public String getName()
- public Package getPackage()
- public Class<? super T> getSupercalass()
- public Class<?>[] getInterfaces()
- public Field[] getFields()
- public Method[] getMethods()
- public Constructor<?>[] getConstructors()
- public T newInstance()
package com.sweetown.reflect.reflect2.methods;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class TestClassMethod {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
//获取类对象
Class c = Class.forName("com.sweetown.reflect.reflect2.methods.Student");
// Class c = Class.forName("com.sweetown.reflect.reflect2.methods.Person");
System.out.println(c.getName());
//获取指定类对象的包
Package pack = c.getPackage();
System.out.println(pack.getName());//com.sweetown.reflect.reflect2.methods
//获取父类的Class对象
Class superClass = c.getSuperclass();
System.out.println(superClass.getName());//java.lang.Object
//获取接口的Class对象
Class[] interfaces = c.getInterfaces();
for (Class inter : interfaces) {
System