<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      1.javabean對(duì)象

      @MyAnnotation(value="hi")
      public class Person extends Creature<String> implements Comparable<String>,MyInterface{
          private String name;
          int age;
          public int id;
      
          public Person(){}
          @MyAnnotation(value="abc")
          private Person(String name){
              this.name = name;
          }
           Person(String name,int age){
              this.name = name;
              this.age = age;
          }
          @MyAnnotation
          private String show(String nation){
              System.out.println("我的國(guó)籍是:" + nation);
              return nation;
          }
          public String display(String interests,int age) throws NullPointerException,ClassCastException{
              return interests + age;
          }
          @Override
          public void info() {
              System.out.println("我是一個(gè)人");
          }
          @Override
          public int compareTo(String o) {
              return 0;
          }
          private static void showDesc(){
              System.out.println("我是一個(gè)可愛(ài)的人");
          }
          @Override
          public String toString() {
              return "Person{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      ", id=" + id +
                      '}';
          }
      }

      2.自定義注解

      @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
      @Retention(RetentionPolicy.RUNTIME)
      public @interface MyAnnotation {
          String value() default "hello";
      
      }

      3.接口

      public interface MyInterface {
          void info();
      }

      4.父類

      public class Creature<T> implements Serializable {
          private char gender;
          public double weight;
      
          private void breath(){
              System.out.println("生物呼吸");
          }
      
          public void eat(){
              System.out.println("生物吃東西");
          }
      
      }

      5.開(kāi)始測(cè)試

      /**
       * 調(diào)用運(yùn)行時(shí)類中指定的結(jié)構(gòu):屬性、方法、構(gòu)造器
       *
       */
      public class ReflectionTest {
      
          /*
              不需要掌握
           */
          @Test
          public void testField() throws Exception {
              Class clazz = Person.class;
      
              //創(chuàng)建運(yùn)行時(shí)類的對(duì)象
              Person p = (Person) clazz.newInstance();
      
              //獲取指定的屬性:要求運(yùn)行時(shí)類中屬性聲明為public
              //通常不采用此方法
              Field id = clazz.getField("id");
      
              /*
              設(shè)置當(dāng)前屬性的值
      
              set():參數(shù)1:指明設(shè)置哪個(gè)對(duì)象的屬性   參數(shù)2:將此屬性值設(shè)置為多少
               */
      
              id.set(p,1001);
      
              /*
              獲取當(dāng)前屬性的值
              get():參數(shù)1:獲取哪個(gè)對(duì)象的當(dāng)前屬性值
               */
              int pId = (int) id.get(p);
              System.out.println(pId);
      
      
          }
          /*
          如何操作運(yùn)行時(shí)類中的指定的屬性 -- 需要掌握
           */
          @Test
          public void testField1() throws Exception {
              Class clazz = Person.class;
      
              //創(chuàng)建運(yùn)行時(shí)類的對(duì)象
              Person p = (Person) clazz.newInstance();
      
              //1. getDeclaredField(String fieldName):獲取運(yùn)行時(shí)類中指定變量名的屬性
              Field name = clazz.getDeclaredField("name");
      
              //2.保證當(dāng)前屬性是可訪問(wèn)的
              name.setAccessible(true);
              //3.獲取、設(shè)置指定對(duì)象的此屬性值
              name.set(p,"Tom");
      
              System.out.println(name.get(p));
          }
      
          /*
          如何操作運(yùn)行時(shí)類中的指定的方法 -- 需要掌握
           */
          @Test
          public void testMethod() throws Exception {
      
              Class clazz = Person.class;
      
              //創(chuàng)建運(yùn)行時(shí)類的對(duì)象
              Person p = (Person) clazz.newInstance();
      
              /*
              1.獲取指定的某個(gè)方法
              getDeclaredMethod():參數(shù)1 :指明獲取的方法的名稱  參數(shù)2:指明獲取的方法的形參列表
               */
              Method show = clazz.getDeclaredMethod("show", String.class);
              //2.保證當(dāng)前方法是可訪問(wèn)的
              show.setAccessible(true);
      
              /*
              3. 調(diào)用方法的invoke():參數(shù)1:方法的調(diào)用者  參數(shù)2:給方法形參賦值的實(shí)參
              invoke()的返回值即為對(duì)應(yīng)類中調(diào)用的方法的返回值。
               */
              Object returnValue = show.invoke(p,"CHN"); //String nation = p.show("CHN");
              System.out.println(returnValue);
      
              System.out.println("*************如何調(diào)用靜態(tài)方法*****************");
      
              // private static void showDesc()
      
              Method showDesc = clazz.getDeclaredMethod("showDesc");
              showDesc.setAccessible(true);
              //如果調(diào)用的運(yùn)行時(shí)類中的方法沒(méi)有返回值,則此invoke()返回null
      //        Object returnVal = showDesc.invoke(null);
              Object returnVal = showDesc.invoke(Person.class);
              System.out.println(returnVal);//null
      
          }
      
          /*
          如何調(diào)用運(yùn)行時(shí)類中的指定的構(gòu)造器
           */
          @Test
          public void testConstructor() throws Exception {
              Class clazz = Person.class;
      
              //private Person(String name)
              /*
              1.獲取指定的構(gòu)造器
              getDeclaredConstructor():參數(shù):指明構(gòu)造器的參數(shù)列表
               */
      
              Constructor constructor = clazz.getDeclaredConstructor(String.class);
      
              //2.保證此構(gòu)造器是可訪問(wèn)的
              constructor.setAccessible(true);
      
              //3.調(diào)用此構(gòu)造器創(chuàng)建運(yùn)行時(shí)類的對(duì)象
              Person per = (Person) constructor.newInstance("Tom");
              System.out.println(per);
      
          }
      
      }

       

       

       

      6.測(cè)試Filed

      public class FieldTest {
      
          @Test
          public void test1(){
      
              Class clazz = Person.class;
      
              //獲取屬性結(jié)構(gòu)
              //getFields():獲取當(dāng)前運(yùn)行時(shí)類及其父類中聲明為public訪問(wèn)權(quán)限的屬性
              Field[] fields = clazz.getFields();
              for(Field f : fields){
                  System.out.println(f);
              }
              System.out.println();
      
              //getDeclaredFields():獲取當(dāng)前運(yùn)行時(shí)類中聲明的所有屬性。(不包含父類中聲明的屬性)
              Field[] declaredFields = clazz.getDeclaredFields();
              for(Field f : declaredFields){
                  System.out.println(f);
              }
          }
      
          //權(quán)限修飾符  數(shù)據(jù)類型 變量名
          @Test
          public void test2(){
              Class clazz = Person.class;
              Field[] declaredFields = clazz.getDeclaredFields();
              for(Field f : declaredFields){
                  //1.權(quán)限修飾符
                  int modifier = f.getModifiers();
                  System.out.print(Modifier.toString(modifier) + "\t");
      
                  //2.數(shù)據(jù)類型
                  Class type = f.getType();
                  System.out.print(type.getName() + "\t");
      
                  //3.變量名
                  String fName = f.getName();
                  System.out.print(fName);
      
                  System.out.println();
              }
      
          }
      
      }

       

       7.測(cè)試Method

      public class MethodTest {
      
          @Test
          public void test1(){
      
              Class clazz = Person.class;
      
              //getMethods():獲取當(dāng)前運(yùn)行時(shí)類及其所有父類中聲明為public權(quán)限的方法
              Method[] methods = clazz.getMethods();
              for(Method m : methods){
                  System.out.println(m);
              }
              System.out.println();
              //getDeclaredMethods():獲取當(dāng)前運(yùn)行時(shí)類中聲明的所有方法。(不包含父類中聲明的方法)
              Method[] declaredMethods = clazz.getDeclaredMethods();
              for(Method m : declaredMethods){
                  System.out.println(m);
              }
          }
      
          /*
          @Xxxx
          權(quán)限修飾符  返回值類型  方法名(參數(shù)類型1 形參名1,...) throws XxxException{}
           */
          @Test
          public void test2(){
              Class clazz = Person.class;
              Method[] declaredMethods = clazz.getDeclaredMethods();
              for(Method m : declaredMethods){
                  //1.獲取方法聲明的注解
                  Annotation[] annos = m.getAnnotations();
                  for(Annotation a : annos){
                      System.out.println(a);
                  }
                  //2.權(quán)限修飾符
                  System.out.print(Modifier.toString(m.getModifiers()) + "\t");
      
                  //3.返回值類型
                  System.out.print(m.getReturnType().getName() + "\t");
      
                  //4.方法名
                  System.out.print(m.getName());
                  System.out.print("(");
                  //5.形參列表
                  Class[] parameterTypes = m.getParameterTypes();
                  if(!(parameterTypes == null && parameterTypes.length == 0)){
                      for(int i = 0;i < parameterTypes.length;i++){
      
                          if(i == parameterTypes.length - 1){
                              System.out.print(parameterTypes[i].getName() + " args_" + i);
                              break;
                          }
      
                          System.out.print(parameterTypes[i].getName() + " args_" + i + ",");
                      }
                  }
                  System.out.print(")");
      
                  //6.拋出的異常
                  Class[] exceptionTypes = m.getExceptionTypes();
                  if(exceptionTypes.length > 0){
                      System.out.print("throws ");
                      for(int i = 0;i < exceptionTypes.length;i++){
                          if(i == exceptionTypes.length - 1){
                              System.out.print(exceptionTypes[i].getName());
                              break;
                          }
      
                          System.out.print(exceptionTypes[i].getName() + ",");
                      }
                  }
                  System.out.println();
              }
      
          }
      }

       

       

      8.測(cè)試其他

      public class OtherTest {
      
          /*
          獲取構(gòu)造器結(jié)構(gòu)
      
           */
          @Test
          public void test1(){
      
              Class clazz = Person.class;
              //getConstructors():獲取當(dāng)前運(yùn)行時(shí)類中聲明為public的構(gòu)造器
              Constructor[] constructors = clazz.getConstructors();
              for(Constructor c : constructors){
                  System.out.println(c);
              }
      
              System.out.println();
              //getDeclaredConstructors():獲取當(dāng)前運(yùn)行時(shí)類中聲明的所有的構(gòu)造器
              Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
              for(Constructor c : declaredConstructors){
                  System.out.println(c);
              }
      
          }
      
          /*
          獲取運(yùn)行時(shí)類的父類
      
           */
          @Test
          public void test2(){
              Class clazz = Person.class;
      
              Class superclass = clazz.getSuperclass();
              System.out.println(superclass);
          }
      
          /*
          獲取運(yùn)行時(shí)類的帶泛型的父類
      
           */
          @Test
          public void test3(){
              Class clazz = Person.class;
      
              Type genericSuperclass = clazz.getGenericSuperclass();
              System.out.println(genericSuperclass);
          }
      
          /*
          獲取運(yùn)行時(shí)類的帶泛型的父類的泛型
      
      
          代碼:邏輯性代碼  vs 功能性代碼
           */
          @Test
          public void test4(){
              Class clazz = Person.class;
      
              Type genericSuperclass = clazz.getGenericSuperclass();
              ParameterizedType paramType = (ParameterizedType) genericSuperclass;
              //獲取泛型類型
              Type[] actualTypeArguments = paramType.getActualTypeArguments();
      //        System.out.println(actualTypeArguments[0].getTypeName());
              System.out.println(((Class)actualTypeArguments[0]).getName());
          }
      
          /*
          獲取運(yùn)行時(shí)類實(shí)現(xiàn)的接口
           */
          @Test
          public void test5(){
              Class clazz = Person.class;
      
              Class[] interfaces = clazz.getInterfaces();
              for(Class c : interfaces){
                  System.out.println(c);
              }
      
              System.out.println();
              //獲取運(yùn)行時(shí)類的父類實(shí)現(xiàn)的接口
              Class[] interfaces1 = clazz.getSuperclass().getInterfaces();
              for(Class c : interfaces1){
                  System.out.println(c);
              }
      
          }
          /*
              獲取運(yùn)行時(shí)類所在的包
      
           */
          @Test
          public void test6(){
              Class clazz = Person.class;
      
              Package pack = clazz.getPackage();
              System.out.println(pack);
          }
      
          /*
              獲取運(yùn)行時(shí)類聲明的注解
      
           */
          @Test
          public void test7(){
              Class clazz = Person.class;
      
              Annotation[] annotations = clazz.getAnnotations();
              for(Annotation annos : annotations){
                  System.out.println(annos);
              }
          }
      
      }

       

       

       

       

       

       

       

       

       

       

       

       

       

      posted on 2022-08-30 16:17  從精通到陌生  閱讀(33)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 天堂国产一区二区三区四区不卡 | 老熟妇欲乱一区二区三区| 国产中文三级全黄| 国产suv精品一区二区883| 狠狠色丁香婷婷综合尤物| 国产一区二区三区尤物视频| 无码av最新无码av专区| 久章草在线毛片视频播放| 性色av无码不卡中文字幕| 亚洲春色在线视频| 精品国产AV无码一区二区三区| 国产69精品久久久久99尤物| 久久99精品久久久大学生| 久久99国产精品久久99小说| 国产成人精品无码播放| 风流老熟女一区二区三区| 精品国产中文字幕懂色| 伊人久久大香线蕉综合影院首页| 久久国产成人高清精品亚洲| 黄色亚洲一区二区在线观看| 中日韩精品视频一区二区三区| 久久99精品久久久久久9| 四虎永久在线精品无码视频| 亚洲另类无码专区国内精品| 仲巴县| 日本高清视频色wwwwww色| 中文字幕结果国产精品| 久久99精品国产99久久6尤物| 亚洲国产成人AⅤ片在线观看| 国产边打电话边被躁视频| 国产精品第一区亚洲精品| 国产精品中文字幕在线| 精品无码国产一区二区三区av| 国产初高中生视频在线观看| 男女激情一区二区三区| 欧美亚洲另类制服卡通动漫| 99国精品午夜福利视频不卡99| 国产精品久久久久久爽爽爽| 国产av一区二区三区久久| 一区二区三区国产不卡| 久久精品国产99国产精品澳门|