java方法01

Java方法

在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢?

  • println() 是一个方法。

  • out 是标准输出对象。

  • System 是系统类。

这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。

那么什么是方法呢?

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

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

  • 方法包含于类或对象中

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

方法的优点

  • 1.使程序变得更简短而清晰。

  • 2.有利于程序维护。

  • 3.可以提高程序开发的效率。

  • 4.提高了代码的重用性。

<hr/>

方法的定义

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

 修饰符 返回值类型 方法名(参数类型 参数名){
  ...
  方法体
  ...
  return 返回值;
 }

方法包含一个方法头和一个方法体:

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

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

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

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

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

    img

<hr/>

方法调用

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

  • Java 支持两种调用方式,根据方法是否返回值来选择。

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

     int aa = max(30,40);

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

     System.out.println("Hello longshen!");

拓展值传递和引用传递 值传递:指的是在方法调用时,传递的是参数是按值的拷贝传递。 特点:传递的是值的拷贝,也就是传递后就互不相关了。 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的是引用的地址,也就是变量所对应的内存空间的地址。 特点:传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。java是值传递。

下面的例子演示按值传递的效果:

 public class TestPassByValue {
 public static void main(String[] args) {
  int num1 = 1;
  int num2 = 2;
 
  System.out.println("交换前 num1 的值为:" +
  num1 + " ,num2 的值为:" + num2);
 
  // 调用swap方法
  swap(num1, num2);
  System.out.println("交换后 num1 的值为:" +
  num1 + " ,num2 的值为:" + num2);
 }
 /** 交换两个变量的方法 */
 public static void swap(int n1, int n2) {
  System.out.println("\t进入 swap 方法");
  System.out.println("\t\t交换前 n1 的值为:" + n1
  + ",n2 的值:" + n2);
  // 交换 n1 与 n2的值
  int temp = n1;
  n1 = n2;
  n2 = temp;
 
  System.out.println("\t\t交换后 n1 的值为: " + n1
  + ",n2 的值:" + n2);
  }
 }

结果如下:

 /*
 交换前 num1 的值为:1 ,num2 的值为:2
  进入 swap 方法
  交换前 n1 的值为:1,n2 的值:2
  交换后 n1 的值为: 2,n2 的值:1
 交换后 num1 的值为:1 ,num2 的值为:2
 */

传递两个参数调用swap方法。有趣的是,方法被调用后,实参的值并没有改变。

<hr/>

方法的重载

  1. 方法重载就是一个类中,有相同的函数名称,但形参不同的函数。

  2. 方法的重载的规则:

    • 方法名称必须相同。

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

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

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

  3. 实现理论:

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

  • 命令行参数的使用

有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。 命令行参数是在执行程序时候紧跟在程序名字后面的信息。

 package JiChu;
 public class Demo02 {
  public static void main(String[] args) {
  for (int i = 0; i < args.length; i++) {
  System.out.println("ags["+i+"]"+args[i]);
  }
  }
 }

image-20210415103757695

  • 可变参数

    JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。 在方法声明中,在指定参数类型后加一个省略号(...) 。 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

     public static void main(String[] args) {
  printMax(34,56,4.5);
  }
  public static void printMax(int a,double... b){
  for (double v : b) {
  double c = a+v;
  System.out.println("两两相加的和为:"+c);
  }
  }
 /*
 两两相加的和为:90.0
 两两相加的和为:38.5
 */
     public static void main(String[] args) {
  printMax(34, 56, 4, 7, 43);
  }
  public static void printMax(double... numbers) {
  if (numbers.length == 0) {
  System.out.println("没有传递参数");
  return;
  }
  double result = numbers[0];
  for (double n : numbers) {
  if (n > result) {
  result = n;
  }
  }
  System.out.println("最大值为:" + result);
  }
 /*最大值为:56.0*/
  • 递归

    递归就是自己调用自己。

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

    递归结构包括两个部分:

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

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

     public static void main(String[] args) {
  int cc = f(5);
  System.out.println(cc);
  }
  // 阶乘
  public static int f(int a){
  if(a==1){
  return 1;
  }else {
  return a*f(a-1);
  }
  }
 /* 120 */

 

posted @ 2021-04-15 20:54  C_Long  阅读(321)  评论(0)    收藏  举报