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. MySQL Group By 实例讲解(二)

    mysql group by使用方法实例讲解 MySQL中GROUP BY语句用于对某个或某些字段查询分组,并返回这个字段重复记录的第一条,也就是每个小组(无排序)里面的第一条. 本文章通过实例向大家 ...

  2. IDEA2019.2中文字体变粗缺字等问题

    idea的中文字体渲染问题 IDEA 2018.2升级到 IDEA 2019.2,中文字体渲染问题修改一下备用字体就可以共需要修改两处:1.Setting -> Editor -> Fon ...

  3. [E2E_L9]类化和级联化

    一.多车辆识别可能和车辆车牌分割: 这样一张图,可以识别多车辆和车牌,问题是如何区分并且配对.  0  1  7  8 是否是车牌可以通过图片的大小进行判断.而配对是前后顺序的. // ------- ...

  4. C#中的断言(Assert)

    重构-断言 现象:某一段代码需要对程序状态做出某种假设 做法:以断言明确表现这种假设 动机: 常常有这种一段代码:只有某个条件为真是,该改名才能正常运行. 通常假设这样的假设并没有代码中明确表现出来, ...

  5. 30段极简Python代码

    Python 是机器学习最广泛采用的编程语言,它最重要的优势在于编程的易用性.如果读者对基本的 Python 语法已经有一些了解,那么这篇文章可能会给你一些启发.作者简单概览了 30 段代码,它们都是 ...

  6. [译]如何根据Pandas中的列名获取列所在的index位置?

    原文来源:https://stackoverflow.com/questions/13021654/get-column-index-from-column-name-in-python-pandas ...

  7. Java通过行为参数化传递代码

    在软件工程中,一个众所周知的问题就是,不管做什么,用户的需求肯定会变.如何应对这样不断变化的需求?理想的状态下,应该把的工作量降到最少.此外,类似的新功能实现起来还应该很简单,而且易于长期维护.行为参 ...

  8. LinQ中合并、连接、相交、与非查询

    LinQ中Union合并查询:连接不同的集合,自动过滤相同项:延迟.即是将两个集合进行合并操作,过滤相同的项 var cities = (from p in mylinq.System_Places ...

  9. [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  10. mysql执行计划详解,

    一.语法 explain SQL语句 例如: explain ; 二.explain输出解释 +----+-------------+-------+-------+----------------- ...