黑马程序员技术交流社区

标题: 反射小疑问?newInstance?int.class [打印本页]

作者: 倪杭乘    时间: 2012-5-15 10:22
标题: 反射小疑问?newInstance?int.class
  1. System.out.println(        int.class.getName());//int
  2. System.out.println(        String.class.getName());//java.lang.String
  3.         System.out.println(        int.class.getDeclaredConstructors());//[Ljava.lang.reflect.Constructor;@5d888759
  4.         System.out.println(        String.class.getDeclaredConstructor());//public java.lang.String()
复制代码
int既然是一个字节码文件.class,为什么没有构造函数,没有newInstance呢

String.class.newInstance()可以
int.class.newInstance()不可以

作者: —__    时间: 2012-5-15 11:00
因为int是基本类型 你如果用Integer  就可以了
作者: 褚代江    时间: 2012-5-15 11:01
这个你想下,如果有的话,就是这样的了
int a=new int(1);
认为这个是对的吗,int是基本类型的数据,
只有在装箱成为Integer后才可以Integer a=new Integer(1);
作者: 高云飞    时间: 2012-5-15 11:17
本帖最后由 高云飞 于 2012-5-15 11:30 编辑

int是基本类型,int没有父类,String不是基本类型,有父类
System.out.println(int.class.getSuperclass());//输出null;
System.out.println (String.class.getSuperclass());//输出class java.lang.Object
newInstance()方法要看该类内部是怎样实现的。
在newInstance()里的API描述里,有这样一句:The class is instantiated as if by a new expression with an empty argument list。
我看出的意思是,newInstance()会默认调用该类里无参的构造方法。
因为int不是一个类,也就没有继承自祖宗类Object,所以根本不会有什么无参的构造方法。
java中每个类都是继承Object类的,都会默认有一个无参构造方法的,只要没有复写。
作者: 谢洋    时间: 2013-2-28 21:12
基本类型都没有构造方法,所以不能new ;有xxx.class不一定能new,因为有xxx.class并不代表xxx.class中就有构造函数
只有引用类型才能new ; 如:Interger就能,它是int类型的包装类,所谓包装:就是Integer类里面定义了一个int变量,
然后他里面还老一些操作int类型数据的方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2