java基础语法(四)--方法

方法

* 方法的基础语法

应该在java语言当中有这样的一种机制:
---某个功能代码只需要写一遍。
---要使用这个功能,只需要给这个功能传递具体的数据。
---这个功能完成后返回一个具体的结果。
这样代码就可以充分利用了,提高代码复用性、【这就是“方法” 】
方法,对应的英语单词是:Method,方法在c语言中叫做函数/Function
方法定义在类体当中,在一个类中可以定义多个方法,方法编写的位置没有先后顺序,可以随意。
方法体当中不能再定义方法

1、方法怎么定义

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

2、对以上的语法进行解释说明

	2.1   关于修饰列表
	*可选项,不是必须的
	*public ststic 【以后讲】
	*方法的修饰符列表当中有static关键字的话,怎么调用这个方法?
	------类名.方法名(实际参数列表);
	2.2 返回值类型
	*什么是返回值?一个方法是可以完成某个特定功能的,这个功能结束后大多数都是需要返回最终的执行结果,执行结果肯是一个具体存在的数据。
		而这个具体存在的数据就是就是返回值。
	*
	*返回值类型?
	返回值是一个具体存在的数据,数据都是有类型的,此处需要指定的是返回值的具体类型。
	*返回值类型都可以指定哪些类型呢?java任意一种类型都可以,包括基本数据类型和所有的引用数据类型。
	*也可能这个方法执行结束之后不返回任何数据,java中规定,当一个方法执行结束之后不返回任何数据的话,返回值类型位置必须编写:void关键字
	*返回值类型是void的时候,在方法体当中不能编写“return 值;”这样的语句。但是要注意可以编写“return ;”这样的语句。
	*只要带有return关键字的语句执行,return语句所在的方法结束。
	2.3、方法名:
		*只要是合法的标识符就行
		*方法名最好见名知意,方法名最好是动词
		*方法名首字母要求小写,后面每个单词首字母大写
	2.4、形式参数列表:简称形参
		*形参是局部变量  int a ,double b,float c,String s......
		*形参的个数可以是:0-N个
		*多个形参之间用“逗号”隔开
		*形参中起决定性作用的是形参的数据类型,形参的名字只是一个标识符,形参的名字就是局部变量的名字
		*方法在调用的时候,实际给这个方法传递的真实数据被称为:实际参数,简称实参
		*实参列表和形参列表必须满足:
		   ---数量相同
		   ---类型对应相同

3、方法怎么调用

	方法只定义不去调用时不会执行的。只有在调用的时候才会执行。
	语法规则:《方法的修饰符列表当中有static》
		类名.方法名(实参列表);//这是一条java语句,表示调用某个类的某个方法,传递这样的实参。
		有点时候“类名.”可以省略,什么情况下可以省略?
		m1(){
			m2();
		}
		m1方法和m2方法在同一个类体当中的时候,“类名.”可以省略不写
	方法的调用不一定在main方法中,可以在其他方法中。只要是程序可以执行到的位置,都可以取调用其它方法。
	方法调用的时候实参和形参要求个数对应相同,数据类型对应相同。类型不同的时候要求能进行自动类型转换。
	建议在一个java源文件当中只定义一个class,比较清晰。

一个方法有返回值的时候,当我们调用这个方法的时候,方法返回了一个值,对于调用者来说,这个返回值可以选择接收,也可以选择不接收。但是大部分情况下选择接收。

4、方法在执行过程当中,在jvm中的内存是如何分配的?

4.1、方法只定义,不调用,是不会执行的,并且在JVM中也不会给该方法分配“运行所属”的内存空间。只有在调用这个方法的时候,才会动态的给这个方法分配所属的内存空间。
4.2、在jvm内存划分上有这样三块主要的内存空间:
*方法区内存
*堆内存
*栈内存
JVM内存结构
4.3、关于栈数据结构
*栈:stack,是一种数据结构
*数据结构反应的是数据的存储形态
4.4、方法执行的时候代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配?
*方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放到了方法区当中。所以JVM中的三块主要的内存空间中方法区内存最先有数据。存放了代码片段。
*代码片段虽然在方法区内存中只有一份,但是可以被重复调用。
每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。【栈内存中分配方法运行的所属内存空间】
4.5、方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作。
*压栈:给方法分配内存
*弹栈:释放该方法的内存空间
4. 6、 局部变量在“方法体”中声明。局部变量在运行阶段内存在栈中分配。在这里插入图片描述

5、方法

  • 方法执行过程中的内存分配
    注意:在EditPlus当中,字体颜色是红色的表示一个类的名字,并且这个类是JavaSE类库自带的。我们自定义的类,字体是黑色的,是标识符。
    其实JavaSE类库中自带的类,例如:String.class、System.class,这些类的类名也是标识符。只要是类名就一定是标识符。
    重点:方法调用的时候,在参数传递的时候,实际上传递的是变量中保存的那个“值”传过去了。
    5.1* 方法的重载机制 :
    5.1.1、方法重载又被称为: overload
    5.1.2、什么时候考虑使用方法重载?
    功能相似的时候,尽可能让方法名相同。【但是,功能不同/不相似的时候,尽可能让方法名不同 。】
    5.1.3、什么条件满足之后构成方法重载?
    *在同一个类当中
    *方法名相同
    *参数列表不同 --数量不同 --顺序不同 --类型不同

    5.1.4、方法重载和什么有关系,和什么没有关系?
    *方法重载和方法名+参数列表有关系
    *方法重载和返回值类型无关
    *方法重载和修饰符列表无关

5.2* 方法的递归调用
5.2. 1、什么是递归?
方法自身调用自身。
a( ){
a( );
}
5.2.2、递归是很耗费栈内存的,递归算法可以不用的时候尽量别用。
5.2.3、递归必须有结束条件,没有结束条件一定会发生栈内存溢出错误。
5.2.4、递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内存溢出错误,因为递归的太深了。
递归原理图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基础语法中,标识符是由程序员自己规定的代表一定含义的单词。标识符可以用于标识变量、方法、类等。主要注意的是,标识符不能修改,而且其中的main是一个特殊的标识符,无法自己规定。 在Java基础部分的相关知识讲解中,也包括了关于标识符的内容。 如果你想要判断一个字符串是否是合法的Java标识符,可以使用以下代码作为参考: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner reader = new Scanner(System.in); while (reader.hasNext()) { int flag = 1; String str = reader.nextLine(); char ch; ch = str.charAt(0); int len = str.length(); if (Character.isJavaIdentifierStart(ch)) { for (int i = 1; i < len; i++) { ch = str.charAt(i); if (!Character.isJavaIdentifierPart(ch)) { flag = 0; break; } } } else { flag = 0; } if (flag == 0) System.out.printf("false\n"); else System.out.printf("true\n"); } reader.close(); } } ``` 这段代码可以读取用户输入的字符串,并判断其是否是合法的Java标识符。如果是合法的标识符,则输出true,否则输出false。 希望以上内容能够帮助到你。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【零基础学Java】Day-02 基础语法--标识符](https://blog.csdn.net/qq_52681453/article/details/126020455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Java基础[02-Java基础语法1].ppt](https://download.csdn.net/download/xiaoyoupei/13206691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [2021级-JAVA02 基础语法1--标识符、常量与变量、数据类型、运算符与表达式](https://blog.csdn.net/weixin_62455462/article/details/126696523)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值