如何为私有属性的Java类通过构造方法赋值?代码疑问咨询
关于私有属性类通过构造方法设置值的疑问解答
嗨,我完全理解你的疑问了,咱们一步步拆解这个问题:
首先,你第一个写法是完全正确且符合封装规范的,你的担心其实是对“私有属性”的概念有点小误解:
- 类的
private属性指的是外部类不能直接访问或修改这些属性,而你在主类里定义的name、id是局部变量,它们只是临时存储用户输入的数值,和Student类的私有属性完全是两回事。 - 你通过
new Student(id, name)调用带参构造方法时,是把局部变量的值传递给构造方法,再由构造方法内部(属于Student类的范围,有权访问私有属性)把值赋值给private的id和name,全程外部都没有直接触碰Student的私有属性,完美保持了封装性。
咱们把完整的运行代码写出来,你就能更清楚了:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入学生姓名:"); String name = input.nextLine(); System.out.print("请输入学生ID:"); int id = input.nextInt(); // 这里完全符合封装要求,外部没有直接访问Student的私有属性 Student student = new Student(id, name); // 验证:只能通过get方法获取属性值,无法直接修改 System.out.println("已创建学生:"); System.out.println("姓名:" + student.getName()); System.out.println("ID:" + student.getId()); } } class Student { private int id; private String name; public Student (int id, String name) { this.id=id; this.name=name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
然后说说你第二个思路的问题:
- 首先,你的
Student类目前没有无参构造方法,Java默认只有在没有定义任何构造方法时才会提供无参构造,所以你写new Student()会编译报错,得手动添加无参构造:public Student() { // 可以留空,或者给属性设置默认值,比如id=0,name="" } - 其次,这个思路完全是多此一举:你先创建一个空对象,用setter赋值,再用这个对象的属性去创建新对象,既冗余又没必要,而且并没有比第一种方法更“安全”。
总结一下:
- 第一种方法是最优解:获取用户输入到局部变量,通过带参构造直接创建初始化完成的
Student对象,既符合封装规范,又简洁高效。 - 私有属性的封装性核心是禁止外部直接访问类内部的属性,而不是禁止用外部变量传递值给构造方法或setter,这两者是完全不同的概念。
内容的提问来源于stack exchange,提问作者sloppydev
相关产品推荐
相关产品推荐

