java语法基础2:方法 的 定义与调用,内存变化,重载

  #:个人学习java的笔记记录,参考课程为动力节点的:001-课程内容介绍_哔哩哔哩_bilibili​​​​​ 

       本文适合有一定c语言基础,没有java基础的同学。因此一些与c差别不大的地方不会着重介绍

一. 方法的简介

        java中所说的方法其实就是c/c++中所说的函数,两者功能相同,在定义和使用上也有许多的相似点
        1.方法可以实现代码的复用,让代码逻辑清晰,结构简明直观
        2.一般来说,一个方法只实现一个功能

二.方法的使用

        方法的使用大致上可以分为两步,分别是定义和调用(这一点和c/c++如出一辙);一定是先有方法的定义才会有方法的调用,且一个方法被定义后可以不被调用,亦可以被调用多次。

1.方法的定义:

        方法的定义代码格式如下:

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

a.修饰符列表:可选项。目前固定写为public static。
b.返回值类型:用来指定方法返回值的数据类型(方法执行结束后的结果类型)。必须要用,若方法执行结束后不返回任何数据,则为void(空)
c.方法名:合法的标识符即可。但最好见名知意(方法通常反应行为,因此方法名一般为动词)
d.形式参数列表:简称形参。用来接收数据。参数个数0~N个。如果有多个,使用逗号隔开。(每一个形式参数都可以看做局部变量) 
e.每个方法都有方法体,方法体是一对大括号。在大括号中编写Java语句。

2.方法的调用:

        若修饰符列表中有static,则采用类名.方法名(实际参数列表)去调用

注意:
        a.调用者和被调用者在同一个类中,“类名.”可以省略。
        b.实际参数列表:简称实参,实参和形参要一一对应,个数对应,数据类型对应。
        c.调用方法后,若方法执行结束后有返回值,可以采用变量接收该返回值。也可以选择不接收。

public class Main{
	public static void main(String[] args){
		// 调用方法m1——因为m1方法和被调用的在同一个类中;因此类名是可以省略的,可以直接用方法名()调用
		Main.m1();
		// 省略 类名.
		m1();

		// 调用m2方法——因为m2和被调用的地方不在同一个类中,因此类名不可忽略,必须是用 类名.方法名()去调用
		A.m2();

		// 编译报错。
		//m2();
	}

	public static void m1(){
		System.out.println("m1方法执行了");
	}
}

class A{
	public static void m2(){
		System.out.println("m2方法执行了");
	}
}

三.方法调用时内存变化:

1.方法只定义不调用是不会分配内存的。只是方法的字节码指令存储在元空间中。
2.方法调用时会给该方法在JVM的栈内存中分配空间,此时发生压栈动作。这个方法的空间被称为栈帧(栈帧中主要包括:局部变量表,操作数栈等)
3.方法执行结束时,该栈帧弹栈,方法内存空间释放。

四。方法重载

        是编译阶段的一种机制(静态多态)

1.为什么要有方法重载:

        如果我要写一个输出函数去完成两个数之和这个操作,我整个方法的方法体都是差不多的,差别只在传入的参数可能会有所不同(如 有些是int 有些是double)。

/*
	当前代码先不使用方法重载,大家分析一下这样写的代码有什么缺点?
		缺点一:代码不美观。
		缺点二:不方便调用,程序员需要记忆更多的方法名。
*/
public class OverloadTest01{
	public static void main(String[] args){
		// 调用方法
		sumInt(10, 20);
		sumLong(10L, 20L);
		sumDouble(3.0, 2.0);
	}

	public static void sumInt(int a, int b){
		int c = a + b;
		System.out.println(a + "+" + b + "=" + c);
	}

	public static void sumLong(long a, long b){
		long c = a + b;
		System.out.println(a + "+" + b + "=" + c);
	}

	public static void sumDouble(double a, double b){
		double c = a + b;
		System.out.println(a + "+" + b + "=" + c);
	}

}

        经过上面的分析发现这样会有很多缺点,如 代码不美观 要多记忆方法名;这也就引出了我们的方法重载。

2.方法重载的使用条件:

        如果想使用方法重载,必须满足以下几个条件:

                a.在同一个类中
                b.方法名相同
                c.参数列表不同(其中 类型,顺序,个数不同都算不同 )

3.方法重载的使用:

public class Main{
	public static void main(String[] args){
		m1();
		m1("abc");

		m2(10, 20);
		m2(10L, 20L);

		m3("x", 10);
		m3(10, "x");
	}
	
	// 形参的个数不同
	public static void m1(){
		System.out.println("m1()");
	}
	public static void m1(String s){
		System.out.println("m1(String s)");
	}

    // 形参类型不同
	public static void m2(int a, int b){
		System.out.println("m2(int a, int b)");
	}
	public static void m2(long a, long b){
		System.out.println("m2(long a, long b)");
	}
    
	// 形参顺序不同
	public static void m3(String s, int a){
		System.out.println("m3(String s, int a)");
	}
	public static void m3(int a, String s){
		System.out.println("m3(int a, String s)");
	}
	
	// 以下这两个方法没有构成方法重载,而是方法重复定义了是语法错误(因为这两个只是改变了形参的名字)
	/*
	public static void doSome(int a, int b){
	
	}
	public static void doSome(int x, int y){
	
	}
	*/
}


        ​​​​​​

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值