for java beginner 9 java反射的概念和Constructor 类

java 反射 的概念 和 Constructor 类

[color=red]反射就是把 Java 类中的各种成分映射成相应的 JAVA类。[/color]

JAVA类 就是那个字节码 有包名 getPackage() 后 得到一个类 Packgae

类似的
把 各个方法 映射 成 Method 类
。。。。。。。。。。。。。

先介绍反射 时 用到的最重要的一个 类
Constructor 构造函数

======================================
package com.ncs;

import java.lang.reflect.Constructor;

public class ReflectTest {
public static void main(String[] args) throws Exception {

//下面这行 有 处理 异常 ClassNotFoundException 谁知道有没有这个类
//这是得到所有的 构造 方法
Constructor[] constructors = Class.forName("java.lang.String").getConstructors();

//得到某一个特定的构造 方法 有 处理 异常 NoSuchMethodException 谁知道有没有这个 构造 方法
//注意,一个类的构造 方法N 多,不可能用 123去指定某一个特定的构造方法,只可以指定 参数
//这里getConstructor(StringBuffer.class);是1.5新的 可变参数 以前是数组类型参数
//现在是 Class<?>... parameterTypes
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);

//我现在要做一件事情 new String(new StringBuffer("abc"));
//我想用反射做
//上面已经得到了那个 构造函数 ,而且参数也是 StringBuffer的
//Constructor类有一个重要的 方法newInstance(arg0); 每call一次就弄一个新的
//当然,参数不是 StringBuffer也可以编译过,
//编译器只管你这个是 构造 方法么就OK了,管你是什么参数
//编译器还不知道这个constructor是对应参数为StringBuffer的构造函数呢!!
//甚至编译器连这个 constructor 是哪个类的都不管
// 编译器只知道这个是 Constructor 的实例,这个实例有个方法叫newInstance,参数可变
//编译器其他什么都不管
//所以我们还要自己把结果 强制 转化为自己需要的类型(String)
//但是 ,到了 runtime,JVM就清楚的知道了,
//所以有 运行时错误 和 编译时错误之分
//就是说你现在传 一个String类型,compiler不会说你错,但是你一运行,JVM就说不对了
String myString = (String)constructor.newInstance(new StringBuffer("abc"));



//test
System.out.println(myString.charAt(2));

//out c OK!S

//上面的方式有三步,中间需要 constructor
//有人偷懒,因为很多类 都有 规定 必须 要有无参 构造函数,所以有个方法
//Class.newInstance() 直接call 无参 构造函数
String s1 = (String)Class.forName("java.lang.String").newInstance();


}
}

==========================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值