Java基础学习之再谈方法

一、方法的重载(overload)

1.定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

"两同一不同":同一个类、相同方法名

参数列表不同:参数个数不同,参数类型不同

2. 举例

Arrays类中重载的sort() / binarySearch()

3.判断是否是重载

跟方法的权限修饰符、返回值类型、形参变量名(不是形参类型)、方法体都没有关系!

4. 在通过对象调用方法时,如何确定某一个指定的方法

方法名 ---> 参数列表

二、可变个数形参的方法

1.jdk 5.0新增的内容。允许直接定 义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可 变的实参。

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

2.具体使用:

2.1 可变个数形参的格式:数据类型 ... 变量名

2.2 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个,。。。

2.3 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载。

2.4 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。

2.5 可变个数形参在方法的形参中,必须声明在末尾。

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

public void test(String[] msg){

    System.out.println(“含字符串数组参数的test方法 ");

        }

public void test1(String book){

    System.out.println(“****与可变形参方法构成重载的test1方法****");

}

public void test1(String ... books){

        System.out.println("****形参长度可变的test1方法****");

}

public static void main(String[] args){

      TestOverload to = new TestOverload();

//下面两次调用将执行第二个test方法

    to.test1();

    to.test1("aa" , "bb");

//下面将执行第一个test方法

to.test(new String[]{"aa"});

}

具体实例代码:

public class MethodArgsTest {

        public static void main(String[] args) {

        MethodArgsTest test = new MethodArgsTest();

        test.show(12);

      // test.show("hello");

      // test.show("hello","world");

      // test.show();

        test.show(new String[]{"AA","BB","CC"});

}

public void show(int i){

}

public void show(String s){

        System.out.println("show(String)");

}

public void show(String ... strs){

        System.out.println("show(String ... strs)");

        for(int i = 0;i < strs.length;i++){//类似数组遍历

        System.out.println(strs[i]);

    }

}

//不能与上一个方法同时存在

// public void show(String[] strs){

}//可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。

// public void show(String ...strs,int i){

}//The variable argument type String of the method show must be the last parameter(报错信息)

// 可变个数形参在方法的形参中,必须声明在末尾。

}

三、方法参数的值传递机制:值传递

1.关于变量的赋值

如果变量是基本数据类型,此时赋值的是变量所保存的数据值

int m=1;int n=m; n=2;      //m=1,n=2

//如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。

Order o1 = new Order();

o1.orderId = 1001;

Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。

o2.orderId = 1002;

System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);                //1002,1002

2.方法,必须由其所在类或对象调用才有意义。若方法含有参数:

           形参:方法声明时的参数

           实参:方法调用时实际传给形参的参数值

3.Java的实参值如何传入方法呢?

Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。

形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参。

形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参。

1)形参是基本数据类型

public class ValueTransferTest1 {

    public static void main(String[] args) {

      int m=10;int n=20;

      ValueTransferTest1 test = new ValueTransferTest1();

      test.swap(m, n);

      System.out.println("m = " + m + ", n = " + n);//m=10,n=20(没有交换成功)

}

public void swap(int m,int n){

        int temp = m ;

        m = n;

        n = temp;

    }

}

main(){

    int m = 10; int n = 20;

    v.swap(m,n);swap()执行完,出栈

    sysout(m,n);              //m=10,n=20

}

swap(int m ,in n){

      int temp = m; m = n; n = temp;

      sysout(m,n);            //m=20,n=10

}

2)形参是引用数据类型

public class ValueTransferTest2 {

    public static void main(String[] args) {

        Data data = new Data();

        data.m = 10;

        data.n = 20;

    System.out.println("m = " + data.m + ", n = " + data.n);

    //交换m和n的值

    // int temp = data.m;

    // data.m = data.n;

    // data.n = temp;

    ValueTransferTest2 test = new ValueTransferTest2();

    test.swap(data);

    System.out.println("m = " + data.m + ", n = " + data.n);                                                    //m=20,n=10

  }

public void swap(Data data){

            int temp = data.m;

            data.m = data.n;

            data.n = temp;

        }

}

// 数组排序

public void sort(int[] arr) {

// 冒泡排序

    for (int i = 0; i < arr.length - 1; i++) {

      for (int j = 0; j < arr.length - 1 - i; j++) {

            if (arr[j] > arr[j + 1]) {

            // int temp = arr[j];

            // arr[j] = arr[j + 1];

            // arr[j + 1] = temp;

      //错误的:

      // swap(arr[j],arr[j + 1]);

      //正确的:

        swap(arr,j,j + 1);

                }

            }

      }

}

//错误的:交换数组中指定两个位置元素的值

// public void swap(int i,int j){

          // int temp = i;

          // i = j;

          // j = temp;

  // }

//正确的:交换数组中指定两个位置元素的值

public void swap(int[] arr,int i,int j){

          int temp = arr[i];

          arr[i] = arr[j];

          arr[j] = temp;

}

四、递归方法

递归方法:一个方法体内调用它自身。

方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执 行无须循环控制。

递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死 循环。

//计算1-100之间所有自然数的和

public int sum(int num){

    if(num == 1){

          return 1;

      }else{

              return num + sum(num - 1);

            }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351