A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 云水禅心 中级黑马   /  2013-10-26 21:35  /  1706 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

{:soso_e115:}
创建实例对象的三种方式:
1、普通方式: Stringstr1 = new String("Hello");
2、反射构造方法: Stringstr2 = str1.getClass.getConstructor((StringBuilder.class).newInstance(newStringBuilder("Hello"));
3Class.newInstance()方法:
Stringstr3 = String.class.newInstance();
第二种方法挺复杂的,还没有第一种方法简单,
但是为什么在开发中好些都用第二种方法呢?
第二种方法中代码这么长,分别都做了些什么,看了好多遍还是不理解,我都被弄晕了?
谢谢。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
明显第一种方法最最常用,你平常不都是new出来的实例吗
第二三种,用到了反射技术。而反射用在框架里,别的基本不用。

框架为什么用反射呢?举个例子:
假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。
这样就要用反射了,集下面的两种方法

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
最常用的是第一种方法,java可以在运行时动态获取某个类的类信息,这就是java的反射。 而通过反射创建对象还有下面几种:

目前我所知道的有

1、通过Class对象的newInstance()方法,这种方法的局限是只能取调用默认的构造函数

2、通过取得Class对象的getConstructor方法取得Construtor对象,然后再通过调用Constructor类的newInstance的两个方法

3、通过Array.newInstance方法来创建对象,但这种只适用于数组,数组也是一种对象。


包括其他方法,每一种都没有明确的好坏,都是针对不同的功能来说的。


评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
谢谢各位帮我解决了疑惑
回复 使用道具 举报
小例一枚,注释为解
import java.lang.reflect.*;//导入反射相关的类   
/* 通过构造方法的反射调用创建一个String对象   
* 程序分为编译时和运行时 编译时进行语法检查
* 运行时进行程序的操作
* Class类也有Class对象  这个对象就是本身  
* 我们可以直接调用Class类newInstance产生一个Class类的实例
* 返回的是不带参数的默认构造方法,这个构造方法可以创建一个默认的实例对象
* 例如String str=(String)Class.forName("java.lang.String").newInstance() ;
*
*/
public class ConstructorReflectTest
{


public static void main(String[] args)    throws Exception  //抛出异常给JVM
{
        Constructor con=String.class.getConstructor(StringBuffer.class) ;   //通过String的Class对象返回带StringBuffer参数的构造方法对应的类
        String str=(String)con.newInstance(new StringBuffer("abc")) ;//newInstance传递的参数要和构造器参数相对应
        System.out.println(str.charAt(0)); //输出第一个字符
        
        String ss=(String)Class.forName("java.lang.String").newInstance() ;//利用默认的构造方法进行构对象 这是Class类的方法
       System.out.println(ss.getClass().getName());  //获得的类的名字
        
        
}

}

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
早呀  麦子,送你一杯咖啡
仪表感谢。
{:soso_e160:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马