java类和对象数组传参_java类中用类的数组作为函数参数传给类,为什么不能直接对类的数组进行操作?...

展开全部

你说不行的代码段,关键在这:(简称为62616964757a686964616fe59b9ee7ad9431333361313935代码①)Student stu[] = new Student[5];

Admin a = new Admin();

a.wyx(stu);

以及调用的时候:(简称为代码②)public void wyx(Student stu[])

{

Scanner in = new Scanner(System.in);

String name = in.nextLine();

stu[0].setName(name);

System.out.println(stu[0].getName());

}

而后面你说可以的方法是这样的(简称为代码③)public void wyx(Student stu[])

{

Scanner in = new Scanner(System.in);

String name = in.nextLine();

Student stud = new Student();

stud.setName(name);

stu[0] = stud;

System.out.println(stu[0].getName());

}

为什么不可以?这里你首先要清楚你在wyx方法里用到的形参是一个Student对象的数组,在代码②中,你直接使用stu[0].setName(name);,那么要想取得它的前提就是你的下标0有存在的对象,也就是你必须在你代码①里给你的stu 对象的0下标赋值,也就是:stu[0] = new Student();

否则你只是给数组开辟了大小,但并未在相应的位置给定实例化的对象,那么你在代码段②里直接引用是引用到空指针上的,并不存在对象。恰好你在代码①中就只是使用了Student stu[] = new Student[5];

并没有对数组里的做对象的初始化,所有你这个代码运行时会出错。

代码段③里,就恰恰符合上面所说,你创建一个新的对象:Student stud = new Student();

再给它赋值了name,最后把这个对象给了stu数组对象的0下标stu[0] = stud;

这样你的stu[0]具有正确的对象引用,你在后面的输出中调用它就正常了。

如果说你要前面方法可用,改为下面方式:public class 类对类的操作 {

public static void main(String[] args)

{

Student stu[] = new Student[5];

stu[0] = new Student();  -- 这里创建一个新的Student实例,并让stu[0]引用,只是根据你后面方法只引用了stu[0]

Admin a = new Admin();

a.wyx(stu);

}

}

另外有一些简单的建议:你的代码段里对数组的写法使用的是Student stu[],那么比较建议的写法是Student[] stu;

如果你真的要传递Student stu[] = new Student[5];,那么有两种建议:

① 你给你的数组对象先实例化好,可以用循环,如果没学到循环,可以一个一个创建;

② 如果不想在创建时候就实例化,那么也可以在使用的时候进行判断,判断如果是空引用,不包含对象再进行实例化,关键代码如下:

if (null == stu[0]) {

stu[0] = new Student();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值