JavaSE学习-----速来速来三方法


在这里插入图片描述

java–方法

一.了解

(1)方法的本质是什么:
方法就是一段代码片段,并且这段代码片段可以完成某个特定的功能,并且可以被重复利用。
(2)方法定义在类体中,在每一个类中可以定义多个方法,方法编写的位置没有先后顺序,可以随意。但,在方法体中不能再定义方法!
(3)方法体由java语句构成,方法体中的代码遵守自上而下的顺序依次执行。

在这里插入图片描述

二.关于java语言中的方法

1.方法怎么定义 【语法结构】

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

2.对以上的语法结构进行解释说明

(2.1)对于修饰符列表

  • 可选项,不是必须的
  • 目前统一写成public static[ ]
  • 方法体的修饰符列表当中有static关键字的怎么调用:
      --类名.方法名(实际参数列表)

(2.2)返回值类型:

  • 什么是返回值?
      一个方法是可以完成某个特定功能的,这个功能结束之后大多数都是需要返回最终执行结果的,执行结果可能是一个具体存在的数据,而这个具体存在的数据就是返回值。
  • 返回值类型
      返回值是一个具体存在的数据,数据都是有类型的,此处需要指定的是返回值的具体类型。
  • 返回值类型都可以指定哪些类型呢?
      Java中的任何一个类型都可以,包含基本数据类型和所有引用的数据类型。
  • 也可能这个方法执行结束后不返回任何数据,java中规定,当一个方法执行结束之后不返回任何数据的话,返回值类型位置必须填写:void关键字。
  • 返回值类型可以是:
      byte  int  long  short  float
      double  boolean  char  string
      void  …
  • 返回值类型若不是void,表示这个方法执行结束之后必须返回一个具体的数值,当方法结束之后没有返回任何数据的话编译器报错。
  • 如何返回值?
      reture  值;
    且要求值的数据类型必须和方法的返回值一致,否则编译器报错。
    ***注意:返回值类型为void的时候,在方法体当中不能编写return值,但可以写return这样的语句。
       只要带有return关键字的语句执行,return语句所在的方法结束【不是JVM结束,是return所在的方法结束】***

(2.3)方法名

  • 只要是合法的标识符就行。
  • 方法名最好见名知意。
  • 方法名最好是动词。
  • 方法名首字母要求小写,后面每个单词首字母大写。

(2.4)形式参数列表:简称形参

  • 形参是局部变量:int a; double b;  …
  • 形参的个数可以是:0~N个
  • 多个形参之间用“逗号”隔开。
  • 形参中起决定性作用的是形参的数据类型,形参的名字就是局部变量的名字。
  • 方法在调用的时候,实际给这个方法传递真实数据被称为:实际参数(简称实参)
  • 实参列表和形参列表必须满足:
      --数量相同
      --类型对应相同
    例如:方法定义
      public static int sum(String 变量名,int 合法标识符){
    }

(2.5)方法体必须由大括号括起来,方法体中的代码有顺序,遵循自上而下的顺序依次执行,并且方法体由java语句构成,每一个java语句由“;”结尾。

在这里插入图片描述

三.方法怎么调用

  1.方法只定义不调用时是不会执行的,只有在调用时才会执行。
***语法规则:(方法的修饰符列表当中有static)
  ***
    类名.方法名(实参列表);
      这是一条java语句,表示调用某个类的某个方法,传递这样的实参。

  2.例子
例一:

/*
public表示公开的
class表示定义类
MethodTest01是一个类名
*/
public class MethodTest01{//表示定义一个公开的类,起名为MethodTest01,由于是公开的类,所以源文件名必须:MethodTest01.java
//类体
//类体中不能直接编写java语句,除声明变量之外
//方法出现在类体当中

//方法
//public表示公开的
//static表示静态的
//void表示方法结束后不返回任何数据
//main是方法名:主方法
//(String[] args)形式参数列表,其中String[]是一种引用数据类型,args是一个局部变量的变量名
//主方法就需要这样固定的编写,这是程序的入口【sun公司规定的,必须这样写】
public static void main(String[] args){

//这里的程序是一定会执行的
//main方法是JVM负责调用的,是一个入口位置
//从这里作为起点开始执行程序
//既然是这样,我们就可以在这里编写java语句来调用其他的方法
MethodTset01.sum(10,20);
	}
//自定义方法,不是程序的入口
//方法作用:计算两个int类型数据的和,不要求返回结果,但是要求将结果直接输出到控制台
//修饰符列表:public static
//返回值类型 void
//方法名 sum
//形式参数列表(int i,int j)
//方法体:主要任务是求和之后输出计算结果
public static void sum(int i,int j){
		System.out.println(i+"+"+j+"="+(i+j));
	}
}

注:方法的调用不一定在main方法中,可以在其他方法当中,只要是程序可以执行到的位置,都可以调用其他方法。

例二:

public class MethodTest02
{
	public static void sum(int a,int b){
	
		System.out.println(a+"+"b+"="+(a+b));
		
		//调用dosome方法
		MethodTest02.dosome();
 	}
 	public static void main(String[] args){
 	
   		MethodTest02.sum(1,2);
   		
   		System.out.println("Hello World!");
	}
	public static void dosome(){
	
	System.out.println("do some!");
	}

}

方法的调用:
(1)方法的修饰符列表中有static关键字,完整的调用方法是:类名.方法名(实参列表)
(2)"类名."省略后,默认从当前类中找方法,若该方法不在当前类中,则编译报错。(分清楚什么时候能省略)
(3)建议在一个java源文件只定义一个class,比较清晰。

