因为演示需要,所以把Person类尽量的造得尽可能的复杂,如下
Person类:
@MyAnnotation(value = "PeterLi") public class Person extends Creature<String> implements Comparable, MyInterface { public String name; private int age; int id; protected boolean sex; //创建类时,尽量保留一个空参的构造器 public Person() { // System.out.println("今天天气很闷热"); } public Person(String name) { this.name = name; } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @MyAnnotation(value = "abc123") public void show() { System.out.println("我是一个人!"); } private void display(String nation) throws Exception{ System.out.println("我的国籍是" + nation); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Object o) { return 0; } class Bird{ } }
Creature父类:
public class Creature<T> { public double weight; public void breath() { System.out.println("呼吸"); } }
MyInterface接口:
public interface MyInterface extends Serializable { }
MyAnnotation注解:
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value(); }
下面是代码示例:
public class TestOthers { //7.获取内部类 @Test public void test7() throws ClassNotFoundException { Class clazz = Class.forName("com.peter.java19.Person$Bird"); System.out.println(clazz.getName()); } //6.获取类的注解 只有声明RUNTIME才能被获取 @Test public void test6() { Class clazz = Person.class; Annotation[] anns = clazz.getAnnotations(); for (Annotation a : anns) { System.out.println(a); } } //5.获取所在的包 @Test public void test5() { Class clazz = Person.class; Package pack = clazz.getPackage(); System.out.println(pack); } //4.获取实现的接口 @Test public void test4() { Class clazz = Person.class; Class[] interfaces = clazz.getInterfaces(); for (Class c : interfaces) { System.out.println(c); } } //3*.获取父类的泛型 @Test public void test3() { Class clazz = Person.class; Type type = clazz.getGenericSuperclass(); ParameterizedType param = (ParameterizedType) type; Type[] ars = param.getActualTypeArguments(); System.out.println(((Class) ars[0]).getTypeName()); } //2.获取带泛型的父类 @Test public void test2() { Class clazz = Person.class; Type type = clazz.getGenericSuperclass(); System.out.println(type); } //1.获取运行时类的父类 @Test public void test1() { Class clazz = Person.class; Class superClass = clazz.getSuperclass(); System.out.println(superClass); } }
test1结果:
class com.peter.java19.Creature
test2结果:
com.peter.java19.Creature<java.lang.String>
test3结果:
java.lang.String
test4结果:
interface java.lang.Comparable
interface com.peter.java19.MyInterfacetest5结果:
package com.peter.java19
test6结果:
@com.peter.java19.MyAnnotation(value=PeterLi)
test7结果:
com.peter.java19.Person$Bird