java自定义类型数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java自定义类型数组相关的知识,希望对你有一定的参考价值。

自定义的类型,创建数据后,为什么不能给对象赋值呢。代码如下。

public class Student
String name;//对象的名称
public int [] Score;//成绩



//管理类
import java.util.*;
public class Manager
public void input(Student [] stus)
Scanner in = new Scanner(System.in);
for (int i = 0;i <stus.length;i++)
System.out .print("请输入"+(i+1)+"个学生的姓名:");
stus[i].name = in.next();
for (int j = 0;j<stus[0].Score.length;j++)
System.out.print("请输入第"+(i+1)+"门成绩的分数:");
stus[i].Score[j] = in.nextInt();;





public static void main(String [] args)
Scanner in = new Scanner(System.in);
System.out.print("请输入学生人数:");
int Sl = in.nextInt();
Student [] stus = new Student[Sl];
Manager manager = new Manager();
manager.input(stus);


你好,我看出两点问题来。
1. Student的对象都没有初始化,因为你只创建了数组对象,而数组的每个元素都为null,所以你运行的时候会抛出空指针异常。
2. 你的Student类里面的score属性,也定义成了数组类型,但是你没有对这个属性初始化,在下面给课程分数赋值的时候必然会出错。追问

Student数组的初始化该怎么表示呢,求解

追答

嗯,这么来吧,我给你写个实例,你看看能懂我的意思不。
Student[] stu = new Student[2] ;
stu[0] = new Student() ; //当然这里按照构造函数来实现
stu[1] = new Student() ;

追问

stu[0] = new Student() ; //这样是把Student的属性给stu[1]?
Student[] stu = new Student[2] ;//新造个数组后,里面带的是什么类型的属性呢?

追答

Student[] stu = new Student[2] ; //
上面这句代码只是创建了一个数组对象,这个数组你就想像成一个容易,可以放两个学生,但是我现在只是创建了这个容器,里面什么也没放,你不相信我的话,那么你可以打印一下,肯定都是null。所以就需要下面的语句,给这个数组装对象。
stu[0] = new Student() ; //当然这里按照构造函数来实现
stu[1] = new Student() ;

参考技术A public class Student
String name;//对象的名称
public int [] Score=new int[2];//成绩,这里有几个成绩写成几个,或者就传一个
public String getName()
return name;

public void setName(String name)
this.name = name;

public int[] getScore()
return Score;

public void setScore(int[] score)
Score = score;



import java.util.*;
public class Manager
public void input(Student[] stus)
Scanner in = new Scanner(System.in);
for (int i = 0;i <stus.length;i++)
System.out .println("请输入"+(i+1)+"个学生的姓名:");
stus[i].setName(in.next());
for (int j = 0;j<stus[0].Score.length;j++)
System.out.println("请输入第"+(i+1)+"门成绩的分数:");
stus[i].getScore()[j] = in.nextInt();





public static void main(String [] args)
Scanner in = new Scanner(System.in);
System.out.println("请输入学生人数:");
int Sl = in.nextInt();
Student [] stus = new Student[Sl];
for (int i = 0; i < stus.length; i++)
stus[i]=new Student();

Manager manager = new Manager();
manager.input(stus);


Java数组总结

1.数组的基本概念及作用:数组是相同数据类型元素的集合,数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,也可以存储引用数据类型。

例如:int [] a = new int []{1,2,3,4,5};

String [] s = new String []{"小熊","小小熊","小小小熊"};

Employee [] e=new Employee[10];Employee是自定义类)

2.数组的声明:数组的声明的两种方式(一般用第一种):

①数据类型 []  数组名字    例如:int  []  a;

②数据类型 数组的名字 []   例如: int  a [];

3.数组的创建:数组创建的三种方式:

①声明数组的同时,根据指定的长度分配内存,但数组中元素值都为默认的初始化值。例如:char[] chAry = new char[10];

②明数组并分配内存,同时将其初始化。例如:int[] ary1 = new int[]{1, 2, 3, 4, 5};

③与前一种方式相同,仅仅只是语法相对简略。例如:int[] ary2 = {1, 2, 3, 4, 5};

4.数组的长度:length属性。例如:int [] b1 = new int []{1,2,3,4,5,6,7};

System.out.println(b1.length);

①创建数组的时候必须指定数组的长度,而且一经定义则不允许改变。

②数组的长度虽然是7,但是在内存中实际给8个位置,另外一个存储7

5.数组之间的赋值:直接赋值,但实际得到的效果是两个数组引用指向同一块内存。

6.数组的访问:数组名字[索引]    例如:a[2];

注意:①数组的索引从0开始。

②索引的数据类型是整型。

③索引最大值和数组长度始终差1

7.数组的迭代:有两种方式。例如:

int [] b1 = new int []{1,2,3,4,5,6,7};

第一种:for循环进行数组的迭代。

for(int i =0;i<b1.length;i++){

System.out.println(b1[i]);

}

第二种:增强for循环进行数组的迭代。

for(int x:b1){

System.out.println(x);

}

8.多维数组的声明有三种方式:int [][] a;  int []a1[];  int a2[][];

9.多维数组的迭代:int [][] b1 = new int [][]{{1,2},{3,4}};

              for(int i =0;i<b1.length;i++){

                 for(int j =0;j<b1[i].length;j++){

                 System.out.print(b1[i][j]);

}

}

10.数组的拷贝:arraycopy(Object src1, int srcPos, Object src2, int destPos, int length)
          从指定源数组src1中复制一个数组,复制从指定的位置srcPos开始,到目标数组src2的指定位置结束。

例如:      int[] a={10,100,1000};

            int[] b={20,200,2000,20000};

            System.arraycopy(a, 1, b, 2, 2);

            for(int x:b){

            System.out.println(x);

            }

输出结果为:20  200  100  1000

11.数组的特点:①数组是引用数据类型;

②数组是存储相同数据类型的集合;

③数组的下标从0开始。

④优点:越界检查、通用算法;

⑤缺点:长度一经定义不能改变。


以上是关于java自定义类型数组的主要内容,如果未能解决你的问题,请参考以下文章

flowable入门(四)增加自定义类型的扩展属性

如何在 TypeScript 中创建自定义类型

09.AutoMapper 之自定义类型转换器(Custom Type Converters)

将表转换为自定义类型数组

C# 自定义类型数组的排序

TypeScript 如何知道自定义数组类型中长度字段的行为?