日期:2014-05-20  浏览次数:20705 次

一个简单的面向对象程序,不太理解,新手请教:)小弟先谢谢了
class Check{
String name ;
String password ;
public boolean whether(String name,String password){
if(name.equals("zhangyichao")&&password.equals("zyc198755")){
return true;
}else{return false;}
}
}
class Operate{
public String info[];
public Operate(String info[]){
this.info=info;
}
public String login(){
Check check = new Check();
this.isExit();
String str;
String name = this.info[0];
String password = this.info[1];
if(check.whether(name, password)){
str="欢迎光临";
}else{str="重新输入";}
return str;
}
public void isExit(){ // 判断参数个数,来决定是否退出程序
if(this.info.length!=2){
System.out.println("输入的参数不正确,系统退出!") ; // 给出一个正确的格式
System.out.println("格式:java LoginDemo02 用户名 密码") ;
System.exit(1) ; // 系统退出
}
}
}
public class test03{
public static void main(String args[]){
Operate oper = new Operate(args);
oper.login();
}
}
问题:虽然学了几天java,但是对于简单的程序还是理解不透,这个简单的程序有几个不明白的地方,请求各位高手帮忙
1、在Operate类中的login方法中有这么一段代码this.isExit();这个this应该指的是当前对象"check",那么还原到isExit方法中的判断语句是不是应该就是if(check.info.length!=2)?
2、check是Check类的对象,那么这个对象到底是一个什么形式的东西?check.whether是check对象调用了Check类的方法,那这个check对象也是保存姓名和密码么?

------解决方案--------------------
1、在Operate类中的login方法中有这么一段代码this.isExit();这个this应该指的是当前对象"check",那么还原到isExit方法中的判断语句是不是应该就是if(check.info.length!=2)?

this指的是main函数中的 oper,也就是class Operate的实例。
if(this.info.length!=2) 还原到最原始就相当于main函数中的 if (args.length !=2)


2、check是Check类的对象,那么这个对象到底是一个什么形式的东西?check.whether是check对象调用了Check类的方法,那这个check对象也是保存姓名和密码么?

check就是Check类的实例,普通的东西。
check对象里面的两个属性name 和 password 在本例中根本没使用到,可以从类定义中删除。
------解决方案--------------------
1. this.isExist()中, this是指的Operate类的对象, 对应类test03中main方法的Operate oper = new Operate(args);这行代码. 换句话说, Opoerate的login方法中this.isExit()在这个代码中相当于oper.isExit()
Check类没有isExit方法.所以this.info.length != 2 也相当于oper.info.length !=2.

2. Check类中, 有类属性name和password(或者叫成员变量?忘记了...), 但是在whether方法中, 根据代码, 调用的并不是类属性name和password, 而是方法的参数name, password.
class Check{
String name ; //类属性name
String password ; //类属性password
public boolean whether(String name,String password){ //方法参数name以及password
if(name.equals("zhangyichao")&&password.equals("zyc198755")){ //比较方法参数name是否为"zhangyichao"以及password是否为"zyc198755"
return true;
}else{
return false;
}
}
}
换句话说整个代码中间Check类的类变量name与password并没有使用到. 从头到尾name与password变量都未初始化. 同样, check对象并不保存用户名和密码. 用户名和密码最终是以字符串数组的形式保存在Operate类的对象oper的成员变量info中.