何为方法

Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题步骤的有序组合

  • 方法包含于类或对象中

  • 方法在程序中被创建,在其他地方被引用

设计方法的原则:

方法的本意是功能块,就是实现某个功能的语句块的集合。我们的设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。

package com.xiaoming.method;

public class Demo01 {
   //main 方法
   public static void main(String[] args) {
    // int sum = add(1,2);
    // System.out.println(sum);
       test();

  }
   //加法
   public static int add(int a,int b){
       return a+b;
  }

   public static void test(){

       for (int i = 0; i < 1000; i++) {
           if (i % 5 == 0) {
               System.out.print(i + "\t");
          }
           if (i % (5 * 3) == 0) { //每行
               System.out.println();
               // System.out.print("\n");
          }
      }

  }
}

方法的定义

Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:

方法包含一个方法头和一个方法体。 下面是一个 方法的所有部分:

  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。

  • 返回值类型:方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行需要的操作,但没有返回值。在这种情况下,returnValueType是关键void。

  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。 驼峰规范

  • 参数类型:参数像一个占位符。当方法被调用时,传递给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数个数。参数是可选的,方法可以不包含任何参数。

  • 形式参数:在任何方法被调用时用于接收外界输入的数据。

  • 实参:调用方法时实际传递给方法的数据。、

  • 方法体:方法体包含具体的语句,定义该方法的功能。

修饰符 返回值类型 方法名(参数类型 参数名){

...

方法体

...

return 返回值;

}

方法调用

调用方法:对象名.方法名(实参列表)

当方法返回一个值的时候,方法调用通常被当成一个值。例如:

int larger = max(30,40);

如果方法返回值时void,方法调用一定是条语句。

System.out.println(" ");

package com.xiaoming.method;

public class Demo02 {
   public static void main(String[] args) {
       int max = max(10,10);
       System.out.println(max);

  }

   //比大小
   public static int max(int num1,int num2){

       int result = 0;
       if(num1==num2){
           System.out.println("num1==num2");
           return 0; //终止方法
      }
       if(num1>num2){
           result = num1;
      }else{
           result =  num2;
      }

       return result;

  }
}

值传递和引用传递:

Java是值传递

值传递和引用传递的区别:1、值传递方法调用时,实际参数把它的值传递给对应的形式参数;2、引用传递方法调用时,实际参数是对象或数组,这时实际参数与形式参数指向同一个地址。

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

方法的重载

重载就是在一个类中,有相同的函数名称,但参数类型不同。

方法重载的规则:

  • 方法名称必须相同

  • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)

  • 方法的返回类型可以相同也可以不同

  • 仅仅返回类型不同不足以成为方法的重载

现实理论:

方法名称相同时,编译器会根据调用方法的参数个数、参数类型等逐个匹配;以选择对应的方法,如果匹配失败,则编译器报错。

package com.xiaoming.method;

public class Demo02 {
   public static void main(String[] args) {
       double max = max(10.0,20.0);
       System.out.println(max);

  }
   public static double max(double num1,double num2){

       double result = 0;
       if(num1==num2){
           System.out.println("num1==num2");
           return 0; //终止方法
      }
       if(num1>num2){
           result = num1;
      }else{
           result =  num2;
      }

       return result;

  }


   //比大小
   public static int max(int num1,int num2){

       int result = 0;
       if(num1==num2){
           System.out.println("num1==num2");
           return 0; //终止方法
      }
       if(num1>num2){
           result = num1;
      }else{
           result =  num2;
      }

       return result;

  }
}

命令行传参

有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

注意 编译时候要用cd../返回到src

可变参数

  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法

  • 在声明方法中,指定参数类型后加一个省略号(...)

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

package com.xiaoming.method;

public class Demo04 {
   public static void main(String[] args) {
       Demo04 demo04 = new Demo04();
       demo04.text(1,2,3,4,5,45);
  }
   public  void text(int...i){
       System.out.println(i[0]);
       System.out.println(i[1]);
       System.out.println(i[2]);
       System.out.println(i[3]);
       System.out.println(i[4]);
       System.out.println(i[5]);
  }
}

