1、方法(不调用,不执行)
1.方法的定义
定义方法的两个明确:方法返回值类型和参数列表
格式:
修饰符 返回值类型 方法名 (参数1数据类型 参数1名,…){
方法体语句
return 返回值;
}
修饰符:用来限制方法的关键字,public static(目前固定)
返回值类型:用来接收方法结果的数据类型
基本数据类型(四类八种)、引用数据类型(数组、类、接口)
无参的返回值类型:void
使用void时,方法体中的return可以省略
方法执行有两个关键因素:传参和返回
传参:将实参传递给形参的过程(自定义方法要调用方法中的数据时,需要通过传参进行数据传递)
实参(实际参数):调用方法时()中的参数,实参是具体的数据值或地址值
形参(形式参数):声明方法时()中的参数,形参是声明变量类型和变量名
返回:调用自定义方法中的数据时,将自定义方法结果返回给调用方法的过程
2.方法的调用
3种方式:直接调用、输出调用、赋值调用
直接调用:同一类中,直接在main方法中输入要调用方法的方法名。
在没有返回值类型(void)的方法中,只能通过直接调用方法
输出调用:通过输出语句进行方法的调用‘
赋值调用:数据类型 变量名=方法名(参数);
在有返回值类型的情况下,方法的调用都可以使用,推荐使用赋值调用。
3.重载
同一类中(或子父类继承关系中)方法名一样,参数列表不一样
参数列表的不一样指的是:
1、参数数据类型不一样
2、参数的数量不一样
3、参数数据类型的顺序不同
与参数名无关,与参数方法的返回值类型无关
2、递归
方法自己调用自己形成的循环现象
直接递归
方法A中调用方法A
间接递归
方法A中调用方法B,方法B中调用方法C,方法C中调用方法A
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
3、for循环嵌套
for (外层循环的初始化语句;外层循环的循环条件语句;外层循环的迭代语句) {
for (内层循环的初始化语句;内层循环的循环条件语句;内层循环的迭代语句) {
内层循环的循环体语句;
}
}
4、死循环
死循环:在程序中无法通过靠自身控制终止的循环
分类:
for语句的死循环
while语句的死循环
for语句的死循环格式
for (;;) {
循环体语句;
}
while语句的死循环格式
while (true) {
循环体语句;
}
IDEA的层次结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mGJJ9Gra-1654863506390)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1654242635606.png)]
5、数组
- 数组是一种引用数据类型
- 数组当中的多个数据必须为同一种数据类型(数组中的元素支持变量的类型转换,保证内存中是同一种数据类型即可)
- 数组的长度一旦初始化,长度就不可改变
- 静态初始化的简化版不可以先声明后初始化
-
-
- 原因:静态初始化简化版直接声明初始化时,是根据数组名前面的数据类型[]在内存中申请并开辟内存空间,new 数据类型[]由JVM隐式进行提供;静态初始化简化版如果先声明后初始化,在初始化过程中无法直接获取数组名前面的数据类型[],JVM不会隐式提供new 数据类型[]
- 静态数组初始化简化版在声明初始化时,java虚拟机(jvm)会根据数组名前的数据类型[] 在内存中申请并开辟内存空间,new 数据类型[]是由jvm隐式提供的;
- 而先声明再初始化时,在初始化过程中数组名前的数据类型[] 在内存中申请并开辟内存空间,jvm不会隐式提供new 数据类型[]
-
1.数组的声明(定义)
数据类型[] 数组名;
数据类型 数组名[];
2.数组的初始化
在内存中创建一个数组,并其中赋予一些默认值
1)静态初始化(只初始化数组中的元素,不初始化数组的长度)
数据类型[] 数组名=new 数据类型[]{数值1,数值2,…};
数据类型[] 数组名={};【简化版】
通过数组静态初始化的简化版创建数组时,JVM会根据数组的数据类型在内存中申请并创建数组,new 数据类型[]由JVM在创建数组时隐式填充
数组静态初始化内存图解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccGDfPkM-1654863506392)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1654242792327.png)]
2)动态初始化(只初始化数组的长度,不初始化数组的元素)
数据类型[] 数组名=new 数据类型[数组长度];
数组的索引(索引值都是从0开始的,数组的输出通过“数组名[索引值]”),数组当中的最大的地址值为数组长度-1
获取数组中元素时,不能访问不存在的索引或错误索引,否则会发生索引越界异常(ArrayIndexOutOfBoundsException)
数组长度的动态获取:数组名.length动态获取数组长度
数组动态初始化内存图解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SMxxRo9m-1654863506396)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1654242687953.png)]
两个数组指向同一个地址值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-COLYqICS-1654863506398)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1654242816997.png)]
6、java的内存划分
JDK6.0(包含)以前
- 寄存器(程序计数器):存储和计算机硬件(CPU)相关的内容
- 本地栈内存:存储和操作系统相关的内容
- 本地方法栈:俗称"栈内存",正在运行的方法
- 堆内存:存储隐式和显式new出来的东西(凡是new出来的东西都在堆内存中)
- 方法区:存储字节码文件对象(类文件Class)
JDK7.0
- 寄存器(程序计数器):存储和计算机硬件(CPU)相关的内容
- 本地栈内存:存储和操作系统相关的内容
- 本地方法栈:俗称"栈内存",正在运行的方法
- 堆内存:存储隐式和显式new出来的东西
- 将方法区划归堆内存中
JDK8.0(包含)以后
- 寄存器(程序计数器):存储和计算机硬件(CPU)相关的内容
- 本地栈内存:存储和操作系统相关的内容
- 本地方法栈:俗称"栈内存",正在运行的方法
- 堆内存:存储隐式和显式new出来的东西
- 元空间:存储特殊值的空间
栈内存(本地栈内存):存储“正在运行的方法”的内存
1.方法中的内容会随着方法的进栈而进栈,会随着方法出栈而消失
2.方法的出栈是指在栈内存中立刻消失
3.方法进栈和出栈遵循"先进后出,后进先出"原则 *
方法区的特点:
含义:
所应用到的字节码文件对象
包含:
静态区和常量区
特点:
方法区内部已有的数据,在二次获取时不会创建新的内容,会拿已有数据进行使用 *
堆内存的特点:
含义:
存储显式或隐式new出来的内容
特点:
1.堆内存中的每块区域都有独立的地址值:16进制
2.堆内存中每块区域中的数据都有默认值
- 整数型 0
- 浮点型 0.0
- 字符型 空白字符 ‘\u 0000’
- 布尔型 false
- 引用型 null
3.在堆内存中有一个特殊的对象,该区域存储的是"垃圾回收器"
作用:
垃圾回收器类似于生活中的"扫地机器人",有规则的扫描堆内存,遇到垃圾数据进行回收
4.堆内存中每块区域在内存中消失的特点
该区域和其它内存区域没有任何的关联性时,该区域会被JVM标记为"垃圾数据",等待垃圾回收器的回收,垃圾回收器扫描到该区域时进行回收
数组的应用:
- 基本应用:不会针对数组中元素的索引位置进行任何改动的应用
- 举例:求和,求最值,…
- 高级应用:针对数组中元素的索引位置进行改变
- 举例:反转,排序
- 综合应用:和之前讲解的方法进行综合使用
- 举例:数组的动态扩容,动态删除,动态插入
133

被折叠的 条评论
为什么被折叠?



