3、对象数组
数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用类型中的类时,我们称为对象数组。
案例;
定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出4年级(grade值为4)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1) 生成随机数:Math.random(),返回值类型double;
2) 四舍五入取整:Math.round(double d),返回值类型long。
……创建类
public class Student{
int number;
int score;
int grade;
public void show(){
System.out.println("number:"+number+" grade:"+grade+" score:"+score);
}
}
……实际执行
给数组元素赋值时,应当在用于赋值的for循环内写上 stu[i] = new Student();
public class StudentTest {
public static void main(String[] args) {
Student []stu = new Student[20];
for (int i=0;i<stu.length;i++){
stu[i] = new Student(); //数组元素也是对象,挨个赋值
stu[i].number =i+1;
stu[i].grade = (int)(Math.random()*6)+1;
stu[i].score = (int)(Math.random()*100)+1;
}
for (int i=0;i<stu.length;i++){
if(stu[i].grade==4){
stu[i].show();
}
}
//sort
for (int i=0;i<stu.length-1;i++){
for(int j=0;j<stu.length-1-i;j++){
if(stu[j].score>stu[j+1].score) {
int t = stu[j].score;
stu[j].score = stu[j + 1].score;
stu[j + 1].score = t;
}
}
}
//traverse
for(int i = 0;i<stu.length;i++){
stu[i].show();
}
}
}
- 注意点
对象数组
(1)首先要创建数组对象本身,即确定数组的长度,
类名 [] 数组名 = new 类名 [数组长度]
例:Student []stu = new Student[20];
(2)创建每一个元素对象(实例化),如果不创建,数组的元素的默认值就是null,所以易出现空指针异常NullPointerException。
类名[index] = new 类名();
例:
for (int i=0;i<stu.length;i++){
stu[i] = new Student(); }
4、方法应用:重载
方法重载:在同一个类中,允许存在一个以上的同名方法(两同),只要它们的参数列表不同(一不同)即可。
-
- 参数列表不同,意味着参数个数或参数类型的不同
- 参数列表中,不同数据类型形参前后顺序不同,仍然认为形参类型不同。
如:
public void add(int i,String Str){
System.out.println("1111");
}
public void add(String Str,int i){
System.out.println("2222");
二者方法不同。
重载的特点:与修饰符、返回值类型(方法名之前的结构)无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
实例:
public void print(int i,int j){
System.out.println(i*j);
}
//等价于
public void print1(int m,int n){
System.out.println(m*n);
}
//此时print方法和print1方法形参列表数据类型、数量均相同,因此二者等价。
重载方法调用:JVM通过方法的参数列表,调用匹配的方法。
-
- 先找个数、类型最匹配的
- 再找个数和类型可以兼容的(例如,可以从int类型提升为double类型),如果同时多个方法可以兼容将会报错
public class Overload {
public void print(int i,int j){
System.out.println(i*j);
public void print3(double i,double j){
System.out.println(i*j);
}
//可以与print方法共存。若print方法不存在且i、j均为int类变量时,通过自动数据类型提升,能够使用print3方法。
判断两个方法是否相同:
(1)方法名相同
(2)形参列表相同
4.2
方法应用2:可变个数形参的方法
当定义一个方法时,形参的类型可以确定,但是形参的个数不确定,那么可以考虑使用可变个数的形参。
格式:
方法名(参数的类型名 ...参数名)
特点:
(1)可变参数:方法参数部分指定类型的参数个数是可变0个,1个或多个
(2)可变个数形参的方法与同名的方法之间,彼此构成重载
public void print(int ... num){
System.out.println("yeah!");
}
public void print(int i){
System.out.println("oh!");
}
public void print(int i,int j){
System.out.println("wow!");
}
三个同名的print方法可以同时存在,编译器有限选择最符合输入类型的方法。 (可以理解为与重载选择方法的模式相同)
(3)可变参数方法的使用与方法参数部分使用数组是一致的,二者不能同时声明,否则报错。
public class Varags {
public void print(int ... num){
System.out.println("yeah!");
}
//与如下 可变个数形参同名的 数组方法等价
public void print(int[],num){
System.out.println("no!");
}
}
(4)方法的参数部分有可变形参,需要放在形参声明的最后
写法示例:
public void print(int i,int ... num){
System.out.println("yeah!");
}
(5)在一个方法的形参中,最多只能声明一个可变个数的形参(放在形参列表的最后)
标签:形参,stu,int,void,面向对象,重载,方法,public From: https://blog.csdn.net/2401_88237139/article/details/143504997