1、

package reflectionZ;

import java.lang.reflect.Constructor;
import java.lang.reflect.Type; public class Tzz02
{
public static void main(String[] args) throws Exception
{
// getConstructors() / getConstructor(...) Class<?> clazz1 = Class.forName("reflectionZ.Cat"); // 1、使用的是 默认的 构造函数
Object obj01 = clazz1.newInstance(); // 2、通过Class对象来得到构造函数
Constructor<?> c1 = clazz1.getConstructor(Class.forName("java.lang.String"), int.class);
Object obj0201 = c1.newInstance("小猫", 6); // 强转 Constructor<?> c2 = clazz1.getConstructor(String[].class);
String[] foods = {"鱼", "老鼠"};
Object obj0202 = (Cat)c2.newInstance((Object)foods); // 对象数组foods会被打散 if (obj01.getClass() == clazz1)
System.out.println("obj01.getClass() == clazz1");
else
System.out.println("obj01.getClass() != clazz1");
if (obj0201.getClass() == clazz1)
System.out.println("obj01.getClass() == clazz1");
else
System.out.println("obj01.getClass() != clazz1");
if (obj0202.getClass() == clazz1)
System.out.println("obj01.getClass() == clazz1");
else
System.out.println("obj01.getClass() != clazz1"); // *** *** ***
System.out.println(); int iIdx = 0;
Constructor<?>[] constructors = clazz1.getConstructors();
for (Constructor<?> constructor :constructors)
{
Type[] types = constructor.getGenericParameterTypes();
if (types.length == 0)
System.out.println("["+iIdx+"] ==> 无参构造函数");
else
{
System.out.println("["+iIdx+"] ==> "+types.length+"个参数的 构造函数,参数的类型分别为:");
for (Type type : types)
{
System.out.println(type);
}
}
System.out.println(); iIdx ++;
}
}
} class Cat
{
public Cat()
{}
public Cat(String _strName, int _iAge)
{
System.out.println("Cat --> _strName : "+_strName+" , _iAge : "+_iAge);
}
public Cat(String[] _foods)
{
if (_foods == null)
System.out.println("Cat --> _foods is null .");
else
{
for (int i=0; i<_foods.length; i++)
System.out.println("Cat --> _foods["+i+"] : "+_foods[i]);
}
}
}

2、

控制台输出:

Cat --> _strName : 小猫 , _iAge : 6
Cat --> _foods[0] : 鱼
Cat --> _foods[1] : 老鼠
obj01.getClass() == clazz1
obj01.getClass() == clazz1
obj01.getClass() == clazz1 [0] ==> 无参构造函数 [1] ==> 2个参数的 构造函数,参数的类型分别为:
class java.lang.String
int [2] ==> 1个参数的 构造函数,参数的类型分别为:
class [Ljava.lang.String;

3、

最新文章

  1. Populating Tree Item With Record Group In Oracle Forms
  2. set集合类型
  3. iOS菜单滚动联动内容区域功能实现
  4. ORA-12545:因目标主机或对象不存在,连接失败!
  5. 理解matplotlib绘图
  6. 获取Spring-boot系统环境变量方法
  7. QT GUI总结
  8. WebService-使用JDK开发WebService
  9. SDOI Day1
  10. python——爬虫&amp;问题解决&amp;思考(三)
  11. 关于warning: suggest parentheses around assignment used as truth value [-Wparentheses]|的解决方法
  12. IDEA使用笔记(八)——自动生成 serialVersionUID 的设置
  13. grub配置指南
  14. 关于asp.net页面缓存
  15. centos 7 网站前端中文乱码分析、解决办法
  16. OpenCV3+Python3
  17. 巨蟒python全栈开发-第18天 核能来袭-类和类之间的关系
  18. CMDB资产管理系统开发【day26】:02-数据写入待存区
  19. Latex技巧:在图表序号中加入章节号(实现诸如&ldquo;图1.1.2&rdquo;这样的图表序号)
  20. Android笔记--View绘制流程源码分析(一)

热门文章

  1. Oracle重做日志REDO
  2. attempt to index a nil value (global &#39;luasql&#39;)
  3. Unix file types
  4. 关于websocket
  5. JS全选checkbox
  6. unity里无损实现制定物体bloom
  7. 我的Android进阶之旅------>Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题
  8. VGA显示
  9. linux基础命令(2)
  10. python mysqldb 模块学习