日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java关于 class类的基础方法

發(fā)布時間:2024/4/15 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java关于 class类的基础方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  Class類的方法

  1. getClasses 和 getDeclaredClasses

  getDeclaredClasses 獲取到類里所有的的class ,interface 包括了private ,protected,default,public

  例子:

  定義一個Payment的基本類如下

  public class Payment {

  protected class InnerPayment{

  }

  String name;

  interface Account{}

  public class InnerAccount implements Payment.Account{

  }

  private class InnerAccount2 implements Payment.Account{

  }

  }

  測試

  public class PaymentReflectTest {

  public static void main(String[] args) {

  Class[] cls=Payment.class.getDeclaredClasses();//獲取到所有的定義的class

  for (int i = 0; i

  System.out.println(cls[i]);

  }

  }

  打印出來的結果如下

  class rechard.learn.reflect.Payment$InnerAccount2

  class rechard.learn.reflect.Payment$InnerAccount

  interface rechard.learn.reflect.Payment$Account

  class rechard.learn.reflect.Payment$InnerPayment

  getClasses 只獲取到public

  上面的測試代碼改成

  Class[] cls=Payment.class.getClasses();

  for (int i = 0; i

  System.out.println(cls[i]);

  }

  只獲取到

  class rechard.learn.reflect.Payment$InnerAccount

  2. getConstructors 和 getDeclaredConstructors

  getDeclaredConstructors 打印出類的所有的構造函數(shù)

  Class[] cls=Payment.class.getDeclaredClasses();

  for (int i = 0; i

  Constructor[] cs= cls[i].getDeclaredConstructors();

  for (int j = 0; j

  System.out.println(cs[j]);

  }

  }

  打印的結果如下

  private rechard.learn.reflect.Payment$InnerAccount2(rechard.learn.reflect.Payment)

  public rechard.learn.reflect.Payment$InnerAccount(rechard.learn.reflect.Payment)

  protected rechard.learn.reflect.Payment$InnerPayment(rechard.learn.reflect.Payment)

  由于這里的class都是內部類,第一個參數(shù)是父類。new 的時候使用new Payment().new InnerAccount();

  如果定義的內部類是static ,則new 的時候使用new Payment.InnerStaticAccount()

  public class Payment {

  public static class InnerStaticAccount implements Payment.Account{

  }

  }

  getConstructors 打印出類的public構造函數(shù)

  3. new instance

  如何new Payment里的InnerAccount

  public class Payment {

  protected class InnerAccount implements Payment.Account{

  private String acctNumber;

  public InnerAccount(String acctNumber){

  this.acctNumber=acctNumber;

  }

  public String getAcctNumber() {

  return acctNumber;

  }

  @Override

  public String toString() {

  return "InnerAccount{" +

  "acctNumber='" + acctNumber + '\'' +

  '}';

  }

  如果 new InnerAccount 的類不和Payment 在同一個package下,寫成如下,會報錯,InnerAccount為proctected 不可見:

  new Payment().new InnerAccount("111111");

  改成以下代碼調用

  Class[] cls = Payment.class.getDeclaredClasses();

  for (int i = 0; i < cls.length; i++) {

  if(cls[i].getSimpleName().equals("InnerAccount")){

  try {無錫看男科醫(yī)院哪家好 https://yyk.familydoctor.com.cn/20612/

  Constructor c=(Constructor)cls[i].getDeclaredConstructor(Payment.class,String.class);

  c.setAccessible(true);

  System.out.println(c.newInstance(new Payment(),"123"));

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  其實這樣構造出來的有諸多不變,上面的c.newInstance(new Payment(),"123"),沒法用一個實際的引用的引用,只能用Object o 來引用,如果如果要調用getAcctNumber(),只能通過反射來調用,如下:

  Class[] cls = Payment.class.getDeclaredClasses();

  for (int i = 0; i < cls.length; i++) {

  if(cls[i].getSimpleName().equals("InnerAccount")){

  try {

  Constructor c=(Constructor)cls[i].getDeclaredConstructor(Payment.class,String.class);

  c.setAccessible(true);

  Object o=c.newInstance(new Payment(),"123");

  Method m=o.getClass().getMethod("getAcctNumber",null);

  System.out.println(m.invoke(o,null));

  }catch (Exception e) {

  e.printStackTrace();

  }

轉載于:https://www.cnblogs.com/djw12333/p/11124643.html

總結

以上是生活随笔為你收集整理的Java关于 class类的基础方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。