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 打印出类的所有的构造函数

  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都是内部类,第一个参数是父类。new 的时候使用new Payment().new InnerAccount();

  如果定义的内部类是static ,则new 的时候使用new Payment.InnerStaticAccount()

  public class Payment {

  public static class InnerStaticAccount implements Payment.Account{

  }

  }

  getConstructors 打印出类的public构造函数

  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 {无锡看男科医院哪家好 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();

  }

Java关于 class类的基础方法的更多相关文章

  1. java.lang.String 类的所有方法

    java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...

  2. java的ThreadLocal类的使用方法

    java的ThreadLocal类的使用方法,ThreadLocal是一个支持泛型的类,用在多线程中用于防止并发冲突问题. 比如以下的一个样例,就是用于线程添加1,可是相互不冲突 package co ...

  3. Java中主类中定义方法加static和不加static的区别

     Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...

  4. Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能

    Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...

  5. java 之 file类的一些方法

    File类: File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成.但是File不能访问文件内容本身. 访问文件和目录: 1. ...

  6. Java中String类的format方法使用总结

    可参考: http://www.cnblogs.com/fsjohnhuang/p/4094777.html http://kgd1120.iteye.com/blog/1293633 String类 ...

  7. JAVA不让类实例化的方法

    虽然java是面向对象编程,但也要尽可能避免创建不必要的对象,因为创建过多的对象不仅占用系统资源,而且多了很多不必要的创建销毁对象开销. 那么有哪些避免类创建对象的方法吗? 1,定义私有构造函数.这在 ...

  8. 关于JAVA的String类的一些方法

    一.得到字符串对象的有关信息 1.通过调用length()方法得到String的长度. String str=”This is a String”; int len =str.length(); 2. ...

  9. Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用)

    package lsg.ap.april4th2; /* 知识点:1.Getter and Setter 的应用 2.局部变量与成员变量(也可叫做全局变量) 3.Static关键字的用法 a.成员变量 ...

随机推荐

  1. postgresql - relation 权限相关问题

    GRANT ALL PRIVILEGES ON DATABASE 数据库.[schema] TO [用户名]; GRANT ALL ON schema [schema] TO [用户名]; GRANT ...

  2. JS高级:面向对象解析

    1 实例属性/方法 都是绑定在使用构造函数创建出来的对象p上; 最终使用的时候也是使用对象p来进行访问; function Person(name, age, doFunc) { this.name ...

  3. centos7 docker swarm加入集群失败

    提示的错误为 [root@localhost downloads]# docker swarm join --token SWMTKN-1-2ezr0k5ybds1la4vgi2z7j8ykxkmm0 ...

  4. 学习使用Lombok生成代码

    一.介绍 Lombok官网:https://projectlombok.org/ Lombok的功能简单一点说,就是可以帮我们生成一些代码,这些代码并不是在源码(source code)体现出来的,而 ...

  5. 【Redis】Redis 发布订阅

    Redis 发布订阅介绍 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 c ...

  6. glob 遍历文件夹里面文件

    var_dump(glob("*")); // 只会遍历当前文件夹层里面的,不会往里面扒 exit; array(9) { [0]=> string(16) "Ca ...

  7. 创建slackapp prometheus告警发到slack

    创建slackapp: https://blog.walterlv.com/post/slack-api-starter-incoming-webhooks.html#%E5%88%9B%E5%BB% ...

  8. 根据本地/服务器时间获取指定时区时间 new Date指定时区时间

    1.代码 function getTimeByTimeZone(timeZone){ var d=new Date(); localTime = d.getTime(), localOffset=d. ...

  9. jenkins回滚之groovy动态获取版本号

    grovvy调试: 部署路径确定下来, 每个服务写死,传参 服务名 + 环境 给版本服务返回版本信息: groovy取分支: def gettags = ("git ls-remote -h ...

  10. Java学习关注

    1.不去上课: 内部类的继承: https://blog.csdn.net/ruidianbaihuo/article/details/102092256 2.Matrix海 子 http://www ...