- 方法的基本语法:
- 关于修饰符列表
- 关于返回值类型
- 方法名
- 形式参数列表(形参)
- 方法的调用
- 类体
- main方法
- 自定义方法
- 规则
- 数据结构
- 常见的数据结构:
- jvm
- 栈
- 栈的术语
- 栈的存储特点
- 方法的执行过程
- 方法的重载机制
- 递归
- 方法的本质就是一段特定的代码片段,这段代码段可以完成特定的功能,并且可以被重复的使用
- 在Java中,方法的单词叫做Method,在C语言中,方法被叫做function
- 方法定义在类体当中,在一个类中,可以定义多个方法,方法的位置没有先后顺序
- 方法体当中不能再定义方法!!!!
- 方法体当中的方法依照顺序先后执行
修饰符列表 返回值 方法名(形式参数列表){
方法体;
}
关于修饰符列表
- 可选项,不是必须的;
- 目前统一写成:public static
- 方法中修饰符关键字中有static的时候怎么调用?
------类名.方法名(实际参数列表)
- 返回值:
就是完成方法的运算之后,所产生的结果; - 类型:
只要是需要返回数据的方法,它的返回值肯定有一个固定的类型。
这个类型只能与在方法编写的初期规定的返回值类型一致。 - 支持的返回值类型:
Java中规定的任何一种数据类型都是可以的,包括基本数据类型与引用数据类型。 - 如果没有返回值:
Java中规定,如果方法没有返回值时,返回值类型必须填写void关键字。 - 如果方法中没有void关键字,则该方法必须有返回值。
- 如何返回结果的值:
使用“return 值;”。
当返回值类型是void时,在方法体里不能使用“return 值;”这样的语句,但是可以写“return;”。
只要执行带有return关键字的语句,“return”所在的方法结束。
- 只要时合法标识符就可以;
- 方法名最好见名知意;
- 方法名最好是动词;
- 方法名的首字母小写,遵循驼峰命名法;
- 形参是局部变量;(int a; float b ;double c…)
- 形参的个数可以是0-N个;
- 多个形参之间用“,”隔开;
- 形参中起决定性作用的是形参的数据类型,形参的名字就是局部变量的名字
- 方法在被调用的时候,传递给这个方法的实际的数据的值被称为实际参数,简称实参;
- 实参列表和形参列表必须满足:
- 数量相同;
- 数据类型对应相同;
- 方法只定义不调用是不会执行的;
- 方法调用的规则(修饰符列表中有static关键字的情况下):
类名.方法名(实参列表);
(这是一条Java语句,表示调用这个类的这个方法,并传递实参)
类体- 类体中除了申明变量外不能直接编写Java语句
- 方法出现在类体当中
- public表示公开的
- static表示静态的
- void表示方法执行完成后不返回任何数据
- main是方法名
- (String[] args)是形式参数列表,其中String[]是一种引用数据类型,args是一个局部变量的变量名,所以只有args这个变量名是随意的
- 主程序需要这样固定编写,SUN公司就是这样规定的,必须这样写
- 自己定义的方法,不是程序的入口
- 修饰符列表:public static、private、protected、final
- 返回值类型:数据类型
- 方法名:最好是见名知意
- 因为main方法是一定会执行的,所以在main方法的类体里面调用方法
- 在main方法里面调用方法时,实际上main方法在这个时候已经暂停,进入到了调用的方法中
- 调用方法不一定要在main方法里面调用,但是main方法是一切程序的入口
- 方法的调用在不同的类里面必须加上“类名.” ,在同类里类名可以省略
- return语句后面的代码无法执行,所以如果在编写代码时return语句后面有代码会报错
- 方法如果只定义不调用,则不执行,jvm也不会给该方法分配运行所需的内存空间
- 数据结构反应的是数据的存储形态
- 数据结构不属于任何语言的范畴,只不过大多数编程语言都要使用数据结构
- 作为程序员需要提前精通数据结构和算法
- Java程序员在不精通数据结构和算法的情况下也可以进行程序开发,那是因为Java拥有一套强大的类库
数组 队列 栈 链表 二叉树 哈希表/散列表jvm
- 在jvm的内存划分上有这样三块主要的内存空间(除了这三块,还有其他的内存空间)
* 方法区内存
* 堆内存
* 栈内存
- stack,一种数据结构
- 栈底元素,栈顶元素
- 栈帧(永远指向栈顶元素)
- 压栈/入栈/push
- 弹栈/出栈/pop
- 先进后出;后进先出
方法中的代码片段放到了哪里?方法执行过程中需要的内存空间在哪里分配?
---------方法代码片段属于.class文件的一部分,字节码文件在类加载的时候,将其放到了方法区内存当中。所以jvm虚拟机中的三块主要存储空间中方法区里面最先有内容,存放了代码片段
-
代码片段虽然在方法区里面只有一份,但是可以被重复调用
-
每一次使用这个方法的时候,需要给这个方法分配独立的活动场所,在栈内存里面分配
-
在方法被调用之前,首先由类加载器class loader将其所在的class文件装载到Java虚拟机jvm当中
-
而后在方法调用的瞬间,会有栈内存给该方法分配运行空间,执行压栈动作,在方法调用结束后,进行弹栈操作
- 压栈:给方法分配内存空间
- 弹栈:释放该方法所占用的内存空间
-
局部变量在方法体中声明,局部变量运行过程中的内存空间在栈中分配
-
方法在变量传递的时候实际上是传递的变量的值
在一个类当中,方法相似的时候(仅参数类型不同时),可以构成方法重载,用法是将方法名写成一样的,在里面重新定义参数列表,在调用的时候就可以使用对应的方法进行运算。
-
参数列表不同:
- 数量不同
- 类型不同
- 顺序不同
-
如果参数列表数据类型都相同,只有形式参数列表不同,就可以考虑将方法名写成一样的,构成方法重载
-
方法重载只与方法名和形式参数列表有关,与返回值类型以及修饰符列表无关
- 递归的原理就是在方法的内部调用方法自身
- 递归的使用要注意会出现栈内存溢出错误,一般情况下不使用递归
- 有些问题需要用递归解决(例如索引的拷贝,但是一般情况尽量不用)



