创建private修饰的变量,为什需要创建一个getXX()
时间: 2023-05-28 11:03:00 浏览: 49
方法?
在Java中,private修饰的变量是只能在类内部访问的,外部不能直接访问。因此,如果我们需要在外部访问这些变量的值,就需要提供一个公共的方法来获取这些变量的值,这个方法就是getXX()方法,其中XX代表变量的名字。这样,外部就可以通过调用这个方法来获取变量的值,而不必直接访问变量。这种做法可以提高程序的封装性和安全性,防止外部直接修改变量的值,从而保证程序的正确性和稳定性。
相关问题
(1)定义一个标准的Person类,包含属性变量name,并包含属性对应的setXX/getXX方法(如setName方法和getName方法)、空参构造。 (2)使用反射的方式创建一个Person实例对象。 (3)使用反射方式调用setName()方法对name的值进行设置。 设置之后,在通过反射方式执行getName()方法。
下面是实现代码:
```java
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class Person {
private String name;
public Person() {}
public Person(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public static void main(String[] args) throws Exception {
// 创建Class对象
Class cls = Class.forName("Person");
// 通过反射创建对象
Constructor constructor = cls.getConstructor();
Person person = (Person) constructor.newInstance();
// 通过反射设置属性值
Method setNameMethod = cls.getDeclaredMethod("setName", String.class);
setNameMethod.invoke(person, "Tom");
// 通过反射获取属性值
Method getNameMethod = cls.getDeclaredMethod("getName");
String name = (String) getNameMethod.invoke(person);
System.out.println("name: " + name);
}
}
```
输出结果:
```
name: Tom
```
题目: (1)定义一个标准的Person类,包含属性变量name,并包含属性对应的setXX/getXX方法(如setName方法和getName方法)、空参构造。 (2)使用反射的方式创建一个Person实例对象。 (3)使用反射方式调用setName()方法对name的值进行设置。 (4)设置之后,在通过反射方式执行getName()方法。
以下是Java代码实现:
```java
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
public class Person {
private String name;
public Person() {
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public static void main(String[] args) throws Exception {
// 使用反射创建Person实例对象
Class<?> cls = Class.forName("Person");
Constructor<?> constructor = cls.getConstructor();
Object obj = constructor.newInstance();
// 使用反射调用setName方法设置name属性
Method setMethod = cls.getMethod("setName", String.class);
setMethod.invoke(obj, "Tom");
// 使用反射调用getName方法获取name属性
Method getMethod = cls.getMethod("getName");
Object name = getMethod.invoke(obj);
System.out.println("name = " + name);
}
}
```
输出结果为:
```
name = Tom
```
解释:
首先定义了一个`Person`类,包含了`name`属性和对应的`setName`和`getName`方法,使用反射的方式创建了一个`Person`实例对象,调用`setName`方法设置了`name`属性的值为`Tom`,再通过反射调用`getName`方法获取`name`属性的值并输出。