1-13 编程练习(5)

1-13 编程练习(5)

为什么我将测试类Test写了并进行对象实例化后(虽然别处的代码还有bug,但也应该有一些输出呀),没有输出,即没有打印出“用户名”和“密码”。

public class Test{
    // 测试方法
	public static void main(String[] args) {
     //实例化对象,调用相关方法实现运行效果
    User testOne=new User("Lucy",123456);
    User testTwo=new User("Mike",123456);
    testOne.showInformation();
    testTwo.showInformation();
    }
}
public class User{
    //定义属性用户名、密码
    private String username;
    private int password;
    
    /*通过构造方法实现属性赋值*/
    public User(String username, int password){
        this.username=username;
        this.password=password;
    }
    
    /*set/get设定*/
    public String getUsername(){
        return this.username;
    }
    public void setUsername(String username){
        this.username=username;
    }
    /**/
    public int getPassword(){
        return this.password;
    }
    public void setPassword(int password){
        this.password=password;
    }
    
    /**/
    //描述信息
  public void showInformation(){
      System.out.println("用户名:"+getUsername());
      System.out.println("密码:"+getPassword());
    //   System.out.println("用户名:"+this.username);
    //   System.out.println("密码:"+this.password);
  }
}
public class UserManager{
    // 用户信息验证的方法
    public String checkUser(User one, User two) {
       // 判断用户名是否为空,是否一致
    if(one.getUsername().equals(two.getUsername())){
        //System.out.println("用户名一致");
    }else{
        System.out.println("用户名不一致");
    }

    //判断密码是否为空,是否一致
    if(one.getPassword().equals(two.getPassword())){
        //System.out.println("密码一致");
    }else{
        System.out.println("密码不一致");
    }
    return one.getUsername();
    }
}

http://img1.sycdn.imooc.com//climg/5c3b286500015e8608101194.jpg

另外,对于输出部分,是该使用这下面哪一种代码?使用get方法应该是运用了封装,从而不会造成数据泄露,也符合安全性。但是我记得之前有一次写代码,好像只能使用this. 的方式才能将运行结果显示出来

    //描述信息
  public void showInformation(){
      System.out.println("用户名:"+getUsername());
      System.out.println("密码:"+getPassword());
    //   System.out.println("用户名:"+this.username);
    //   System.out.println("密码:"+this.password);
  }

亦或是:

  public void showInformation(){
    //   System.out.println("用户名:"+getUsername());
    //   System.out.println("密码:"+getPassword());
      System.out.println("用户名:"+this.username);
      System.out.println("密码:"+this.password);
  }

谢谢。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
林懿 2019-01-14 02:04:59

编译错误,程序都没有成功运行,怎么会输出结果。错在 UserManager 里的 equals ,说了两遍了,不再赘述。

至于 this.username 和 this.getUsername(),个人理解所谓安全性是指禁止别的类直接调用这个类的属性,通过封装,可以让别的类只能通过调用方法来获取或修改这个类的属性。重点是针对于别的类而言。而在这个类的内部,使用 this 直接调用属性值还是通过方法调用属性值没有什么区别。

但是如果是在类的内部设置属性值的话,课程里老师提到过,建议使用 setUsername() 方法,而不是直接调用属性值 this.username = username ,因为你可以在 setUsername() 方法里添加一些逻辑条件。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师