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. C#使用SHA1加密类(RSAFromPkcs8)支持1024位和2048位私钥

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  2. win10下通过npm成功搭建react开发环境

    1.安装node-v12.13.1-x64(LTS) 2.安装creatre-react-app: npm install -g create-react-app 3.通过create-react-a ...

  3. Linux_CentOS中的MySQL 数据库的安装调试、远程管理

    官网查看最新 MySQL 安装包 https://dev.mysql.com/downloads/repo/yum/ 下载 MySQL 源的安装包 wget http://dev.mysql.com/ ...

  4. Ubuntu下root账户无法使用xshell远程连接解决方法

    以前使用xshell连接服务器跑程序都很顺利,但这次整了一个root账户,发现居然连不上.百度一下,发现ubuntu系统本身是拒绝root账户远程连接的. 解决办法:参考点击传送门

  5. 新手Docker入门

    what's the Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植 ...

  6. libmysqlclient.so.18 not found 的解决方法

    现象:在银河麒麟下,安装了mysql,并且mysql服务正常运行,但是Qt访问mysql还是报Driver not loaded,ldd Qt自己的mysql驱动报错如标题所示.路径: 解释:很明显就 ...

  7. CentOS 初始化脚本

    #!/bin/bash # curl https://yiyingcanfeng.github.io/centos-init.sh | bash # 可选参数base kernel python ph ...

  8. spring中Bean的懒加载

    在ApplicationContext容器中,当容器一启动时,所有的bean(单例的)都会被创建和注入依赖,这也被视为IOC容器启动过程中的一个步骤. 那如何让一个bean在需要的时候再被创建,而不是 ...

  9. 【LeetCode】最接近的三数之和【排序,固定k1,二分寻找k2和k3】

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数 ...

  10. KAFA优点和缺点

    我们上一期的Kafka教程中,我们讨论了Kafka的Books.今天,我们将讨论卡夫卡的优势和劣势.因为,在使用之前了解任何技术的局限性非常重要,在优点的情况下也是如此.所以,让我们详细讨论卡夫卡优势 ...