Java基础--方法

前言:介绍 Java 中方法的基本语法、分类、执行并分析参数传值。
关键字:方法、形参、实参、返回值、实例方法、静态方法、参数传值


程序引例–为什么要「方法」

public class IntroduceOfMethod {
    // 入口主方法。
    public static void main(String[] args){
        // 需求1:请编写程序,计算 100 和 200 的和
        int x = 100;
        int y = 200;
        int z = x + y;
        System.out.println(x + "+" + y + "=" + z);

        // 需求2:请编写程序,计算666和888的求和。
        int a = 666;
        int b = 888;
        int c = a + b;
        System.out.println(a + "+" + b + "=" + c);
    }
}

代码分析:需求 1 和需求 2 本质上相同,只是参与运算的数值不同,但是重复编写多行相似代码,复用性差。如果功能/业务逻辑相同,可以借助 Java 语言中的「方法」机制,简化程序。

方法

「方法」本质是一段代码片段,但这段代码重复使用以完成某个特定的功能。

方法定义在类体当中,一个类当中可以定义多个方法,方法定义没有先后顺序

方法体中不能定义方法

语法规则

Java基础--方法_第1张图片

[修饰符列表] 返回值类型 方法名([形式参数列表]){
    方法体;
}

注意:

  1. 中括号 [] 中的内容不是必须的

  2. 方法体由 Java 语句构成

  3. 方法定义后被调用才能执行其中的语句,不调用是不会执行的

返回值

一个方法执行结束之后是需要返回执行结果的,而因为结果通常是一个具体存在的数据,所以被称为返回值

返回值语句分为以下两种:

  1. 返回值是具体的数据,如:1、0.24、true等。返回值的数据类型须和方法定义中返回值类型一致

    return;
    
  2. 方法没有返回值时,返回值类型为 void,表示该方法执行结束后不返回任何结果

    return; // return语句所在的方法结束
    

关于返回值的常见报错

  1. 当返回值类型不是 void(表示方法运行结束后会返回一个具体的数据类型),然而方法运行之后却没有返回一个具体的数据类型
  2. 当返回值类型是 void(表示方法运行结束后不会返回一个具体的数据类型),然而方法运行之后返回了一个具体的数据类型
  3. 缺少返回语句

返回值的接收

当方法有返回值时,可以选择是否不接收。若不接受,返回值仍会返回,只是因为无变量接收,返回后其内存会马上释放。若接收,

需使用变量接收方法的返回值,变量的数据类型与返回值类型保持一致,如:

int a = MethodTest03.sum(100, 200);

对于没有返回值的方法,不能用变量接收,否则收到报错:错误: 不兼容的类型: void无法转换为int

方法名

遵循标识符命名规范,首字母小写,后面每个单词首字母大写(驼峰命名方式);

见名知意,一般是动词。

形式参数列表(形参)

结构:

(数据类型1 变量名1, 数据类型2 变量名2, ……)
  1. 形参的数据类型起决定性作用,变量名只要求是合法的标志符。

  2. 形参的个数是:0~N个,多个形参间用逗号 , 隔开

  3. 形式参数列表中的每一个参数都是局部变量,方法结束之后其内存释放。

  4. 需要对每一个参数进行独立的数据类型声明。例如:maxScore(int num1,int num2) 是正确的,而 maxScore(int num1,num2) 是错误的。

public static void sumInt(){}

public static void sumInt(int x){}

public static void sumInt(int x, int y){}

public static void sum(int a, int b, double d, String s){}

实参参数(实参)

向被调用的方法传递的真实数据被称为实参。

实参和形参须一一对应:类型对应相同(类型不同可以进行数据类型转换),个数相同。

方法体

方法体当中编写的是业务逻辑代码,为了完成某个特定功能。

{} 括起,以 Java 语句构成;

遵循自上而下的顺序依次逐行执行


方法分类

根据修饰符列表中有无 static 可将方法分为实例方法静态方法

实例方法

特点:修饰符列表中无 static

方法调用:必须先创建对象,再调用方法

引用数据类型 引用 = new 构造方法名();

实例方法名(实参);

使用情况:

  1. 如果方法描述行为必须由某个对象触发,那么应定义该方法为实例方法;

  2. 方法体中需直接访问实例变量,则应定义该方法为实例方法

静态方法

特点:修饰符列表中有 static

方法调用: 不需要new对象,直接调用

类名.静态方法名(实参);

负责调用的程序和被调用的方法在同一个类中,调用语句的 类名. 可以省略(类名省略默认从当前类中找方法),否则调用语句的 类名. 必须写

大部分情况下,为了调用方便,工具类中的方法都是静态的。

方法调用语句不一定要写在main方法中,只要是程序可以执行到的位置都可以调用方法


方法的执行

程序从 main 方法开始执行,main 方法由 JVM 自动调用的。

方法只有调用的时候才会执行,方法不调用是不会执行的。

注意:

在其他某些编程语言中,方法称为过程(procedure)或函数(function)。通常,带返回值的方法称为函数,返回值类型为void的方法称为过程。

定义方法声明变量两者的细微差别:定义是指被定义的项目是什么,而声明通常是指为被声明的项目指明所属的类型(分配内存空间)


参数传值

Java 中关于方法调用时的参数传递规则:将变量中保存的传过去,这个值可能是一个 Java 对象的地址值字面值

例题1–字面值

注意两处 i 的输出。

public class Test1{
	public static void main(String[] args){
		int x = 100;
		int y = x; // x赋值给y,是将x变量中保存的100这个值复制一份传给y
		
		int i = 10;
		add(i); 
		System.out.println("main ---> " + i); //10
	}


	public static void add(int i){ // i是局部变量,域是add()方法
		i++;
		System.out.println("add ----> " + i); //11
	}
}

内存分析:
Java基础--方法_第2张图片

例题2–引用

注意两处 p.age 的输出

public class Test2{
	public static void main(String[] args){
		Person p = new Person(10);
		add(p);
		System.out.println("main--->" + p.age); //11
	}
	
	public static void add(Person p){
		p.age++;
		System.out.println("add--->" + p.age); //11
	}
}


class Person{
	int age;
	//构造方法
	public Person(int i){
		age = i;
	}	
}

Java基础--方法_第3张图片

你可能感兴趣的:(#,Java,java,方法)