java 类类型数组

今天做题,遇到了定义数组类型是类的,以前都是基本数据类型啊,今天看到这个懵了好久,不过最终还是搞懂了。最后做了一个练习题,一起来看一下吧
题目要求是:
// 一个方阵,3排,第一排,从左往右依次是 小红-身高:1.1 老王-身高:1.2 麻辣-身高1.5 隔壁-身高2.8
// 第二排,从左往右依次是 老妹儿-身高:0.9 小哥哥-身高:0.7 小弟弟-身高1.1 小姐姐-身高1.6
// 第三排,从左往右依次是 小臭臭-身高:8.9 老嬷嬷-身高:-0.8 奥特曼-身高30 白胡子-身高8.8
// 要求,排成4排,身高从高到底排列

package com.day6;
import javax.swing.DebugGraphics;
//定义一个类
class Menus1 {
	//成员变量
	String name;
	int age;
	int number;
	char sex;
	int price;
	double height;
	
}
public class Damo7 {
	static void m1() {
		System.out.println("序号 菜名 价格");
		//当下这个创建数组的类型就是类类型的
		Menus1[] pers=new Menus1[12]; //对象数组 保存的对象呢
		//初始化数组
		for (int i = 0; i < pers.length; i++) {
			pers[i] = new Menus1();//板凳上面放一个屁股
			pers[i].name = "name" + i;
			pers[i].price = (int) (Math.random() * 100);
			System.out.print(pers[i].name+" "+pers[i].price+" ");
		}
//		Menus1 m1=new Menus1();
//		Menus1 m2=new Menus1();
//		Menus1 m3=new Menus1();
//		m1.number=1;
//		m1.name="松鼠鲤鱼";
//		m1.price=58;
//		m2.number=2;
//		m2.name="小葱拌豆腐";
//		m2.price=20;
//		m3.number=3;
//		m3.name="佛跳墙";
//		m3.price=1000;
//		pers[0]=m1;
//		pers[1]=m2;
//		pers[2]=m3;
//		for (int i = 0; i < pers.length; i++) {
//		//if(pers[i]!=null)
//		//System.out.println(pers[i].number+" "+pers[i].name+" "+pers[i].price);
//		System.out.print(pers[i].name+" "+pers[i].height+" ");
//		}
//		System.out.println("----------");
		//选择排序,排序的目标是这个数组里的每一个数组里的每个元素的价格值
		for(int i=0;i<pers.length-1;i++) {
			for(int j=0;j<pers.length-1-i;j++) {
				 if(pers[j].price>pers[j+1].price) {
	                    Menus1 temp = pers[j];
	                    pers[j] = pers[j+1];
	                    pers[j+1]= temp;
	                }
			}
		}
		System.out.println();
		//再次遍历这个排序后的数组
		System.out.println();
		for (int i = 0; i < pers.length; i++) {
			if(pers[i]!=null)
			//System.out.println(pers[i].number+" "+pers[i].name+" "+pers[i].price);
				System.out.print(pers[i].name+" "+pers[i].price+" ");
		}
		//分割,将一行数组分割成三排四列的数组
		System.out.println();
		for (int s = 0; s < pers.length; s++) {
			System.out.print(pers[s].name+" "+pers[s].price+" ");
			if((s+1)%3==0) {
				System.out.println();
			}
		}
	}
	public static void main(String[] args) {
		m1();
	}

}

