Java 开发实战经典里有一个登陆的实例 有一处定义字符串数组看不懂~请教!!

sunrubben 2010-03-12 09:52:48
贴源代码:
class Check{ // 完成具体的验证操作
public boolean validate(String name,String password){
if(name.equals("lixinghua")&&password.equals("mldn")){ // 验证
return true ;
}else{
return false ;
}
}
};
class Operate{ // 本类只是调用具体的验证的操作
private String info[] ; // 定义一个数组属性,用于接收全部输入参数(为什么可以这样定义数组???) public Operate(String info[]){
this.info = info ; // 通过构造方法取得全部的输入参数
}
public String login(){
Check check = new Check() ; // 实例化Check对象,用于检查信息
this.isExit() ; // 判断输入的参数是否正确
String str = null ; // 用于返回信息
String name = this.info[0] ;// 取出姓名
String password = this.info[1] ; // 取出密码
if(check.validate(name,password)){ // 登陆验证
str = "欢迎" + name + "光临!" ;
}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 LoginDemo02{
public static void main(String args[]){
Operate oper = new Operate(args) ; // 实例化操作类的对象
System.out.println(oper.login()) ; // 取得验证之后的信息
}
};


问下大家 红色的部分那里private String info[] ;怎么可以这样??

这里有个测试代码:
public class test
{
public static void main(String args[])
{
int info[]=new int[3];
info[0]=1;
info[1]=3;
info[2]=5;
for (int i=0;i<3 ;i++ )
{
System.out.println(info[i]);
}
String sss[];
sss[1]="hello";
sss[2]="word";
System.out.print("");
}
}
编译会报错~~为什么之前的没错 这里错了啊?
...全文
120 10 打赏 收藏 转发到动态 举报
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunrubben 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lxd520123 的回复:]
人家的在类实例的时候已经引用了一个对象,
你的数据只是一个声明,未实例
你的编译错误也应该是提示你未实力吧
[/Quote]类实例的时候已经引用了一个对象??什么意思
sunrubben 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 s208040139 的回复:]
那是写在内里面的,你测试是写在方法里的
[/Quote]写在类里面就可以不为对象开辟空间??
bunrise 2010-03-12
  • 打赏
  • 举报
回复
人家的在类实例的时候已经引用了一个对象,
你的数据只是一个声明,未实例
你的编译错误也应该是提示你未实力吧
jimyx123 2010-03-12
  • 打赏
  • 举报
回复
String sss[] = new String[3];
jimyx123 2010-03-12
  • 打赏
  • 举报
回复
String sss[];
sss[1]="hello";
sss[2]="word";
这个sss只创建了引用,还没为对象开辟空间 下面直接sss[1]取时面的数据了 肯定是有问题的
String sss[] = new String[2];
快信科技 2010-03-12
  • 打赏
  • 举报
回复
那是写在内里面的,你测试是写在方法里的
swandy45 2010-03-12
  • 打赏
  • 举报
回复
一维数组的定义

//定义包含三个元素的一维数组

int[] a = new int[3]; a = {1,2,3};//方法1,先new对象,然后赋值

int[] b = {1,2,3}; //方法2,直接赋值

int[] c = new int[3]{1,2,3}; //方法3,new后直接赋值

注意:如果用new定义数组时,必须指定其维度,这样定义是错误的: int[] d = new int[];

如果无法确定其元素个数,可以这样定义:int[] e = {};
swandy45 2010-03-12
  • 打赏
  • 举报
回复
name.equals("lixinghua")这个地方可以
用常量.equals(变量参数)避免造成空指针异常
sunrubben 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 s208040139 的回复:]
引用 5 楼 sunrubben 的回复:
引用 1 楼 s208040139 的回复:
那是写在内里面的,你测试是写在方法里的
写在类里面就可以不为对象开辟空间??

这样说吧,不知道对不对,你测试的时候是局部变量,局部变量,局部变量不可能通过类对象来分配地址,只有自己new。类里面的变量可以通过类对象来分配地址,类对象的成员变量如果不分配地址直接引用他会报空指针错误。
[/Quote]哦~~大概知道了。。谢谢~
快信科技 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sunrubben 的回复:]
引用 1 楼 s208040139 的回复:
那是写在内里面的,你测试是写在方法里的
写在类里面就可以不为对象开辟空间??
[/Quote]
这样说吧,不知道对不对,你测试的时候是局部变量,局部变量,局部变量不可能通过类对象来分配地址,只有自己new。类里面的变量可以通过类对象来分配地址,类对象的成员变量如果不分配地址直接引用他会报空指针错误。
相关推荐

62,568

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告