美文网首页
Java反射之二:实例化对象、接口与父类、修饰符和属性

Java反射之二:实例化对象、接口与父类、修饰符和属性

作者: 程序员大大 | 来源:发表于2020-08-19 23:30 被阅读0次

这次是之二:实例化对象、接口与父类、修饰符和属性。

image

实例化对象

之前我们讲解过创建对象的方式,有new 、克隆、反序列化,再加一种,根据Class对象,使用newInstance() 或者构造器实例化对象。调用以下api即可

image
//获取源头
Class<?> clz = Class.forName("com.shsxt.ref.simple.User");
//第一种:通过newInstance()创建对象
User user=(User)clz.newInstance();
user.setUname("sxt");
user.setUpwd("good");
//第二种:通过getDeclaredConstructors()创建对象,取得全部构造函数(注意顺序)
Constructor<?>[] cons=clz.getDeclaredConstructors();
for(Constructor<?>c:cons){
    System.out.println(c);
}
//注意观察上面的输出结果,再实例化,否则参数容易出错
User u1=(User)cons[0].newInstance("shsxt","good");
User u2=(User)cons[1].newInstance("sxt");
User u3=(User)cons[2].newInstance();
System.out.println(u1.getUname()+u1.getUpwd());

注意:newInstance()是调用空构造,如果空构造不存在,会出现异常。由此可知,使用其他构造器创建对象比较麻烦,使用空构造非常简单。确保空构造存在 。

接口与父类

通过api获取接口与父类

image
//获取源头
Class<?> clz =Class.forName("com.shsxt.ref.simple.User");
//获取所有接口
Class<?>[] inters=clz.getInterfaces();
for(Class<?> in:inters){
    System.out.println(in.getName());
}
//获取父类
Class<?> cls=clz.getSuperclass();
System.out.println("继承的父类为:"+cls.getName());

修饰符

获取修饰符,使用Modifier即可

image
Class<?>clz=Class.forName("com.shsxt.ref.simple.User");
//获得修饰符
int n=clz.getModifiers();
//使用Modifier转换为相应的字符串
System.out.println(Modifier.toString(n));

属性

获取所有属性(包括父类或接口) ,使用Field 即可操作

[图片上传失败...(image-b163bd-1597851021021)]

Class<?> clz = Class.forName("com.shsxt.ref.simple.User");
//获取属性
System.out.println("===============本类属性==========");
// 取得本类的全部属性
Field[] field = clz.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
    // 1、权限修饰符
    int mo = field[i].getModifiers();
    String vis = Modifier.toString(mo);
    // 2、属性类型
    Class<?> type = field[i].getType();
    //3、名字
    String name = field[i].getName();
    System.out.println(vis + " " + type.getName() + " "+ name + ";");
}
System.out.println("=========公开的属性包括接口或者父类属性======");
field = clz.getFields();
for (int i = 0; i < field.length; i++) {
    System.out.println(field [i]);
}

相关文章

  • Java反射之二:实例化对象、接口与父类、修饰符和属性

    这次是之二:实例化对象、接口与父类、修饰符和属性。 实例化对象 之前我们讲解过创建对象的方式,有new 、克隆、反...

  • 【反射/注解/依赖注入】

    反射可以让我们在运行时获取类的属性,方法,构造方法、父类、接口等信息,通过反射还可以让我们在运行期实例化对象、调用...

  • 基本

    反射的作用 java反射可以使得我们在运行时获取类的函数、属性、父类、接口等Class内部信息,使我们在运行期实例...

  • Java_接口实例化对象有两种使用,注意理解。(非原创,靠自己理

    1、为什么父类的引用能指向子类对象呢? 父类定义了子类中一定存在的方法和属性。 同理,接口的引用指向他的实例化对象...

  • 反射

    通过对象反射得到类的属性、方法、父类、接口等信息; 在java中,建立的所有类,他的父亲都是Object;每一个类...

  • synchronized原理及优化

    理解Java对象头与Monitor 实例变量:存放类的属性数据信息,包括父类的属性信息,如果是数组的实例部分还包括...

  • Java 反射教程

    Java反射使得可以在运行时检查类,接口,字段和方法,而无需在编译时知道类名,方法等。也可以实例化新对象,调用方法...

  • Java反射

    反射常用对象概述 ClassClass类的实例表示正在运行的Java应用程序中的类和接口 Constructor关...

  • Java之反射Reflection

    什么是Java的反射 Java反射是可以让我们在运行时获取类的函数,属性,父类,接口等Class内部信息的机制。通...

  • Java反射 - 构造函数

    Java反射——构造函数使用Java反射,您可以检查类的构造函数,并在运行时实例化对象。 这是通过Java类jav...

网友评论

      本文标题:Java反射之二:实例化对象、接口与父类、修饰符和属性

      本文链接:https://www.haomeiwen.com/subject/jtejjktx.html