Java如何实现打印对象属性值的Display方法并编写main方法
实现方案
首先需要修正原代码的一个致命问题:你当前把staff1、staff2两个员工对象定义为employee类的实例成员,每次创建employee实例时都会同步创建两个新的employee对象,会触发无限递归实例化,最终导致栈溢出,这两个对象需要移到main方法内定义。
Display方法实现
按要求实现接收对象入参、打印属性的方法,这里写为静态方法方便在main静态上下文里直接调用,同时增加空判断避免空指针异常:
public static void Display(employee emp) { if (emp == null) { System.out.println("传入的员工对象不存在"); return; } System.out.println("姓名:" + emp.name); System.out.println("部门:" + emp.dept); System.out.println("薪资:" + emp.salary); System.out.println("---"); }
如果你需要方法返回属性值而不是直接打印,可以把方法返回值改为String,拼接属性内容后返回:
public static String getEmpInfo(employee emp) { if (emp == null) { return "传入的员工对象不存在"; } return String.format("姓名:%s,部门:%s,薪资:%d", emp.name, emp.dept, emp.salary); }
main方法补充代码
删除类中原来定义的staff1、staff2成员变量,在main方法中补充实例化、方法调用的逻辑:
public static void main (String args []) { // 实例化两个员工对象 employee staff1 = new employee("x","IT",100000); employee staff2 = new employee("y", "HR", 200000); // 调用Display方法打印属性 Display(staff1); Display(staff2); // 如果使用返回字符串的版本,替换为以下代码即可 // System.out.println(getEmpInfo(staff1)); // System.out.println(getEmpInfo(staff2)); }
完整可运行代码参考
public class employee { String name; int salary; String dept; public employee(String n, String d, int s) { this.name= n; this.salary= s; this.dept = d; } public static void Display(employee emp) { if (emp == null) { System.out.println("传入的员工对象不存在"); return; } System.out.println("姓名:" + emp.name); System.out.println("部门:" + emp.dept); System.out.println("薪资:" + emp.salary); System.out.println("---"); } public static void main (String args []) { employee staff1 = new employee("x","IT",100000); employee staff2 = new employee("y", "HR", 200000); Display(staff1); Display(staff2); } }
补充说明:Java编码规范中类名推荐使用大驼峰命名,也就是类名建议改为
Employee,不修改也可以正常编译运行。
内容的提问来源于stack exchange,提问作者D S
相关产品推荐
相关产品推荐

