首页 > 其他分享 >面向对象基础(2)对象数组、重载与可变个数形参

面向对象基础(2)对象数组、重载与可变个数形参

时间:2024-11-09 08:47:16浏览次数:3  
标签:形参 stu int void 面向对象 重载 方法 public

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. 注意点

对象数组

(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

相关文章

  • Python面向对象1详解案例
    1.面向对象(先前pygame的小游戏后续1中有介绍)类名:大驼峰命名方式(每个单词的首写字母都有要大写)属性:就是变量行为:函数class类名:   类代码(属性,行为)运行代码类代码直接会执行对象:类产生对象(类()来实现)#对象使用类里面的方法对象.方法名()#对象使......
  • 看一遍就会用——面向对象:类和对象,实例属性,实例方法,字符串表示
    python面向对象1.类和对象2.实例属性3.实例方法4.字符串表示1.__str__方法2.__repr__方法1.类和对象在Python中,类和对象是面向对象编程(OOP)的核心概念。类(Class)是创建对象的蓝图或模板,它定义了对象将拥有的属性和方法。对象(Object)则是根据类创建的具体实例,它包含了类......
  • 三十三、Python基础语法(面向对象其他语法-下)
    一、属性划分1.类属性类属性:类属性就是类对象具有的属性,一般写法在类内部、方法的外部定义的变量,就是类属性,类属性在内存中只有一份。可以通过类名直接访问,也可通过实例访问。classCircle:#类属性,定义圆周率pi=3.14159def__init__(self,radius):......
  • c语言中函数体中的变量声明不能使用和形参相同的变量名
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c#include<stdio.h>intmax(inta,intb)//创建一个名为max的函数{intk=100;if(a>b){returna;}......
  • PHP反射API与面向对象编程:当“魔镜”遇上“家族聚会”
    在PHP的世界里,面向对象编程(OOP)就像是一场盛大的家族聚会,每个类都是家族中的一员,它们有着自己的属性和方法。而PHP的反射API,就像是一面神奇的“魔镜”,能够让我们窥探这些家族成员的内心深处,了解它们的秘密。今天,我们就来聊聊这两者之间的关系,以及如何通过代码示例来展示它们的互......
  • python面向对象(一)
    前言Python是一种功能强大的编程语言,因其简洁的语法和强大的库而备受开发者喜爱。而在Python中,面向对象编程(OOP)是一种核心的编程范式,它通过模拟现实世界中的对象和交互来帮助我们设计清晰、易维护的代码。在本篇博客中,我们将深入探讨Python的面向对象编程的基本概念,了解如......
  • Java面向对象进阶学习一
    this关键字使用this使用的变量时属性,没有使用的是形参this可以调用结构,成员变量,方法this的理解,当前对象(在方法中调用时),或当前正在创建的对象(在构造器中调用时)针对方法内的使用情况一般情况下,我们通过对想a调用方法,可以在方法内调用当前对象a的属性或其他的方法,此时,我们可......
  • 0基础学Python——面向对象-可迭代、面向对象-迭代器、call方法、call方法实现装饰器
    0基础学Python——面向对象-可迭代、面向对象-迭代器、call方法、call方法实现装饰器、计算函数运行时间面向对象--可迭代实现方法面向对象--迭代器实现方法call方法作用call方法实现装饰器代码演示计算函数运行时间代码演示面向对象–可迭代把对象看做容器,存储......
  • 每天两个知识点 拷贝构造函数和赋值运算符重载的作用&C++模板及其类型
    1)拷贝构造函数和赋值运算符重载的作用拷贝构造函数(CopyConstructor)和赋值运算符重载(AssignmentOperatorOverload)是C++中处理对象复制和赋值的两个重要机制。拷贝构造函数:拷贝构造函数是一个特殊的构造函数,它用于创建一个新对象,并将其初始化为另一个同类型对象的副本。......
  • Java 面向对象
    初识面向对象面向对象编程本质是:以类的方式组织代码,以对象的组织(封装)数据抽象:抽取相像的地方三大特性:封装:把数据装到盒子中不让别人查看,留一个接口自己使用继承:孩子继承父母的资产多态:说同一句话每个人都表达出不同的意思。从认识论角度考虑是先有对象后有类。对象:具......