递归 (重点 难点)

A方法调用B方法,我们很容易理解!

递归就是:A方法调用A方法! 自己调用自己

利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复制的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包括两个部分:

递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。

递归体:什么时候需要调用自身方法。

package com.xiaoming.method;

public class Demo06 {
   //2! 2*1
   //3! 3*2*1
   //5! 5*4*3*2*1
   public static void main(String[] args) {
       System.out.println(f(5));

  }

   public  static  int f(int n){

       if(n==1){
           return 1;  //边界条件
      }else{
           return n*f(n-1); //返回阶段 n*(n-1) // 栈   递归用于基数小的 大的会影响机器性能 能不用就不用
      }
  }
}

作业: 计算器

Day8 方法详解及递归思想.的更多相关文章

  1. CURL使用方法详解

    php采集神器CURL使用方法详解 作者:佚名  更新时间:2016-10-21   对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程 ...

  2. [荐]Js apply()和call()方法详解 - http://www.w3cfuns.com/article-5596443-1-1.html

    本帖最后由 默默DE人生 于 2013-3-19 13:22 编辑 Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文 ...

  3. Js apply 方法 详解

    Js apply方法详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  4. PHP cURL应用实现模拟登录与采集使用方法详解

    对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...

  5. Js apply call方法详解

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  6. JavaScript中数组Array方法详解

    ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...

  7. 解决C#程序只允许运行一个实例的几种方法详解

    解决C#程序只允许运行一个实例的几种方法详解 本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运 ...

  8. PHP cURL实现模拟登录与采集使用方法详解教程

    来源:http://www.zjmainstay.cn/php-curl 本文将通过案例,整合浏览器工具与PHP程序,教你如何让数据 唾手可得 . 对于做过数据采集的人来说,cURL一定不会陌生.虽然 ...

  9. Js apply方法详解,及其apply()方法的妙用

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

随机推荐

  1. 多核片上系统(SoC)架构的嵌入式DSP软件设计

    多核片上系统(SoC)架构的嵌入式DSP软件设计 Multicore a System-on-a-Chip (SoC) Architecture SoCs的软件开发涉及到基于最强大的计算模型在各种处理 ...

  2. 记 Ant Designer Vue 2.0.1 layout 丢失样式类名问题分析

    现象 <a-layout-sider /> 渲染到页面上会变成 <section class="undefined-has-sider"> 丢失了 layo ...

  3. 绘制log()函数图像,并在图上标注选定的两个点

    绘制log()函数图像,并在图上标注选定的两个点 import math import matplotlib.pyplot as plt if __name__ == '__main__': x = ...

  4. EasyExcel 框架使用-读

    EasyExcel 框架使用 官方介绍:JAVA解析Excel工具EasyExcel Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内 ...

  5. java8 函数式编程接口

    java8 函数式接口java.util.function.* @param T 入参类型 @param R 出参类型 1. Function <T,R> 例: Function<I ...

  6. IDEA骚技巧

    1. var 声明 2. null 判空 3. notnull 判非空 4. nn 判非空 5. for 遍历 6. fori 带索引的遍历 7. not 取反 8. if 条件判断 9. cast ...

  7. springboot静态资源映射规则

    一.所有/webjars/**的请求,都会去classpath:/META-INF/resources/webjars/下的目录去找资源. 二.访问/**,即访问任何资源,如果没有controller ...

  8. maven 安装、下载、配置,idea中的maven设置

    1.从Maven官网下载压缩包 2.将压缩包解压到你像放置Maven的路径,我放置在D:\0_FileSave\Maven 3.创建本地仓库  MavenRepository 在Maven解压路径下D ...

  9. 使用firefox打开网页报错——Error: no display specified

    想在linux环境下打开一个网页,环境描述:在窗口模式下,打Terminal,然后从本地服务器ssh到了另一个服务器,想执行firefox命令打开一个网页,如下 [root@pc207 ~]# fir ...

  10. 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

    文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...