目录
一.方法
1.1概述和作用
一堆代码的集合,可以重复使用
1.使程序变得简洁更清晰
2.有利于程序维护
3.提高开发效率
4.提高代码重复性/复用性
1.2方法声明
[修饰符列表] 返回值类型 方法名(参数列表){方法体}
[]:0-n个
1.方法修饰符列表,是可选的:
权限控制:public private protected,默认(不写)
static(声明静态),abstract,synchronized,finall
2.返回值类型:11中数据类型的任意一种,或者是void
3.方法名:合法的标识符即可(大小写字母,下划线,美元符号,数字,数字不能打头,不能使用关键字和保留字)
4.参数列表,可以有,可以没有,可以有多个,过个之间使用逗号隔开
形参:形容参数,在方法声明的时候,规定传入什么类型的数据
实参:调用方法的时候,时间传入的数据
5.方法体:要做的事情,代码的集合
如果有返回值类型,那么方法体中,最后一条语句必须写return 数据;
如果没有返回值类型,那么方法体中可以没有语句,如果要加return语句,那么return之后不能有数据
只能写return;.此时return只有终止方法运行的作用.
1.3方法的分类
静态方法:使用static关键字修饰的方法.类相关
成员方法没有使用static关键字修饰的方法.对象相关
构造方法用于创建对象
静态方法
public static void test(){}
成员方法
public int test(){}
构造方法(没有返回值,方法名和类名一样)
public Test(){}
1.4方法的调用
方法不调用不执行,调用才执行,并把结果返回到调用处
1.静态方法:类名.静态方法名(参数值);
2.成员方法:对象.成员方法(参数值)
3构造方法:使用new关键字调用
1.5返回值
1如果方法有返回值,必须有return
2 如果方法没有返回值,可以没有return
注意:return语句的后面不可以有语句
1.6方法的重载
方法重载:overload
方法名相同,参数列表不同(个数或者类型不同)
在同一个类中,方法名是允许相同的,可以根据方法名和参数列表来确定一个方法
例子:
public static void sum(int a,int b){
System.out.println(a+b);
}
public static void sum(double a,double b){
System.out.println(a+b);
}
public static void sum(byte a,byte b){
System.out.println(a+b);
}
注意:只考虑方法名和参数列表
作用:记忆方便,代码简洁
二.内存划分
程序:一堆命令的集合,是可执行文件,并且是个静态概念,一般保存在硬盘中
进程:就是正在执行的程序,是个动态概念,会按照程序设计,一步步在内存中执行
java中的内存划分:
java Runtime Data Area: java运行时数据区,也可以叫jvm内存
内存被划分为5个区域:程序计数器,方法区/静态区,栈内存,堆内存,本地方法栈
2.1程序计数器:
是一块比较小的内存区域,可以看做是当前执行的字节码位置,分支,循环,跳转,异常等都需要依赖程序计数器,可以理解为保存执行的代码行号,每个方法都会有一个计数器,否则不知道返回值要返回到哪里
2.2.方法区/静态区
保存我们的程序文件(class),载入内存后的那个文件,java中就是calss文件
包括方法,还有代码段,内部的运行常量池
2.3栈内存
虚拟机栈/VM栈/栈内存
方法是在栈内存中执行的,包括局部变量也是在栈内存
栈内存:就是一个以栈为数据结构模型的一段内存空间
栈:先进先出,比如弹夹
栈的构成:
栈空间:就是指以栈数据结构为模型的于丹内存空间
栈帧:栈内存中的每一个元素
栈底元素:最先入栈的元素
栈顶元素:最后入栈的元素
栈操作:
压栈:元素入栈的操作
弹栈:元素出栈的操作
2.4堆内存
用来存放对象
每个对象的空间分为3块:
1.数据部分:成员变量
2.头部:hashCode值
3.类型:保存类文件在静态区的地址
2.5本地栈
为虚拟机执行使用到的Native方法服务,本地方法栈 和 VM栈 结构一样
2.6java内存模型图解
比较详细的地址点击这里