Class类实例的种类
package com.yuzhenc.introspection;
public class Test01 {
public static void main(String[] args) throws ClassNotFoundException {
Person1 p = new Person1();
Class c1 = p.getClass();
System.out.println(c1);
Class c2 = Person1.class;
System.out.println(c2);
System.out.println(c1==c2);
Class c3 = Class.forName("com.yuzhenc.introspection.Person1");
ClassLoader loader = Test01.class.getClassLoader();
Class c4 = loader.loadClass("com.yuzhenc.introspection.Person1");
Class c5 = Person1.class;
Class c6 = Comparable.class;
Class c7 = Override.class;
int[] arr1 = {1,2,3};
Class c8 = arr1.getClass();
int[] arr2 = {5,6,7};
Class c9 = arr2.getClass();
System.out.println(c8==c9);
Class c10 = int.class;
Class c11 = void.class;
}
}
class Person1 {
private int age;
public String name;
private void eat(){
System.out.println("Person---eat");
}
public void sleep(){
System.out.println("Person---sleep");
}
}
获取运行时类的完整结构
package com.yuzhenc.introspection;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.*;
import static java.lang.annotation.ElementType.*;
public class Test02 {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {
Class cls = Student.class;
Constructor[] c1 = cls.getConstructors();
for(Constructor c:c1){
System.out.println(c);
}
System.out.println("-------------------");
Constructor[] c2 = cls.getDeclaredConstructors();
for(Constructor c:c2){
System.out.println(c);
}
System.out.println("-------------------");
Constructor con1 = cls.getConstructor();
System.out.println(con1);
Constructor con2 = cls.getDeclaredConstructor(int.class,double.class);
System.out.println(con2);
Constructor con3 = cls.getDeclaredConstructor(int.class);
System.out.println(con3);
Object o1 = con1.newInstance();
System.out.println(o1);
Object o2 = con2.newInstance(25, 170.6);
System.out.println(o2);
Field[] fields = cls.getFields();
for(Field f:fields){
System.out.println(f);
}
System.out.println("---------------------");
Field[] declaredFields = cls.getDeclaredFields();
for(Field f:declaredFields){
System.out.println(f);
}
System.out.println("---------------------");
Field score = cls.getField("score");
System.out.println(score);
Field sno = cls.getDeclaredField("sno");
System.out.println(sno);
System.out.println("---------------------");
System.out.println(Modifier.toString(sno.getModifiers()));
Class clazz = sno.getType();
System.out.println(clazz.getName());
String name = sno.getName();
System.out.println(name);
System.out.println("-------------------------------");
Field sco = cls.getField("score");
Object obj = cls.newInstance();
sco.set(obj,98);
System.out.println(obj);
Method[] methods = cls.getMethods();
for(Method m:methods){
System.out.println(m);
}
System.out.println("-----------------------");
Method[] declaredMethods = cls.getDeclaredMethods();
for(Method m:declaredMethods){
System.out.println(m);
}
System.out.println("-----------------------");
Method showInfo1 = cls.getMethod("showInfo");
System.out.println(showInfo1);
Method showInfo2 = cls.getMethod("showInfo", int.class, int.class);
System.out.println(showInfo2);
Method work = cls.getDeclaredMethod("work");
System.out.println(work);
System.out.println("-----------------------");
System.out.println(work.getName());
int modifiers = work.getModifiers();
System.out.println(Modifier.toString(modifiers));
System.out.println(work.getReturnType());
Class[] parameterTypes = work.getParameterTypes();
for(Class c:parameterTypes){
System.out.println(c);
}
Method myMethod = cls.getMethod("myMethod");
Annotation[] annotations = myMethod.getAnnotations();
for(Annotation a:annotations){
System.out.println(a);
}
Class[] exceptionTypes = myMethod.getExceptionTypes();
for(Class c:exceptionTypes){
System.out.println(c);
}
Object o = cls.newInstance();
myMethod.invoke(o);
System.out.println(showInfo2.invoke(o,12,45));
Class[] interfaces = cls.getInterfaces();
for(Class c:interfaces){
System.out.println(c);
}
Class superclass = cls.getSuperclass();
Class[] interfaces1 = superclass.getInterfaces();
for(Class c:interfaces1){
System.out.println(c);
}
Package aPackage = cls.getPackage();
System.out.println(aPackage);
System.out.println(aPackage.getName());
Annotation[] annotation = cls.getAnnotations();
for(Annotation a:annotation){
System.out.println(a);
}
}
}
interface MyInterface {
void myMethod();
}
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value();
}
class Person implements Serializable {
private int age;
public String name;
private void eat(){
System.out.println("Person---eat");
}
public void sleep(){
System.out.println("Person---sleep");
}
}
@MyAnnotation(value="hello")
class Student extends Person implements MyInterface{
private int sno;
double height;
protected double weight;
public double score;
@MyAnnotation(value="himethod")
public String showInfo(){
return "我是一名三好学生";
}
public String showInfo(int a,int b){
return "重载方法====我是一名三好学生";
}
private void work(){
System.out.println("我以后会找工作--》成为码农 程序员 程序猿 程序媛");
}
void happy(){
System.out.println("做人最重要的就是开心每一天");
}
protected int getSno(){
return sno;
}
public Student(){
System.out.println("空参构造器");
}
private Student(int sno){
this.sno = sno;
}
Student(int sno,double weight){
this.sno = sno;
this.weight = weight;
}
protected Student(int sno,double height,double weight){
this.sno = sno;
}
@Override
@MyAnnotation(value="hellomyMethod")
public void myMethod() {
System.out.println("我重写了myMethod方法。。");
}
@Override
public String toString() {
return "Student{" +
"sno=" + sno +
", height=" + height +
", weight=" + weight +
", score=" + score +
'}';
}
}