作业的问题

来源:3-10 自由编程

慕丝7446887

2020-03-03 09:18:48

请老师检查一下代码有没有问题。我在运行的时候,发生了一个错误,问题是出在通过Method调用equalsAddress方法上,没有输出结果。这是什么问题?是不是在新建实例的时候要调用有参的构造方法?


测试类:

package com.imooc.program;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import org.junit.Test;

public class ProgramTest {
	@Test
	public void demo1() throws Exception {
		//获取Class类
		Class class1 = Class.forName("com.imooc.program.Address");
		//实例化
		Address addr = (Address)class1.newInstance();
		//获取方法
		Method method1 = class1.getMethod("display");
		//执行方法
		method1.invoke(addr);
		
		Method method2 = class1.getDeclaredMethod("info");
		//设置访问权限
		method2.setAccessible(true);
		method2.invoke(addr);
		
		//通过Method调用equalsAddress()方法
		Method method3 = class1.getDeclaredMethod("equalsAddress", String.class);
		method3.setAccessible(true);
		method3.invoke(addr,"Tom");
	}
}

Address类:

package com.imooc.program;

public class Address {
	private String addrId;
	private String name;
	private String addrDetail;
	private String phone;
	
	public Address() {
		
	}
	
	public Address(String addrId,String name,String addrDetail,String phone) {
		this.addrId = addrId;
		this.name = name;
		this.addrDetail = addrDetail;
		this.phone = phone;
	}

	public String getAddrId() {
		return addrId;
	}

	public void setAddrId(String addrId) {
		this.addrId = addrId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddrDetail() {
		return addrDetail;
	}

	public void setAddrDetail(String addrDetail) {
		this.addrDetail = addrDetail;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	@Override
	public String toString() {
		return "Address [addrId=" + addrId + ", name=" + name + ", addrDetail=" + addrDetail + ", phone=" + phone + "]";
	}
	
	public void display() {
		System.out.println("这是一个地址");
	}
	
	private void info() {
		System.out.println("我是一个私有方法");
	}
	
	private void equalsAddress(String name) {
		if(this.name.equals(name)) {
			System.out.println("值相等");
		}else {
			System.out.println("值不相等");
		}
	}
}


写回答

1回答

好帮手慕阿满

2020-03-03

同学你好,报错提示是空指针异常。如果没有使用带参构造方法,this.name获取为null,所以报异常,这里建议使用带参构造方法实例化,或者无参构造方法实例化后设置属性。

例如:

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

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

0

0 学习 · 8016 问题

查看课程