返回顶部
首页 > 资讯 > 精选 >如何在java中重载方法
  • 446
分享到

如何在java中重载方法

2023-06-14 23:06:27 446人浏览 泡泡鱼
摘要

这篇文章给大家介绍如何在java中重载方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维

这篇文章给大家介绍如何在java中重载方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Java的特点有哪些

Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。2.Java具有简单性、面向对象、分布式安全性、平台独立与可移植性、动态性等特点。3.使用Java可以编写桌面应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序等。

一、带参方法

1.1 带参方法的定义和调用

之前定义的方法大部分都是无参方法,但是有些方法的执行是需要前提条件的,那么参数就是将这些前提条件传送过来
定义带参数的方法:

<访问修饰符> 返回值类型 <方法名称> (<形式参数列表>){
//方法的主体
}

调用带参数的方法

对象名.方法名(参数1,参数2,参数3…参数n);

定义榨汁机的类,输出详细信息

package Kind.dh;//定义榨汁机类public class MethodWithParameters {    //属性:颜色 价格    public String color;    public double price;    public void showInfo() {        System.out.println("这是一台" + color + "的榨汁机,价格为:" + price + "元");    }    //方法:榨汁-前提:水果 杯数-形式参数(形参):参数类型 参数名称    public void zhazhi(String fruit, int num) {        System.out.println(num + "杯" + fruit + "汁");    }}
package instance.dh;import Kind.dh.MethodWithParameters;import java.util.Scanner;public class MethodWithParametersTest {    public static void main(String[] args) {        //创建对象        MethodWithParameters methodWithParameters = new MethodWithParameters();        Scanner input = new Scanner(System.in);        System.out.println("请输入您的榨汁机的颜色:");        methodWithParameters.color = input.next();        System.out.println("请输入您的榨汁机的价格:");        methodWithParameters.price = input.nextDouble();        methodWithParameters.showInfo();        System.out.println("您想要榨什么果汁:");        String shuiguo = input.next();        System.out.println("您需要榨几杯果汁:");        int num = input.nextInt();        //这里是实际参数(实参)        methodWithParameters.zhazhi(shuiguo, num);    }}

1.2 带参方法使用注意事项

方法定义处的参数叫形式参数,方法调用处传的值为实际参数
带参方法,参数个数可以有一个,也可以有多个,多个参数之间用逗号进行隔开
带参方法,参数的名字可以随意的取,符合变量命名规则
形参和实参的名字可以不一样,但是数据类型一定要一致,顺序要一样,个数要一样
方法有没有参数和方法有没有返回值没有联系

1.3 带参方法的应用

package Kind.dh;//定义一个存放学生姓名的数组,实现添加、查找 、和显示本班的学生的信息的方法//学员信息管理系统public class Student02 {    //属性:存放学生姓名的数组    //声明学生姓名的数组    String[] names = new String[30];    //1.添加学生的姓名    public void addName(String name) {        //遍历学生姓名的数组,查询到数组中某一个元素为null则进行插入        for (int i = 0; i < names.length; i++) {            if (names[i] == null) {                names[i] = name;                break;//插入学生的姓名后退出循环            }        }    }    //2.在固定的区间内,查找某一个学生    //start:其实查找的位置    //end:结束查找的位置    //name:查找的学生姓名    public boolean searchName(int start, int end, String name) {        boolean flag = true;//是否找到了该名学生,false没找到,反之找到了        for (int i = start - 1; i < end; i++) {            if (name.equals(names[i])) {                flag = true;                break;            }        }        return flag;    }    //显示本班的学生信息    public void showNames() {        System.out.println("本班的学员列表:");        for (int i = 0; i < names.length; i++) {            if (names[i] != null) {                System.out.println(names[i] + "\t");                break;            }        }    }}
package instance.dh;import Kind.dh.Student02;import java.util.Scanner;public class Student02Test {    public static void main(String[] args) {        Student02 student02 = new Student02();        Scanner input = new Scanner(System.in);        for (int i = 0; i < 5; i++) {            System.out.println("请输入第" + (i + 1) + "个同学的姓名:");            String name = input.next();            student02.addName(name);        }        student02.showNames();        //查找某一个学生的信息        System.out.println("请输入要开始查找的位置:");        int start = input.nextInt();        System.out.println("请输入要结束查找的位置:");        int end = input.nextInt();        System.out.println("请输入您要查找的学生的姓名:");        String findName = input.next();        boolean flag = student02.searchName(start, end, findName);        if (flag) {            System.out.println("恭喜您已经查询到了学生的信息");        } else {            System.out.println("抱歉,没有查询到学生的相关信息");        }    }}

1.4 基本数据类型和引用数据类型传参时的区别

定义学生类,并实现增1操作

package Kind.dh;//学生类public class Student {    //属性:姓名 年龄 爱好    public String name;    public int age;    public String love;    //方法:输出个人信息    public void showInfo() {        System.out.println("我叫" + name + "现在" + age + "岁了" + "我的兴趣爱好是" + love);    }}
package Kind.dh;public class Demo {    public void calc1(int num) {        num = num + 1;    }    public void calc2(Student student) {        student.age = student.age + 1;    }}
package instance.dh;import Kind.dh.Student;import Kind.dh.Demo;public class DemoTest {    public static void main(String[] args) {        Demo test = new Demo();        int n = 8;        test.calc1(n);        Student student = new Student();        student.age = 18;        test.calc2(student);        System.out.println(n + "---" + student.age);    }}

运行代码发现结果是8---19,但是我们想得到的是每一个结果自增1,应该是9---19才对,这是为什么呢?这是由于参数类型的不同,如果是基本数据类型(int char double boolean float),操作传递的是变量的值,改变一个变量的值不会影像另一个变量的值。但是参数如果是引用数据类型(自定义数据类型 数组 接口),赋值时是将原对象的引用(也就是内存地址)传递给另一个引用。

基本数据类型传参:

如何在java中重载方法

引用数据类型传参:

如何在java中重载方法

1.5 方法传参-对象数组

定义学生类并赋值输出学生的成绩,定义一个修改学生的成绩的类,如果学生的的成绩小于60分则进行加2

package Kind.dh;//学生类public class Student {    //属性:姓名 年龄 爱好    public String name;    public int age;    public String love;    public int score;    //方法:输出个人信息    public void showInfo() {//        System.out.println("我叫" + name + "现在" + age + "岁了" + "我的兴趣爱好是" + love);        System.out.println(name+"的成绩是:"+ score);    }}
package Kind.dh;//操作学生的成绩public class ModifyScore {    //修改小于60分的学生成绩    public void modifyStuScore(Student[] stus) {        for (int i = 0; i < stus.length; i++) {            if (stus[i].score < 60) {                stus[i].score += 2;            }        }    }    //显示本组学生成绩信息    public void showStu(Student[] stus) {        for (Student stu : stus) {            stu.showInfo();        }    }}
package instance.dh;import Kind.dh.ModifyScore;import Kind.dh.Student;public class ModifyScoreTest {    public static void main(String[] args) {        ModifyScore modifyScore = new ModifyScore();        //定义一个学生对象的数组        Student student1 = new Student();        student1.name = "张三";        student1.score = 43;        Student student2 = new Student();        student2.name = "李四";        student2.score = 59;        Student student3 = new Student();        student3.name = "王五";        student3.score = 90;        Student[] students = new Student[3];        students[0] = student1;        students[1] = student2;        students[2] = student3;        //显示学生的信息、修改学生的成绩        System.out.println("成绩修改前:");        modifyScore.showStu(students);        modifyScore.modifyStuScore(students);        System.out.println("成绩修改后:");        modifyScore.showStu(students);    }}

二、构造方法

new一个对象的时候要用到构造函数,例如Student student1 = new Student();这时调用的是Hello的无参数构造方法
构造方法是用来完成对象的初始化的,但是通常在代码中不需要手动书写,这是因为系统提供了默认的无参的构造方法。由于构造方法也属于方法的范畴,可见构造方法也可以指定参数。

构造方法的格式如下:

访问修饰符 构造方法名 (){
//初始化代码
}

需要我们值得注意的是构造方法没有返回值类型,并且方法名和类名是相同的。有返回值类型的方法是常用的普通方法

package Kind.dh;//学生类public class Student {    //属性:姓名 年龄 爱好    public String name;    public int age;    public String love;    public int score;    //系统会自动生成一个无参构造方法        //可以在构造方法中添加参数        //可以理解为这段代码        public Student(String name, int score) {        this.name = name;        this.score = score;    }    //方法:输出个人信息    public void showInfo() {//        System.out.println("我叫" + name + "现在" + age + "岁了" + "我的兴趣爱好是" + love);        System.out.println(name + "的成绩是:" + score);    }}
package Kind.dh;//操作学生的成绩public class ModifyScore {    //修改小于60分的学生成绩    public void modifyStuScore(Student[] stus) {        for (int i = 0; i < stus.length; i++) {            if (stus[i].score < 60) {                stus[i].score += 2;            }        }    }    //显示本组学生成绩信息    public void showStu(Student[] stus) {        for (Student stu : stus) {            stu.showInfo();        }    }}
package instance.dh;import Kind.dh.ModifyScore;import Kind.dh.Student;public class ModifyScoreTest {    public static void main(String[] args) {        ModifyScore modifyScore = new ModifyScore();        //定义一个学生对象的数组        //在这里就实现了对象的初始化和赋值        Student student1 = new Student("张三", 43);//        student1.name = "张三";//        student1.score = 43;        Student student2 = new Student("李四", 59);//        student2.name = "李四";//        student2.score = 59;        Student student3 = new Student("王五", 90);//        student3.name = "王五";//        student3.score = 90;        Student[] students = new Student[3];        students[0] = student1;        students[1] = student2;        students[2] = student3;        //显示学生的信息、修改学生的成绩        System.out.println("成绩修改前:");        modifyScore.showStu(students);        modifyScore.modifyStuScore(students);        System.out.println("成绩修改后:");        modifyScore.showStu(students);    }}

代码中有这样的一段:

public Student(String name, int score) {        this.name = name;        this.score = score;    }

这里的this关键字是代指当前对象

Student student1 = new Student("张三", 43);Student student2 = new Student("李四", 59);Student student3 = new Student("王五", 90);

所谓的当前对象指的是Student类经过实例化出的student1,student2,student3。程序执行创建了student1时,this代指的是student1;创建了student2时,this代指的是student2这个对象。
如果代码中自定义了带参的构造方法后,系统不会再提供无参构造方法了

2.1 this的其他用法

this可以调用类中的普通方法和构造方法

package Kind.dh;//学生类public class Student {    //属性:姓名 年龄 爱好    public String name;    public int age;    public String love;    public int score;    //系统会自动生成一个无参构造方法        //可以在构造方法中添加参数        //可以理解为这段代码        public Student(String name, int score) {        this.name = name;        this.score = score;    }    //方法:输出个人信息    public void showInfo() {//        System.out.println("我叫" + name + "现在" + age + "岁了" + "我的兴趣爱好是" + love);        System.out.println(name + "的成绩是:" + score);    }    public void method1(){//      showInfo();        //this可以调用普通方法        this.showInfo();    }    public Student(String name,int score,int age){                //上述代码等同于        this(name, score);        this.age= age;        //需要注意的是this调用构造方法时一定要写在第一句中。    }}

三、方法重载

方法分为了普通方法和构造方法,所以方法重载也相应的分为了普通方法重载和构造方法重载

  • 构造方法重载:

方法名相同
参数项不同
和返回值、访问修饰符无关

  • 普通方法重载

需要在同一个类中
方法名相同
参数个数或者是类型不同
和返回值、访问修饰符无关

  • 实现简易计算器,分别实现两个整数、两个浮点数、三个浮点数进行相加的操作

package Kind.dh;//实现简易计算器public class Calc {    //实现两个整数相加操作    public void add(int num1, int num2) {        int sum = num1 + num2;        System.out.println(num1 + " + " + num2 + " = " + sum);    }    //实现两个浮点数进行相加    public void add(double num1, double num2) {        double sum = num1 + num2;        System.out.println(num1 + " + " + num2 + " = " + sum);    }    //实现三个浮点数进行相加操作    public void add(double num1, double num2, double num3) {        double sum = num1 + num2 + num3;        System.out.println(num1 + " + " + num2 + " + " + num3 + " = " + sum);    }}
package instance.dh;import Kind.dh.Calc;public class CalcTest {    public static void main(String[] args) {        Calc calc = new Calc();        calc.add(2, 8);        calc.add(2.3, 78.9);        calc.add(23.4, 67.8, 90.8);    }}

其实System.out.println();就是一个方法重载。

如何在java中重载方法

3.1 成员变量和局部变量

变量声明的位置决定变量的作用域,变量的作用域确定可以在程序中按照变量名称访问该变量的区域。
成员变量和局部变量的区别:

  • 作用域不同

局部变量的作用在它的方法中
成员变量(全局变量)作用在整个类中

  • 初始值不同

java会给成员变量一个初始值
java不会给局部变量赋初始值

  • 注意:

在同一个方法中,不允许有同名称的局部变量
在不同的方法中,可以有同名称的局部变量
在同一个类中,成员变量和局部变量同名称时,局部变量具有更高的优先级

package cn.zhz.Test.dh;public class Var {    //属性:这里的是成员变量 全局变量    //定义成员变量num和s    //系统默认给成员变量进行赋初始值,如果是int就是0,String就是null,double就是0.0    int num;    String s;    //在同一个类中,局部变量可以和全局变量同名称,但是同名的时候局部变量的优先级会更高一些    int var = 9;    //方法:这里的是成员方法    public void m1() {        //这里的a的作用域在m1中        int a = 1;        for (; a <= 5; a++) {            System.out.println("hello");        }    }    public void m2() {        //这里的a的作用域在for循环中        for (int b = 1; b <= 5; b++) {            System.out.println(b);        }    }    public void m3() {        System.out.println(num);        System.out.println(s);    }    //参数也是一种变量,它做的是局部变量    public void m4(int num) {        System.out.println("num = " + num);    }    public static void main(String[] args) {//        //可以通过扩大a的变量范围来解决,此时a的作用域在main方法中//        int a = 0;//        for(;a <= 4;a ++){//            System.out.println("hello");//        }//        System.out.println(a);//系统会找不到变量a    }}

关于如何在java中重载方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在java中重载方法

本文链接: https://lsjlt.com/news/276042.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在java中重载方法
    这篇文章给大家介绍如何在java中重载方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维...
    99+
    2023-06-14
  • 怎么在java中实现重载方法
    本篇文章给大家分享的是有关怎么在java中实现重载方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,...
    99+
    2023-06-14
  • 怎么在java中实现方法重载
    今天就跟大家聊聊有关怎么在java中实现方法重载,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2...
    99+
    2023-06-14
  • Java在重载中如何使用Object
    小编给大家分享一下Java在重载中如何使用Object,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在重载中使用ObjectJAVA中调用重载方法都是先匹配同类型...
    99+
    2023-06-29
  • 如何在Go语言中实现方法重载
    go 语言中不支持方法重载,但可以使用接口模拟。方法重载步骤:1. 创建包含所有可能签名的接口;2. 实现具有不同签名的多个方法,实现该接口。 如何在 Go 语言中实现方法重载 方法重...
    99+
    2024-04-03
    go语言 方法重载
  • java中方法重载什么?
    java中方法重载什么?方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同。好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。这里需要注意的是参数不同需要满足2个条件,一个是参数的个数不同,一个是参数个数相...
    99+
    2016-06-21
    java教程 java 方法重载
  • 如何重载 golang 方法?
    go 允许通过方法集在同一个类型中重载方法,即定义具有相同名称但参数不同的多个方法。方法集必须包含在接口中,方法名称相同,参数类型不同,返回值类型可以相同或不同。例如,point 类型可...
    99+
    2024-04-27
    golang 方法重载
  • java重载方法的参数如何设置
    这篇文章主要介绍“java重载方法的参数如何设置”,在日常操作中,相信很多人在java重载方法的参数如何设置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java重载方法的参数如何设置”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Java方法重载和方法重写的区别到底在哪?
    方法重载和方法重写的区别 方法重载 方法重载的主要是在一个类当中,方法的方法名相同,参数列表不同,返回值类型可以相同,也可以不同. public class Demo{ pu...
    99+
    2024-04-02
  • java中出现方法重载的无效如何解决
    java中出现方法重载的无效如何解决?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2...
    99+
    2023-06-14
  • Java中方法重写与重载的区别
    目录一、重写(Override)二、重载(Overload)三、总结Java方法重写(Override)与重载(Overload)的区别(超详细) 首页在我们要学习这个知识点之前,应...
    99+
    2024-04-02
  • JAVA中方法重载有什么用
    这篇文章将为大家详细讲解有关JAVA中方法重载有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在Java 中,同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况...
    99+
    2023-06-03
  • Java中方法重写和方法重载的6个区别
    一、定义 方法重载(Overloading):在同一个类中,方法名相同但参数类型、参数个数不同的方法之间的关系。 方法重写(Overriding):在子类中,有相同的方法名、参数类型、参数个数并且返回类型兼容的方法称之为...
    99+
    2023-10-29
    方法 重写 区别
  • 如何在 golang 中重写方法?
    go 中的重写方法允许在派生类型中为基类型方法提供新的实现,而无需修改基类型:语法:func (t tiporicevente) nomemetodo(parametri...) tip...
    99+
    2024-04-26
    golang 重写方法
  • 如何在Java中使用equals()方法实现重写
    如何在Java中使用equals()方法实现重写?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java中equals()方法重写实现代码  Java中的equals(...
    99+
    2023-05-31
    java equals() 重写
  • 【JAVA】带你认识java方法|java中的方法&方法中的重载和递归
    作者主页:paper jie的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将jav...
    99+
    2023-08-31
    java 开发语言
  • 深入浅析Java中重写与重载方法有何不同
    深入浅析Java中重写与重载方法有何不同?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值...
    99+
    2023-05-31
    java 重写 重载
  • java中如何重写一个方法
    方法的重写:在子类中可以根据需要对从基类中继承来的方法进行重写。重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。重写方法不能使用比被重写的方法更严格的访问权限。在线视频教程分享:java在线视频示例如下:class Per...
    99+
    2017-12-16
    java入门 java 重写 方法
  • 详解Java中方法重写和方法重载的6个区别
    目录1.方法重写1.1 基本用法1.2 使用场景1.3 注意事项2.方法重载2.1 基本使用2.2 使用场景2.3 注意事项3.方法重写 VS 方法重载总结方法重写(Override...
    99+
    2024-04-02
  • Java中方法与方法重载的区别有哪些
    本篇文章给大家分享的是有关Java中方法与方法重载的区别有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法:Java的方法类似与其他语言的函数,是一段用来完成特定功能的代...
    99+
    2023-05-31
    java 方法重载 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作