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. Jenkins参数化构建--Git Parameter

    由于我们在测试过程中,可能需要在多个测试环境跑用例,这个时候就需要jenkins参数化了. Jenkins参数化一般常用的有两种方式:Choice和String Parameter两种 (1)Choi ...

  2. linux设置sudo不要密码

    linux下,普通用户,sudo时需要密码 改成没密码, vi /etc/sudoers 在 root ALL=(ALL) ALL后加一行 sysusr ALL=(ALL) NOPASSWD: ALL ...

  3. kafka集群部署以及单机部署

      kafka单机部署 一.环境准备 当前环境:centos7.3一台软件版本:kafka_2.12部署目录:/usr/local/kafka启动端口:9092配置文件:/usr/local/kafk ...

  4. 013-在 Shell 脚本中调用另一个 Shell 脚本的三种方式

    如下: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh source: sourc ...

  5. LLBLGen update table with join

    Table1 id Name 1 xxx 2 ooo Table2 Table1Id Table1Name Column1 Column2 Column3 1 sss xxxx xxxx xxxx 2 ...

  6. [LeetCode] 380. Insert Delete GetRandom O(1) 插入删除获得随机数O(1)时间

    Design a data structure that supports all following operations in average O(1) time. insert(val): In ...

  7. flask,scrapy,django信号

    简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...

  8. Postman 使用方法详细介绍

    1,下载安装: https://www.getpostman.com/apps 2,打开Postman,如图所示: 3,创建一个接口项目 4,新增接口文件 5,下面以登录接口login为例,介绍如何做 ...

  9. jQuery “没有属性”选择器

    可以使用.not() 或 :not() 选择器. $('.container:not([data-timestamp])') 或者 $('.container').not('[data-timesta ...

  10. LeetCode 856. 括号的分数(Score of Parentheses)

    856. 括号的分数 856. Score of Parentheses 题目描述 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分. AB 得 A + B 分,其中 A ...