A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© zealler 初级黑马   /  2017-7-1 17:29  /  4438 人查看  /  27 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

求助!

评分

参与人数 1黑马币 +1 收起 理由
yushulinfeng + 1 输入时出现问题

查看全部评分

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端

27 个回复

正序浏览
你要在上一个循环中就添加到集合里面去
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
IceLoveInFire丶 发表于 2017-7-2 00:16
你只是创建了数组,数组里面三个对象默认是null,你用null去调用方法肯定空指针
...

所以循环里面开头加一个Student sarr=new Student ()就行了吧,声明他是student类对象
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
newu 黑马帝 2017-7-2 08:02:57
26#
谢谢分享 赞一个
回复 使用道具 举报
我觉得,根本问题是你不清楚,构造方法是什么时候调用,在引用数据类型(也就是所说的对象)创建的时候,jvm会自动调用构造方法,也就是说每出现一个new,就会调用一次构造方法,而对于set或者get方法(没有用静态修饰),是属于对象的,也就是说,在对象存在以后才会调用set get方法,这就有了先后的顺序,构造方法的调用一定是在成员方法之前。你在创建Student数组时,数组元素如果不是new创建,那么会自动赋值为null。本人也才开始学习java,才疏学浅,如果有说错的地方,欢迎指出。
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
前面用变量接收再用构造赋值。。
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
你只是创建了数组,数组里面三个对象默认是null,你用null去调用方法肯定空指针
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
回复 使用道具 举报
kang1027 发表于 2017-7-1 23:05
好好搬砖,学什么java

工地不适合我

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
好好搬砖,学什么java
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
zealler 发表于 2017-7-1 22:50
可以!

这个只是看那哥们说得要单独去分配内存,我才展开思路的,这个我确实没看到呢,才看到继承,
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 22:40
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在 ...

可以!

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 22:40
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在 ...

你的意思是说,每次循环都要new一个student?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 22:40
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在 ...

过两天再回来看看,现在不太懂
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在创建对象数组之后先逐一给对象数组new一个Student对象,也就是在堆内存中创建三个Student对象并把三个对象的地址值逐一给sarr[i];
楼主的这个方法是创建一个对象,动态初始化后的对象地址直接给了sarr[i];分析的对么?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
回复 使用道具 举报
aaa12344cs 发表于 2017-7-1 21:39
个人理解:引用对象数组和基本数据类型数组不同,不能直接引用。必须单独为每个数组元素进行初始化。要不就 ...

老哥我有个新想法

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 21:35
看我这个可以,代码给你:
public static void main(String[] args) {
        Scanner sc = new Scanner( Syste ...

额。也不行
回复 使用道具 举报
个人理解:引用对象数组和基本数据类型数组不同,不能直接引用。必须单独为每个数组元素进行初始化。要不就报空指针。因为你new student[3] 只有数组的地址。数组中的元素就是你说的Student对象(想法正确)没有内存,全是NULL。  理解了就知道怎么解决空指针了?
回复 使用道具 举报
zealler 发表于 2017-7-1 20:51
我认为student类数组中的一个元素应该是一个student类型的对象,这种想法是错误的吗?
...

看我这个可以,代码给你:
public static void main(String[] args) {
        Scanner sc = new Scanner( System.in);
       
        Student[] sarr = new Student[3];
        Student s = new Student();
       
        for (int i = 0; i < sarr.length; i++) {
               
                s.setName(sc.nextLine());
                String a = s.getName();
                sarr = new Student(a);
               
                s.setAge(sc.nextInt());
                int b = s.getAge();
                sarr = new Student(b);
        }
       
        for (int i = 0; i < sarr.length; i++) {
                 
                System.out.println("姓名: "+ sarr.getName() + "年龄:" + sarr.getAge());
               
        }
        }
}
class Student{
        private String name;
        private int age;
       
        public Student(){}                                                //空参构造
       
        public Student(String name) {                        //有参构造
                this.name = name;
        }
        public Student(int age){
                this.age = age;
        }
       
       
        public String getName() {
                return name;
        }
       
        public void setName(String name) {
                this.name = name;
               
        }
       
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }       
}
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马