黑马程序员技术交流社区
标题:
实在搞不懂.这代码哪里出错了
[打印本页]
作者:
陈泽鑫
时间:
2012-12-18 22:12
标题:
实在搞不懂.这代码哪里出错了
本帖最后由 陈泽鑫 于 2012-12-19 15:16 编辑
本来不想来求助的...来了就证明自己挺弱的{:soso_e136:}
但是我实在找不出问题原因,希望有人能指出.
import java.lang.reflect.Constructor;
public class reflect{
public static void main(String[] args) {
try {
//这种方法运行报错
// Constructor cons = Person.class.getConstructor(String.class, int.class);//获得类的构造器
//这种方法运行也报错
// Constructor cons = Class.forName("com.itheima.Person").getConstructor(String.class,int.class);
Person person = (Person)cons.newInstance("张三", 90);//通过通过构造器创建构造方法赋初始值
Person.class.getMethod("setName", String.class).invoke(person,"李四");//调用方法赋值
Person.class.getField("age").set(person, 22);//直接对属性赋值
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return "姓名: "+name+"; 年龄: "+age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
}
作者:
王中利
时间:
2012-12-18 22:39
import java.lang.reflect.Constructor;
public class reflect{
public static void main(String[] args) {
try {
//这种方法运行报错
Constructor cons = Person.class.getConstructor(String.class, int.class);//获得类的构造器
//这种方法运行也报错
// Constructor cons = Class.forName("com.itheima.Person").getConstructor(String.class,int.class);
Person person = (Person)cons.newInstance("张三", 90);//通过通过构造器创建构造方法赋初始值
Person.class.getMethod("setName", String.class).invoke(person,"李四");//调用方法赋值
Person.class.getField("age").set(person, 22);//直接对属性赋值/
/这地方得到的是public修饰的字段,可是你的这个字段是private的必须用暴力反射。
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
public Person(String name,int age
){//这里的构造函数必须是public的,然后,如果不写会是默认的,默认的权限,想必你也清楚
this.name = name;
this.age = age;
}
public String toString(){
return "姓名: "+name+"; 年龄: "+age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
}
上面的已经标注过了,别的地方都对
作者:
王振
时间:
2012-12-18 22:40
import java.lang.reflect.Constructor;
public class ReflectDemo{
public static void main(String[] args) {
try {
//这种方法运行报错
Constructor cons = Person.class.getConstructor(String.class, int.class);//获得类的构造器
/*
* getConstructor()返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
* 需要将构造方法指定为public才可以。
*
* 另外,下面Person.class.getField("age").set(person, 22);
* 也会出错,因为age属性是private的,运行出错。
* 只能是类或接口的指定公共成员字段。
*/
//这种方法运行也报错
// Constructor cons = Class.forName("com.itheima.Person").getConstructor(String.class,int.class);
Person person = (Person)cons.newInstance("张三", 90);//通过通过构造器创建构造方法赋初始值
Person.class.getMethod("setName", String.class).invoke(person,"李四");//调用方法赋值
Person.class.getField("age").set(person, 22);//直接对属性赋值
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return "姓名: "+name+"; 年龄: "+age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String name;
public int age;
}
复制代码
作者:
陈泽鑫
时间:
2012-12-18 23:16
王中利 发表于 2012-12-18 22:39
import java.lang.reflect.Constructor;
public class reflect{
因为构造的地方出错还没测试到暴力反射的地方..不过谢谢你了...恍然大悟
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2