day_06 _方法、重载、内存划分

1 篇文章 0 订阅
1 篇文章 0 订阅

一. 方法

1. 方法目的

可以使方法中的代码重复使用。

2.方法声明

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

 	[ ]可以有多 可以没有 也可以有多个
	
1、方法修饰符列表,是可选的:
		权限的控制(四选一):public private protected 默认(不写的那个)
				static(声明静态)   abstract  synchronized , final

2、返回值类型:11中数据类型中的任意一种,或者是没有返回值时的void
3、方法名:方法名字,必须是合法的标识符(大小写字母,下划线,美元符号,数字,数字不能开头,不能使用关键字和保留字)。
	4、参数列表:可以有,可以没有,也可有多个,之间用逗号隔开即可。
			形参:形容参数,在声明方法的时候,规定应该传入什么类型的数据。
		实参:实际参数,调用方法的时候,实际传入的数据。
	5、方法体:要重复使用的代码的集合。
		5.1 如果有返回值类型,那么末尾一定要加上return 数据;
	5.2如果没有返回值类型,那么末尾就可以没有return,也可以加上,但是后面不能带上数据,只能表示终止方法的运行。

3.分类

静态方法: 类体中 使用static修饰的方法,是静态方法,类相关。
成员方法: 类体中 没有使用static修饰的方法,是成员方法,对象相关。
构造方法: 用于创建对象。

4.调用

		方法是不调用就不执行的,只有调用之后才会执行,并把结果返回到调用处。(因此方法在声明的时候,不需要考虑先后顺序)
		
    静态方法:      类名,静态方法(参数值);当前类中时,类名可以省略。
	成员方法:对象,成员方法(参数值)。
	构造方法:null
		text();
		
	public static void text(){
		for(int i=1;i<=100;i++){
			if(i%7==0){
				System.out.println(i);
			}
		}
	}
	! 方法的声明: 只管功能的实现,保证其可以使用即可。

5.return

可以终止方法的运行,还可以返回数据。

(1) 如果方法有返回值的时候,必须有return。

public static int m2(){
// 		if单分支有不执行情况,所以必须在if外在加一个return
// 		或者再else中 也添加return
// 		尽管一定会执行if中的return,外面也要加,因为编译器不知道
		if (true) {
			return 2;
		}else{
			return 1;
		}
	}
	

(2) 没有返回值的时候,可以没有return.

//	没有返回值
	public static void sum1(int a,int b){
		System.out.println(a+b);
	}

方法唯一性: 方法名和参数列表

二、重载 overload

1.定义
在同一个类中,方法名是允许相同的,这样就可以根据不同的参数找到不同的方法。

2. 方法重载的优点
相同的功能,只需记住一个名字,通过参数区分不同的方法。

// 功能相同,名字相同,根据参数列表区分,容易记忆.
		sum(2,3);
		sum(2,3.4);
		sum(2L,3);
}
public static int sum(int a, int b) {
		System.out.println(a + b);
		return 1;
	}
	public static void sum(double a, double b) {
		System.out.println(a + b);
	}

	public static void sum(long a, long b) {
		System.out.println(a + b);

	}

三、栈

1.程序

命令的集合,是可执行文件,是静态概念,保存在硬盘中。

2.进程

正在执行的程序,是动态概念,在内存中运行(按照程序的设计)。
运行起来的程序:载入到内存的可执行文件,这时,系统会开启一个进程来执行内存中的这个文件对象。
 当需要关闭这个程序时,直接结束该进程即可。

3.java中内存的划分

Java Runtime Data Area : java运行时数据区,也可以叫JVM内存。
内存被划分为5个区域 : 程序计数器,方法区/静态区,栈内存,堆内存,本地方法栈。

4、程序计数器

4.1定义 一块比较小的内存区域,可以当做是当前执行的字节码位置,分支循环,跳转,异常等等都需要依赖程序计数器。

4.2解释 内存执行的代码行号,每一个方法都有一个计数器,

方法区/静态区:
保存程序文件(class),载入内存后的那个文件,在java中就是class文件。

5、栈内存

5.1定义
一个以栈数据结构为模型的一段内存空间。

5.2栈
一个数据结构,先进后出。(下面以弹夹为例)

6、栈的构成因素:

栈空间: 以栈数据结构为模型的一段内存空间(弹夹)
栈帧:栈内存中的每一个元素(子弹)
栈底元素:第一个放入到栈空间的栈帧(第一颗放入的子弹)
栈顶元素:最后一个放入到栈空间的栈帧(最后一个放入的子弹)

7、栈操作

压栈:把栈帧放入到占空间的过程。
弹栈:把栈帧从栈空间内移出的过程。

8、堆内存

内存中用来存储数据的一部分空间。
用来保存对象(类创建的对象 )

每一个对象的空间分为三块:
	  数据部分:成员变量
	  头部:hashCode值
	  类型:保存类文件在静态区的地址

9、本地栈

比如hashCode()方法,前面有个 native(本地)声明, 当我们调用本地方法的时候,对于我们来说,和调用其他方法一样。
但是对于JVM来说,还是有区别的,因为需要一个专门的区域来存放,native是C中的关键字 。
本地方法栈 和 VM栈 结构一样。
VM栈用来执行我们的java方法服务的, 而本地方法栈是为了JVM使用native方法服务的。

10、java的执行流程

(1)、编码 : 文本编辑器,按照java的规则创建java文件。
(2)、编译:  通过javac的命令,使用java编译器对java文件进行编译,生成.class文件。
(3)、运行:  通过java命令,运行.class程序。
	(3.1) 开启虚拟机,把.class文件载入到内存中,
	(3.2) JVN自动调用class中的main方法。
	(3.3) main方法执行,JVM在栈内存中开辟main方法的栈帧。
	(3.4) 如果main方法中没有调用其他方法,则按照顺序执行main方法即可。
	(3.5) 如果main方法中调用了其他方法,如果是其他类,就需要把对应的class文件载入到静态区中。
	(3.6) 如果main方法中调用的是当前类中的方法,则不需要重新载入当前类。
	(3.7) 当main方法中调用其他方法的时候,会去栈内存中再开辟对应的方法栈帧,把对应的代码复制过去,准备执行。
	(3.8)当调用的其他方法执行完毕之后,进行弹栈,然后按照main方法中的顺序继续向下执行,直到main方法执行完毕,弹栈,JVM关闭。
public class Method_06_A {
		
	public static void main(String[] args) {
			m1();
			System.out.println("main执行了");
		}
		public static void m1(){
			m2();
			System.out.println("m1执行了");
		}
		public static void m2(){
			m3();
			System.out.println("m2执行了");
		}
		public static void m3(){
			System.out.println("m3执行了");
	}

}

11、程序的加载

静态加载:程序开始执行时,一次性的把所有相关的文件全部载入到内存中。
动态加载:程序开始执行时,先载入当前文件,需要用到其他文件时,再去单独加载。

方法调用:压栈操作 方法调用结束: 弹栈操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值