例三:利用“套娃”深刻理解

public class MothodTest03{
	public static void main(String[] args){
			System.out.println("main begin!");
			m1();
			System.out.println("mian over!");
	}
	public static void m1(){
			System.out.println("m1 begin!");
			m2();
			System.out.println("m1 over!");
	}
	public static void m2(){
			System.out.println("m2 begin!");
			m3();
			System.out.println("m2 over!");
	}
	public static void m3(){
			System.out.println("m3 begin!");
			System.out.println("m3 over!");
	}
}

运行结果:

在这里插入图片描述


注:对于当前程序来说main方法最先被调用,main方法也是最后一个结束,最后调用方法是m3方法,该方法最先结束

3.方法的返回值不是void的时候:
(1)要求方法必须百分百执行“return 值;”这样的语句来完成值的返回,没有这个语句编译器会报错。
(2)一个方法有返回值的时候,当我们调用这个方法的时候,方法也返回了一个值,对于调用者来说,这个返回值可以选择接收,也可以不接收,但大部分情况下我们都选择接收。
4.深入return语句:
(1)带有return语句关键字的java语句只要执行,所在方法执行结束。
(2)在同一个作用域中,return语句下面不能编写任何代码,因为这些代码永远都执行不到,所以编译报错。

在这里插入图片描述

四.方法在执行过程中,在JVM中内存是如何分配的呢?内存是如何变化的呢?

  1.方法只定义不调用,是不会执行的,并且在JVM中也不会给该方法分配“运行所属”的内存空间,只有在调用这个方法的时候,才会动态的给这个方法分配所属的内存空间。

  2.在JVM内存划分上有这样三块主要的内存空间:

  • 方法区内存
  • 堆内存
  • 栈内存

  3.关于栈数据结构

  • 栈:stack,是一种数据结构
  • 数据结构反映的是数据的存储形态
  • 数据结构是独立的学科,不属于任何编程语言的范畴,只不过在大多数编程语言中要使用数据结构
  • 作为程序员要提前精通:数据结构+算法
  • java程序员在不精通数据结构和算法的前提下也能进行java开发,是因为java有一套庞大的类库支撑
  • 常见的数据结构类型:
    数组  队列  栈  链表   二叉树   哈希表/散列表

请添加图片描述


补充:关于栈内存存储机制
1.栈帧永远指向栈顶元素
2.栈顶元素处于活跃状态,其他元素静止
3.术语:
   压栈/入栈/push
   弹栈/出栈/pop
4.栈数据结构存储数据的特点是(看作是弹夹):
   先进后出
   后进先出.
从下图可以看出先压入弹匣的最后才会弹出

在这里插入图片描述

4.方法执行的时候代码片段存放在哪里?方法执行的时候内存在哪里分配?

  • 方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放在了方法区当中,所以JVM中三块主要的内存空间最先有数据,存放了代码派片段的是方法区内存空间。
  • 代码片段虽然在方法区内存中只有一份,但是可以重复被调用,每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配【栈内存中分配独立的内存空间】

5.方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动作,方法执行结束后,给该方法分配的内存空间全部释放,此时发生弹栈动作。

  • 压栈:给方法分配内存空间
  • 弹栈:释放该方法的内存空间

6.局部变量在“方法体”中声明。局部变量运行阶段内存在栈中分配

请添加图片描述


在这里插入图片描述

五.方法执行内存分析

例子:

public class MethodTest04{
	public static void main(String[] args){
			int  a = 10;
			int  b = 20;
			int  retValue = sumInt(a,b);
			System.out.println("retValue="+retValue);
	}
	public static int sumInt(int i,int j){
			int result = i+j;
			int num = 3;
			int retValue = divide(result,num);
			return retValue;
	}
	public static int devide(int x,int y){
			int z = x / y;
			return z;
	}
}

重点:方法调用的时候,在参数传递的时候,实际上传递的是变量中保存的那个“值”传过去了。

画内存分析图:1.只要涉及到参数传递的问题,传递的是变量中保存的值
           2. 画图的时候,必须遵循自上而下的顺序执行这个原则。

请添加图片描述


在这里插入图片描述

六.方法重载机制(overload)

    1.功能虽然不同,但是功能相似的时候,可以让程序员使用这些方法的时候就像在使用同一个方法一样,这样程序员以后编写代码比较方便,也不需要记忆更多方法名,代码也会很美观。

例5:

public class OverloadTest05
{
		public static void main(String[] args)
		{
    			System.out.println(sum(1,2));
    			System.out.println(sum(1.0,2.0));
    			System.out.println(sum(1L,2L));
		}
		//以下三种方法构成了方法重载机制
		public static int sum(int a,int b)
		{
   				System.out.println("sum(int,int)");
   				return a + b;
   		}
   		public static long sum(long a,long b)
   		{
				System.out.println("sum(long,long)");
				return a + b;
		}
		public static double sum(double a,double b)
		{
				System.out.println("sum(double,double)");
				return a + b;
		}
}

   2.前提:
功能相似的时候,方法名可以相同(但是功能相同/不相似的时候,尽可能让方法名不同)
   3.什么条件满足之后构成了方法重载:

  • 在同一个类中
  • 方法名相同
  • 参数列表不同:数量不同、顺序不同、类型不同

   4.方法重载和什么有关系,和什么没有关系?

  • 方法重载和方法名+参数列表有关系
  • 方法重载和返回值类型无关
  • 方法重载和修饰符列表无关

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340