首页 > 其他分享 >类的成员:方法(method)(二)

类的成员:方法(method)(二)

时间:2023-05-06 22:55:05浏览次数:25  
标签:int 成员 System public void println 方法 method out

方法的重载(overload)

概念及特点

方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。

                 参数列表不同,意味着参数个数或参数类型的不同

重载的特点:与修饰符、返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。

重载方法调用:JVM通过方法的参数列表,调用匹配的方法。

               先找个数、类型最匹配的

               再找个数和类型可以兼容的,如果同时多个方法可以兼容将会报错

示例

举例1

//System.out.println()方法就是典型的重载方法,其内部的声明形式如下:
public class PrintStream {
    public void println(byte x)
    public void println(short x)
    public void println(int x)
    public void println(long x)
    public void println(float x)
    public void println(double x)
    public void println(char x)
    public void println(double x)
    public void println()

}

public class HelloWorld{
    public static void main(String[] args) {
        System.out.println(3);
        System.out.println(1.2f);
        System.out.println("hello!");
    }
}

举例2

//返回两个整数的和
public int add(int x,int y){
    return x+y;
}

//返回三个整数的和
public int add(int x,int y,int z){
    return x+y+z;
}
//返回两个小数的和
public double add(double x,double y){
    return x+y;
}

举例3:方法的重载和返回值类型无关

public class MathTools {
    //以下方法不是重载,会报错
    public int getOneToHundred(){
        return (int)(Math.random()*100);
    }
    
    public double getOneToHundred(){
        return Math.random()*100;
    }
}

可变个数的形参

JDK 5.0 中提供了Varargs(variable number of arguments)机制。即当定义一个方法时,形参的类型可以确定,但是形参的个数不确定,那么可以考虑使用可变个数的形参。

格式:

方法名(参数的类型名 ...参数名)

举例:

//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);

//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String...books);

特点:

可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个

可变个数形参的方法与同名的方法之间,彼此构成重载

可变参数方法的使用与方法参数部分使用数组是一致的,二者不能同时声明,否则报错。

方法的参数部分有可变形参,需要放在形参声明的最后

在一个方法的形参中,最多只能声明一个可变个数的形参

案例分析:

案例1:n个字符串进行拼接,每一个字符串之间使用某字符进行分割,如果没有传入字符串,那么返回空字符串""

public class StringTools {
    String concat(char seperator, String... args){
        String str = "";
        for (int i = 0; i < args.length; i++) {
            if(i==0){
                str += args[i];
            }else{
                str += seperator + args[i];
            }
        }
        return str;
    }
}

测试代码

public class StringToolsTest {
    public static void main(String[] args) {
        StringTools tools = new StringTools();

        System.out.println(tools.concat('-'));
        System.out.println(tools.concat('-',"hello"));
        System.out.println(tools.concat('-',"hello","world"));
        System.out.println(tools.concat('-',"hello","world","java"));
    }
}

案例2:求n个整数的和

public class NumberTools {
    public int total(int[] nums){
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    }

    public int sum(int... nums){
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    }
}
public class TestVarParam {
    public static void main(String[] args) {
        NumberTools tools = new NumberTools();

        System.out.println(tools.sum());//0个实参
        System.out.println(tools.sum(5));//1个实参
        System.out.println(tools.sum(5,6,2,4));//4个实参
        System.out.println(tools.sum(new int[]{5,6,2,4}));//传入数组实参

        System.out.println("------------------------------------");
        System.out.println(tools.total(new int[]{}));//0个元素的数组
        System.out.println(tools.total(new int[]{5}));//1个元素的数组
        System.out.println(tools.total(new int[]{5,6,2,4}));//传入数组实参
    }
}

标签:int,成员,System,public,void,println,方法,method,out
From: https://www.cnblogs.com/wdh01/p/17300191.html

相关文章

  • k23_方法
    method(方法)Java中的方法是什么?简单点来说方法就是一种常用的功能,比如:你要写一个游戏程序的代码!超级玛丽之类的!超级玛丽没跳一下就需要运行一下某一段程序代码,但是你不能每次就将这个程序代码给全部写到某个程序代码的后面!这样就会显得很臃肿,代码有许多重复的!我们可以将重复的......
  • kaggle:Tweet Sentiment Extraction,提升分数的几种主要方法
    1.背景这次分享的是kaggle比赛TweetSentimentExtraction的第13名次的方法,作者主要用针对数据集进行前置处理或者是后置处理,具体原文:https://www.kaggle.com/c/tweet-sentiment-extraction/discussion/1595052.主要方法2.1RobertaModel这次比赛,大部分都是用了Roberta模型,其基础......
  • 2022最简单方法更新华为鸿蒙3.0系统HarmonyOS 3.0安装谷歌服务框架GMS谷歌应用商店Goo
    原视频:https://www.youtube.com/watch?v=AsAiuMKXOQYGbox谷歌框架官方下载地址:https://www.gboxlab.com/Gbox谷歌框架带谷歌应用商店的旧版本下载:https://www.mediafire.com/file/sj0l50pogpjwjnb/GBox-release-1.3.20.apk/file......
  • ARM平台安装Docker的方法
    转自:https://blog.51cto.com/u_11529070/3606178?b=totalstatistic1.找了一下有一个网站能够下载docker的arm的deb包可以使用网址为:https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/arm64/建议下载最新版本的包我这边下载了三个:containerd.io_1.2.6-......
  • 类静态成员函数显式具体化的编译警告
    本文描述了在定义类的静态成员函数模板的显式具体化时出现的一个编译警告问题,并在解释其原因后给出了对应的解决办法。◆问题环境:macOSMojave(版本10.14.6),clang-1001.0.46.4(-std=c++11)头文件中定义了类的静态成员函数模板的显式具体化,代码编译没有出错,但出现如下警......
  • 【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无
    问题描述开发AzureJSFunction(NodeJS),使用mssql组件操作数据库。当SQL语句执行完成后,在Callback函数中执行日志输出 context.log("..."),遇见如下错误:Warning:Unexpectedcallto'log'onthecontextobjectafterfunctionexecutionhascompleted.Pleasecheck......
  • Linux下七种文件类型、文件属性及其查看方法
    1、七种文件类型普通文件类型Linux中最多的一种文件类型,包括纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为[-]目录文件就是目录,能用#cd命令进入的。第一个属性为[d],例如[drwxrwxrwx]块设备文件块设备文件:就是存储数据以......
  • Arrays方法
    Arrays方法Arrays里面包括了一系列静态方法,用于管理和操作数组toString方法Array.toString(arr);sort排序(自然排序和定制排序)int[]arr={1,2,4,1,5,1};Arrays.sort(arr);//默认是从大到小的//可以通过Compare接口来定制排序Arrays.sort(arr,newCompare(){@Ov......
  • 一种通过注入机制获取资源的方法
    目的:从地图网站上获取瓦片文件,但直接访问图片地址显示被禁止。需要绕开这个禁止。方法:通过在页面脚本中进行注入,在加载资源的时候,直接将资源下载到本地下载文件夹中关键:1、注入方法,将原事件函数指向新变量,用自己的函数替代,并执行原函数以保证程序正常运行;2、新变量仍在原对象......
  • 前端配置化表单组件设计方法
    一、背景前端开发中涉及表单的页面非常多,看似功能简单,开发快速,实则占去了很大一部分时间。当某个表单包含元素过多时还会导致html代码过多,vue文件过大。从而不容易查找、修改和维护。为了提高开发效率及降低维护成本,下面介绍表单配置化组件的封装原理与封装方法。二、技术方案......