java基础笔记

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、数组
  1. 数组是一种引用数据类型
  2. 数组当中的多个数据必须为同一种数据类型(数组中的元素支持变量的类型转换,保证内存中是同一种数据类型即可)
  3. 数组的长度一旦初始化,长度就不可改变
  4. 静态初始化的简化版不可以先声明后初始化
      • 原因:静态初始化简化版直接声明初始化时,是根据数组名前面的数据类型[]在内存中申请并开辟内存空间,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标记为"垃圾数据",等待垃圾回收器的回收,垃圾回收器扫描到该区域时进行回收

数组的应用:

  • 基本应用:不会针对数组中元素的索引位置进行任何改动的应用
  • ​ 举例:求和,求最值,…
  • 高级应用:针对数组中元素的索引位置进行改变
  • ​ 举例:反转,排序
  • 综合应用:和之前讲解的方法进行综合使用
  • ​ 举例:数组的动态扩容,动态删除,动态插入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点份炸鸡778

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值