- 方法
- 方法就是一段代码片段,并且这段代码片段可以完成某个特定的功能,并且可以被重复的使用
- 方法是定义在类体当中的,在一个类体当中可以定义多个方法,方法编写的位置没有先后顺序,可以随意
- 方法体当中不能再定义方法
- 方法体由java语句构成,方法体当中的代码遵守自上而下的顺序依次执行
- 方法怎么定义,语法结构
[修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; }
- 修饰符列表
- 可选项,不是必须的
- 目前统一写成:public static
- 方法的修饰符列表当中有static关键字的话,怎么调用这个方法
- 类名.方法名(实际参数列表);
- 可选项,不是必须的
- 返回值类型
- 什么是返回值?
- 一个方法是可以完成某个特定功能的,这个功能结束之后大多数都是需要返回最终执行结果,执行结果可能是一个具体存在的数据。而这个具体存在的数据就是返回值。
- 返回值类型
- 返回值是一个具体存在的数据,数据都是有类型的,此处需要指定的是返回值的具体类型
- 类型:
- java任意一种类型都可以,包括基本数据类型和所有引用数据类型
- 也可能这个方法执行结束之后不返回任何数据。java中规定,当一个方法执行结束之后不返回任何数据的话,返回值类型位置必须编写: void关键字
- 返回值类型若不是void,表示这个方法执行结束之后必须返回一个具体的数值。当方法执行结束的时候没有返回任何数据的话编译器报错。
- 返回值类型是void的时候。在方法体当中不能编写 return 值; 这样的语句。**但是要注意可以编写 return;这样的语句 **
- 只要带有return关键字的语句执行,return语句所在的方法结束【不是JVM结束,是return所在的方法结束】
- 方法名
- 只要是合法的标识符就行
- 方法名最好见名知意
- 方法名最好是动词
- 方法名首字母要求小写,后面每个单词首字母大写
- 形参列表
- 形参是局部变量 int a;double b
- 形参的个数可以是0-N个
- 多个形参之间用逗号隔开
- 形参中起决定性作用的是形参的数据类型,形参的名字就是局部变量的名字
- 实参和形参列表必须满足:
- 数量相同
- 类型对应相同
- 什么是返回值?
- 修饰符列表
- 方法怎么调用
- 方法只定义不去调用时不会执行的。只有在调用的时候才会执行
- 语法规则:《方法的修饰符列表当中有static》
- 类名.方法名(实参列表);这是一条java语句,表示调用某个类的某个方法,传递这样的实参
- 方法的修饰符列表当中有static关键字,完整的调用方式是:类名.方法名(实参列表)。有时类名可以省略,什么情况下省略呢?
- 方法1和方法2在同一个类体中的时候,方法1调用方法2,类名可以省略不写
- 深入return语句
- 带有return关键字的java语句只要执行,所在的方法执行结束
- 在同一个作用域当中,return语句下面不能编写任何代码,因为这些代码永远都执行不到,所以编译报错
- (String[] args) : 形式参数列表,其中String[] 是一种引用数据类型,args是一个局部变量的变量名。所以以下只有args这个局部变量的变量名是随意的.
在一个java源文件当中只定义一个class,比较清晰 - note:
- 方法的返回值类型不是void的时候
- 返回值类型不是void的时候:要求方法必须百分百的执行“return 值;”这样的语句来完成值的返回,没有这个语句编译器会报错
- 一个方法有返回值的时候,当我们调用这个方法的时候,方法返回了一个值。对于调用者来说,这个值可以选择接收,也可以选择不接收。
- 调用方法,方法名后边要带括号
- 在返回值类型是void的方法当中使用 return;语句。return;语句出现在返回值为void的方法当中主要是为了终止方法的执行
- 返回值类型是void,不能返回值
- 方法的返回值类型不是void的时候
- 方法在执行过程当中,在JVM中的内存是如何分配的,内存是如何变化的?
- 方法只定义,不调用,是不会执行的。并且在JVM中也不会给该方法分配“运行所属”的内存空间
- 在JVM内存划分上有这样三块主要的内存空间
- 方法区内存
- 堆内存:主要存储局部变量
- 栈内存
- 关于“栈”数据结构
- 栈:stack,是一个数据结构
- 数据结构反映的是数据存储形态
- 数据结构是独立的学科,不属于任何编程语言的范畴,只不过在大多数编程语言当中需要使用数据结构
- 常见的数据结构
- 数组
- 队列
- 栈
- 链表
- 二叉树
- 哈希表/散列表
- 。。。。。。。
- 关于栈
- 栈帧永远指向栈顶元素
- 栈顶元素处于活跃状态,其他元素静止
- 术语
- 压栈/入栈 push
- 弹栈/出栈 pop
- 栈数据结构存储数据的特点:
- 先进后出,后进先出
- 方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配?
- 方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放到了方法区当中。所以JVM中的三个主要的内存空间中方法区内存最先有数据,存放了代码片段
- 代码片段虽然在方法区内存当中只有一份,但是可以被重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。
【栈内存中分配方法运行的所属内存空间】 - 方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动作,方法执行结束之后,会给该方法分配的内存空间全部释放,此时发生弹栈动作。
- 压栈:分配空间
- 出栈:释放该方法的内存空间
- 局部变量在“方法体”中声明。局部变量运行阶段内存在栈中分配
- 重点:方法调用的时候,在参数传递的时候,实际上传递的是变量中保存的那个“值”传过去了。
- 方法重载机制
- 不采用的弊端:
- 调用方法时的不方便,程序原需要记忆更多的方法,才能完成调用
- 代码不美观
- 采用的好处
- 功能虽然不同,但是相似,可以让程序员使用这些方法的时候像在使用同一个方法一样,这样程序员以后编写代码比较方便,也不需要记忆太多的方法名,代码也会美观。
- 前提:功能相似的时候,方法名可以相同。但是,功能不同的时候,尽可能让这两个方法的名字不同
- 方法重载
- 方法重载:overload
- 什么时候考虑使用方法重载
- 功能相似的时候,方法名可以相同。但是,功能不同的时候,尽可能让这两个方法的名字不同
- 什么条件满足之后构成方法重载
- 在同一个类当中
- 方法名相同
- 参数列表不同,只要有一个
- 数量不同
- 类型不同
- 顺序不同
- 方法重载和什么有关系,和什么没有关系
- 方法重载和方法名+参数列表有关系
- 方法重载和返回值类型无关
- 方法重载和修饰符列表无关
- 不采用的弊端:
- 方法递归调用
- 什么是递归
- 方法自身调用自身
- 递归是很耗费栈内存的,递归算法可以不用的时候尽量别用
- 会出现栈内存溢出错误— java.lang.stackoverflowerror。只有一个结果,就是JVM停止工作
- 递归必须有结束条件,没有结束条件一定会发生栈内存溢出错误
- 递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内存溢出错误,因为递归的太深了
- eg
- 求和运算,阶乘运算
- 什么是递归
java学习笔记003
最新推荐文章于 2024-10-08 21:30:52 发布