<think>好的,我现在需要帮助用户了解如何在Java定义类类型数组。首先,我得回忆一下Java数组的基本概念,特别是对象数组和基本类型数组的区别。用户可能已经知道基本类型数组定义,比如int[],但类类型数组可能不太一样,所以需要明确说明两者的不同。 接下来,我应该分步骤来解释如何定义类类型数组。首先,声明数组变量。这里要提到声明时的语法,比如类名[] 数组名。然后,初始化数组,需要说明使用new关键字,并指定数组长度。这里要强调,初始化数组后,数组中的每个元素都是null,需要进一步实例化对象。 接下来,用户可能需要知道如何为数组元素赋值,也就是实例化每个对象。这里需要给出示例代码,比如逐个赋值或者使用循环。同时,要提醒用户注意数组越界的问题,以及NullPointerException的可能性。 然后,应该提到可以在声明的同时初始化数组,比如直接指定初始化的对象。这样用户可以看到不同的初始化方式,根据实际情况选择合适的方法。 另外,用户可能对多维数组感兴趣,所以需要简要说明类类型的二维数组如何定义,比如类名[][],以及初始化的步骤。这部分可以简单带过,但需要确保示例清晰。 最后,要总结关键点,比如数组元素初始化为null,必须实例化后才能使用,避免空指针异常。这些注意事项对用户来说非常重要,能帮助他们避免常见的错误。 在整理回答时,要确保结构清晰,分步骤说明,每个步骤都有对应的代码示例,并且解释代码的作用。同时,语言要简洁明了,避免使用过于专业的术语,让初学者也能理解。需要检查代码是否正确,比如是否正确使用了new关键字,是否正确初始化了每个元素。 可能还需要考虑用户的实际应用场景,比如他们可能在处理对象集合,比如学生、员工等自定义类,所以示例中使用Person类会比较贴切。同时,要确保示例完整,比如定义一个Person类,然后在主方法中演示数组定义和使用。 另外,要确认是否覆盖了用户可能遇到的问题,比如数组声明后未初始化导致编译错误,或者访问未实例化的元素导致的运行时异常。这些都需要在注意事项中提及,帮助用户提前预防。 最后,通读整个回答,确保符合用户的要求:使用中文,结构清晰,步骤详细,代码正确,并涵盖定义、初始化、赋值和注意事项等方面。确保没有使用任何Markdown格式,行内公式正确使用$...$,独立公式用$$...$$,但在这个问题中可能用不上数学公式,但还是要检查是否有需要的地方,比如如果有涉及算法复杂度,可能需要公式,但这里可能不需要,所以可以忽略。重点是Java语法的正确性。</think>在Java中,定义类类型数组的步骤如下: --- ### 1. **声明数组** 使用语法`类名[] 数组名`声明数组变量 例如,定义一个`Person`类的数组: ```java Person[] personArray; // 声明一个Person类型的数组 ``` --- ### 2. **初始化数组** 用`new`关键字分配内存空间并指定长度: ```java personArray = new Person[5]; // 初始化长度为5的数组 ``` - 此时数组元素默认值为`null`(因为类类型是引用类型) - 需要**手动为每个元素实例化对象**,否则访问时会抛出`NullPointerException` --- ### 3. **为数组元素赋值** 通过索引逐个实例化对象: ```java personArray[0] = new Person("张三", 20); // 实例化第一个元素 personArray[1] = new Person("李四", 25); // 实例化第二个元素 ``` 或通过循环初始化: ```java for (int i = 0; i < personArray.length; i++) { personArray[i] = new Person(); // 调用无参构造方法 } ``` --- ### 4. **声明时直接初始化** 可以合并声明和初始化步骤: ```java Person[] personArray = new Person[] { new Person("王五", 30), new Person("赵六", 35) }; ``` --- ### 5. **多维类类型数组** 定义二维数组: ```java // 声明并初始化二维数组 Person[][] people = new Person[3][2]; // 为每个元素赋值 people[0][0] = new Person("小明", 18); ``` --- ### 注意事项 1. **空指针问题**:未实例化的数组元素为`null`,直接调用方法会报错 ```java Person[] arr = new Person[3]; System.out.println(arr[0].getName()); // 抛出NullPointerException ``` 2. **动态初始化**:数组长度在运行时确定,但初始化后长度不可变 3. **类型安全**:数组元素必须与声明类型一致(或子类) --- ### 完整示例 ```java public class Person { private String name; private int age; public Person() {} // 无参构造方法 public Person(String name, int age) { // 带参构造方法 this.name = name; this.age = age; } public static void main(String[] args) { // 定义并初始化数组 Person[] personArray = new Person[2]; personArray[0] = new Person("张三", 20); personArray[1] = new Person("李四", 25); // 遍历数组 for (Person p : personArray) { System.out.println(p.name + "的年龄是" + p.age); } } } ``` 通过以上步骤,你可以灵活地定义和使用类类型数组。关键点是:**声明数组类型→分配内存→实例化元素**。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值