老师,这样对吗?为什么控制台没有结果?

来源:3-10 自由编程

阿硕A

2020-07-06 18:52:17

package com.imooc.methodtest;


import java.lang.reflect.Method;


import org.junit.Test;


public class AddressTest {

@Test

/**

* 通过Method调用公有无参方法

*/

public void demo1() throws Exception {

//获得class

Class class1 = Class.forName("com.imooc.methodtest.Address");

//实例化

Address add = (Address) class1.newInstance();

//获得方法

Method method = class1.getMethod("display");

//设置权限

method.setAccessible(true);

//执行

method.invoke(add);

}

@Test

/**

* 调用私有无参方法

*/

public void demo2() throws Exception {

//获得class

Class class2 = Class.forName("com.imooc.methodtest.Address");

//实例化

Address add = (Address) class2.newInstance();

//获得方法

Method method = class2.getDeclaredMethod("into");

//设置权限

method.setAccessible(true);

//执行

method.invoke(add);

}

@Test

/**

* 调用私有有参方法

*/

public void demo3() throws Exception {

//获得Class

Class class3 = Class.forName("com.imooc.methodtest.Address");

//实例化

Address add = (Address) class3.newInstance();

//获得方法

Method method  = class3.getDeclaredMethod("equalsAddress", String.class);

//设置权限

method.setAccessible(true);

//执行

method.invoke(add, "阿硕!");

}

}

package com.imooc.methodtest;


public class Address {

private String id;

private String name;

private String site;

private String phone;

public void Address() {

}

public Address(String id, String name, String site, String phone) {

super();

this.id = id;

this.name = name;

this.site = site;

this.phone = phone;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSite() {

return site;

}

public void setSite(String site) {

this.site = site;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

@Override

public String toString() {

return "Address [id=" + id + ", name=" + name + ", site=" + site + ", phone=" + phone + "]";

}

public void display(){

System.out.println("这是一个地址!");

}

private void info(){

System.out.println("我是私有方法!");

}

private void equalsAddress(String name){

if(getName().equals(name)){

System.out.println("相等");

}else {

System.out.println("不相等");

}

}

}


写回答

3回答

好帮手慕小脸

2020-07-07

同学你好,demo3是不正确的,同学这里并没有给method进行权限设置。修改如下:

 method.setAccessible(true);

http://img.mukewang.com/climg/5f03d44009b7fe3e08190423.jpg

Ps:三个demo测试,同学可以先一一进行运行,单独运行成功后可以在一并执行,这样便于同学找出问题哦

祝学习愉快~

0

阿硕A

提问者

2020-07-07

package com.imooc.methodtest;


import java.lang.reflect.Field;

import java.lang.reflect.Method;


import org.junit.Test;


public class AddressTest {

@Test

/**

* 通过Method调用公有无参方法

*/

public void demo1() throws Exception {

//获得class

Class class1 = Class.forName("com.imooc.methodtest.Address");

//实例化

Address add = (Address) class1.newInstance();

//获得方法

Method method = class1.getMethod("display");

//设置权限

method.setAccessible(true);

//执行

method.invoke(add);

}

@Test

/**

* 调用私有无参方法

*/

public void demo2() throws Exception {

//获得class

Class class2 = Class.forName("com.imooc.methodtest.Address");

//实例化

Address add = (Address) class2.newInstance();

//获得方法

Method method = class2.getDeclaredMethod("info");

//设置权限

method.setAccessible(true);

//执行

method.invoke(add);

}

@Test

/**

* 调用私有有参方法

*/

public void demo3() throws Exception {

//获得Class

Class class3 = Class.forName("com.imooc.methodtest.Address");

//实例化

Address add = (Address) class3.newInstance();

//获得方法

Method method = class3.getDeclaredMethod("equalsAddress",String.class);

Field field = class3.getDeclaredField("name");

//设置权限

field.setAccessible(true);

//设置参数

field.set(add,"阿硕!");

//执行

method.invoke(add, "阿硕!");

}

}


http://img.mukewang.com/climg/5f03c1670945591a13220616.jpg对吗老师?

0

好帮手慕小脸

2020-07-06

同学你好,分开测试同学代码有如下问题:

1、demo1方法中,调用无参构造方法,在同学的实体类中并没有定义无参构造。修改如下:

http://img.mukewang.com/climg/5f0304180940d73f03640140.jpg

2、测试demo2方法出现如下错误:

http://img.mukewang.com/climg/5f03043d098a176f04520199.jpg

没有找到into方法,原因是因为同学单词书写错误,是info

http://img.mukewang.com/climg/5f0304b309e37b4a05380106.jpg

3、执行demo3方法,出现空指针异常,如下:

http://img.mukewang.com/climg/5f03050209c27b4f04840259.jpg

如果没有使用带参构造方法,getName获取为null,所以报异常,这里建议使用带参构造方法实例化,或者无参构造方法实例化后设置属性。

例如:

http://img.mukewang.com/climg/5f0308b809fd445205830256.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0

0 学习 · 8016 问题

查看课程