Java中Class类方法使用浅析
1、 | public String toString() 源码:isInterface() ? "interface " : (isPrimitive() ? "" : "class ")) + getName(); 例如: System.out.println(User.class.toString()); |
2、 | public String toGenericString() 例如:
|
3、 | public static Class> forName(String className) 例如: Class> user = Class.forName("com.timeblog.model.User"); 如果参数是User的话是找不到那个类的,参数是包名+类名,返回的是一个类,默认就是初始化了的
|
4、 | public static Class> forName(String name, boolean initialize, ClassLoader loader) 方法返回与给定字符串名的类或接口的Class对象,使用给定的类加载器。指定的类加载器加载的类或接口。如果该参数加载器loader 为空,通过引导类加载器加载类。当类被初始化的初始化initialize参数为true,如果它没有被初始化。 例如: ClassLoader classLoader = User.class.getClassLoader(); |
5、 | public T newInstance() 例如: Class> aClass = Class.forName("com.timeblog.model.User"); |
6、 | public native boolean isInstance 这个对象能不能被转化为这个类 1、一个对象是本身类的一个对象 2、一个对象能被转化为本身类所继承类(父类的父类等)和实现的接口(接口的父接口)强转 3、所有对象都能被Object的强转 4、凡是null有关的都是false class.inInstance(null) 类名.class和对象.getClass()几乎没有区别,因为一个类被类加载器加载后,就是唯一的一个类。 例如: Person person = new Person(); Person继承了Human,实现了DoThingService接口,Main是其他不相关类 |
7、 | public native boolean isAssignableFrom 是从类继承的角度去判断,是判断是否为某个类的父类 例如: System.out.println(Human.class.isAssignableFrom(Person.class)); |
8、 | public native boolean isInterface() 是否是接口 例如: System.out.println(Person.class.isInterface()); |
9、 | public native boolean isArray() 是否是数组 例如: System.out.println(int[].class.isArray()); true |
10、 | public native boolean isPrimitive() 主要用来判断Class是否为原始类型(boolean、char、byte、short、int、long、float、double) 例如: System.out.println(int.class.isPrimitive()); |
11、 | public boolean isAnnotation() 是否是注解 例如: System.out.println(TestAnnotation.class.isAnnotation()); |
12、 | public boolean isSynthetic() 如果该类是合成类,则返回true,否则返回false
|
13、 | public String getName() 获取类名,包含包路径 , 和其他getXXXName()方法对比详见28点。 例如: System.out.println(ArrayList.class.getName()); System.out.println(List.class.getName()); |
14、 | public ClassLoader getClassLoader() 获取类装载器,默认获取的是AppClassLoader 例如: ClassLoader classLoader = User.class.getClassLoader(); |
15、 | public TypeVariable 按声明顺序返回TypeVariable对象的一个数组 例如: TypeVariable |
16、 | public native Class super T> getSuperclass() 获取父类,如果没有继承的其他父类就返回超类Object,如果是接口返回null 例如: System.out.println(ArrayList.class.getSuperclass()); |
17、 | public Type getGenericSuperclass() 获取父类但是这个包含参数类型,查看源码发现如果是接口就返回null,其他都返回getSuperclass方法的值 源码: ClassRepository info = getGenericInfo(); 例如: System.out.println(ArrayList.class.getGenericSuperclass()); |
18、 | public Package getPackage() 获取包名,java自带的会有JDK版本号等信息。 例如: System.out.println(String.class.getPackage()); 结果: |
19、 | public Class>[] getInterfaces() 获取实现的接口 例如: |
20、 | public Type[] getGenericInterfaces() 获取实现的接口包含参数类型 例如: Class>[] interfaces = ArrayList.class.getInterfaces(); |
21、 | public native Class> getComponentType() 获取数组的组件类型,如果该类不表示数组类此方法返回null。 例如: System.out.println(User.class.getComponentType()); |
22、 | public native int getModifiers(); 获取Java语言修饰符这个类或接口,编码为一个整数 例如: int modifiers = User.class.getModifiers(); |
23、 | public native Object[] getSigners(); 此方法返回这个类的签名,或者为null,如果没有签名则返回null |
24、 | public Method getEnclosingMethod() 返回表示底层类立即封闭方法的Method对象,如果此Class对象表示一个本地或匿名类,否则返回null。 |
25、 | public Constructor> getEnclosingConstructor() 方法返回一个代表底层类的立即封闭构造器Constructor对象,如果此Class对象表示在构造函数本地或匿名类否则返回null |
26、 | public Class> getDeclaringClass() 获取某个方法在那个类里面实现的 例如: Method[] methods = Person.class.getMethods(); |
27、 | public Class> getEnclosingClass() 方法返回直接封闭类的底层类。如果这个类是一个顶级类此方法返回null。 例如: public class ObjectClassMain { |
28、 | public String getSimpleName() 获取类名,和就是getName()方法去掉包路径后的结果 例如: System.out.println("ArrayList---->"); System.out.println("List---->"); System.out.println("List[]---->"); System.out.println("int---->"); List----> List[]----> int----> |
29、 | public String getTypeName() 获取类类型名称。对比实例详见 28点 |
30、 | public String getCanonicalName() 方法返回底层阶级Java语言规范中定义的标准名称。如果类没有一个规范的名称,则返回null。对比实例详见 28点 |
31、 | public boolean isAnonymousClass() 当且仅当底层类是匿名类,则返回true。 |
32、 | public boolean isLocalClass() 当且仅当底层类是局部类,则返回true。 |
33、 | public boolean isMemberClass() 返回true当且仅当底层类是成员类。 例如: public class ObjectClassMain { |
34、 | public Class>[] getClasses() 返回这个类的公共成员的Class对象的数组 例如: public class ObjectClassMain {
public static void main(String[] args) {
Class>[] classes = ObjectClassMain.class.getClasses();
for (Class> aClass : classes) {
System.out.println(aClass.getName());
}
}
private class privateClass {
}
public class publicClass {
}
public static class publicStaticClass {
}
protected class protectedClass {
}
static class staticClass {
}
}
结果: |
35、 | public Field[] getFields() 获得某个类的所有的公共(public)的字段,包括父类中的字段 该博文中已经写到了 |
36、 | public Method[] getMethods() 该博文中已经写到了 |
37、 | public Constructor>[] getConstructors()
该博文中已经写到了 |
38、 | public Field getField(String name)
该博文中已经写到了 |
39、 | public Method getMethod(String name, Class>... parameterTypes)
该博文中已经写到了 |
40、 | public Constructor
该博文中已经写到了 |
41、 | public Class>[] getDeclaredClasses() 获取所有内部类 例如: public class ObjectClassMain { |
42、 | public Field[] getDeclaredFields() 该博文中已经写到了 |
43、 | public Method[] getDeclaredMethods() 该博文中已经写到了 |
44、 | public Constructor>[] getDeclaredConstructors() 该博文中已经写到了 |
45、 | public Field getDeclaredField(String name) 该博文中已经写到了 |
46、 | public Method getDeclaredMethod(String name, Class>... parameterTypes) 该博文中已经写到了 |
47、 | public Constructor 该博文中已经写到了 |
48、 | public InputStream getResourceAsStream(String name) name 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 当资源文件和类在同一级目录时,加不加/都可以。否则必须加/ |
49、 | public java.net.URL getResource(String name) 此方法返回一个URL对象,或者如果这个名称的资源没有找到则返回null。 |
50、 | public java.security.ProtectionDomain getProtectionDomain() 返回这个类的ProtectionDomain 例如: System.out.println(ObjectClassMain.class.getProtectionDomain()); |
51、 | public boolean desiredAssertionStatus() 方法返回将被分配到这个类,如果它是在调用此方法时被初始化的断言状态。 |
52、 | public boolean isEnum() 是否是枚举 例如: System.out.println(Person.class.isEnum());
结果: false |
53、 | public T[] getEnumConstants() 获取枚举所用的枚举值 例如: public enum TestEnum { TestEnum[] enumConstants = TestEnum.class.getEnumConstants(); |
54、 | public T cast(Object obj) 转成父类或者接口的实例化对象 例如: System.out.println(Human.class.cast(new Person())); |
55、 | public Class extends U> asSubclass(Class clazz) 转换为代表指定的类对象的子类。 源码: if (clazz.isAssignableFrom(this)) |
56、 | public A getAnnotation(Class annotationClass) 获取类上的指定注解 例如: System.out.println(Person.class.getAnnotation(TestAnnotation.class); |
57、 | public boolean isAnnotationPresent(Class extends Annotation> annotationClass) @Retention(RetentionPolicy.RUNTIME)的时候是true |
58、 | public A[] getAnnotationsByType(Class annotationClass)
例如: TestAnnotation[] annotationsByType = Person.class.getAnnotationsByType(TestAnnotation.class); |
59、 | public Annotation[] getAnnotations() 获取类上的所有注解,注解上要有@Retention(RetentionPolicy.RUNTIME) 例如: for (Annotation annotation : Person.class.getAnnotations()) { |
60、 | public A getDeclaredAnnotation(Class annotationClass) 返回这个元素上的annotationClass注解,若该类无直接的annotationClass注解(不包含从父类继承来的注解),则返回null |
61、 | public A[] getDeclaredAnnotationsByType(Class annotationClass) 根据枚举类型返回这个元素上的annotationClass注解,若该类无直接的annotationClass注解(不包含从父类继承来的注解),则返回null |
62、 | public Annotation[] getDeclaredAnnotations() 返回这个类上的所有直接注解(不包含从父类继承来的注解) 例如: for (Annotation annotation : Person.class.getDeclaredAnnotations()) { System.out.println(annotation); } |
63、 | public AnnotatedType getAnnotatedSuperclass() 以注解的方式返回这个类继承的父类 |
64、 | public AnnotatedType[] getAnnotatedInterfaces() 以注解的方式返回这个类实现的所有接口 |
如有不对请在评论区进行评论,谢谢。
《………………………………………………菜鸟起飞中,请各位走过路过的多多指教……………………………………》