文章目录
方法的定义
1.语法
访问修饰符 返回值类型 方法的名称(参数列表) {
方法体;
retrun 返回值;
}
2.解释
-
访问修饰符: public static
-
返回值类型: 返回值可以是基本数据类型 也可以是引用数据类型
-
方法的名称: 驼峰命名 通俗易懂
-
参数列表: 执行方法体需要的原料
-
方法体: 方法执行的具体的逻辑 retrun
-
返回值: 执行方法体之后 具体的产出物
3.方法的调用
- 1.格式:直接通过方法名来进行调用 例如 getMax(2,3);
- 2.方法调用语法的解释
- 3.总体的特点:方法必须调用才能执行
- 4.方法调用的方式:直接调用 打印调用 赋值调用
调用方式 | 代码 | 使用场景 |
---|---|---|
直接调用 | prin() | 只用执行操作,不需要返回结果 |
打印调用 | sout(方法) | 需要查看方法返回值结果的时候使用 |
赋值调用 | int sum =getSum(10,20) | 获取方法的结果,并且需要再次使用的时候 |
4.方法的注意点
1.方法的注意事项
- A.方法定义的时候 是不能进行相互嵌套
- B.所有的方法都是平级 没有上下级关系
- C.方法调用的时候是可以相互进行调用 甚至可以自己调用自己(递归)
2.方法调用注意事项: 参数列表
- A.形参:形式的参数(象征性的参数) 在定义方法的时候使用 就是变量的声明 不同的形参需要使用逗 号来进行分割
- B.实参:实际的参数(具体的数据) 在调用方法的时候使用 就是变量的赋值 实参必须与形参的数据 类型以及顺序一致
3.返回值:
- A.return 可以用于来结束方法 还可以用于来返回具体的数据
- B.如果方法没有返回值 使用void 进行修饰 可以使用return 格式:return; 用于来结束方法
- C.如果方法有返回值 必须使用return来返回具体的数据 格式:return 数据 return数据返回值类型必须与方法定义的数据返回值类型一致
- D.方法的返回值是返回给调用者 谁调用返回给谁
5.方法的重载
1.重载的规则:
- 在同一个类 方法名相同 参数列表不同 与返回值无关
2.解释:
- A.在同一个类中:只能在一个类中定义
- B.方法名相同:方法名完全一样 包括大小写
- C.参数列表不同:参数的个数不同 或者参数的数据类型不同 与参数顺序无关
- D.与返回值无关:有无返回值都是可以
6.方法的内存图
数组
1.数组:
- 用于存储一组相同数据类型的容器
2.数组的特点
- A.存储的数据必须是相同数据类型的数据 存储的数据可以是引用数据类型 也可以是基本数据类型
- B.数组的长度的固定
3.数组动态初始化
- 1.数组动态初始化:创建数组的时候 不给其进行赋值
- 2.语法: 数组数据类型 [] 数组的名称 = new 数组数据类型[长度]
- 3.解释: 数据数据类型:数组中元素的数据类型可以是引用数据类型 也可以是基本数据类型 [] =>表示的是一个一维数组 [][]=>表示的是二维数组 数组的名称 => 表示的是栈内存的引用 =>数组的内存地址值 = 赋值操作 将堆内存的地址值 赋值给栈内存的引用 new 在堆内存中开辟空间 数据数据类型=>前后的数组的数据类型声明必须是一样的 [长度]==>指定数组的存储元素容量或者是个数
- 4.创建一个数组例子: int [] nums = new int [3];
- 5.说明: 直接打印输出数组名称 打印的数组的地址值
4.数组的操作
- 数组的操作:其实就是对数组进行赋值与取值操作 数组存取元素都是有规律 通过数组的下标 或者是索引(下标)来进行赋值取值 数组的索引的从0开始 数组索引的长度最大值 数组的长 度-1
- 数组的长度 语法: 数组的名称.length 例子:arrays.length
- 数组的赋值与取值 赋值的语法:数组的名称[索引]=数据 例子:arrays[0]=100 取值的语法:数组的名称[索引] 例子:arrays[0]
- 数组创建的时候是有默认值
- int =>0 double ==>0.0
- char =>’\u0000’ ==空格
- boolean ==>false
- 引用数据类型 null
5.数组的静态初始化
-
数组静态初始化: 数组在创建的时候 就给其进行赋值
-
语法: 数组数据类型 []数组名称 = new 数组数据类型[]{元素的罗列};
-
注意点:
A.数组数据类型后的中括号中不能指定其长度
B.元素的罗列 多个元素需要使用逗号来进行分割
C.罗列的数据的数据类型 必须与声明数组的数据类型一致
-
简写方式: 数据数据类型 [] 数组名称 ={元素的罗列} 注意点:不能进行分开 必须写在一行
6.jvm内存划分
1 .内存:编写的java的源代码文件是存储硬盘中 运行java的程序是在内存中 硬盘中的数据是永久保存 内存中的数据都是临时存储 2.jvm 将java的不同的数据存储不同的区间中 便于维护与管理(房子 厨房 客厅 卧室)
3.jvm将内存划分为五块
- 栈:所有的局部变量都是存在栈内存中 所有的方法在执行的时候 都会进栈 都会在栈内存中开辟空间 栈内存:先进后出
- 堆:所有new 的资源都会在堆内存中开辟空间 例如 new 对象 new 数组
- 方法区:所有的字节码文件 Class类加载信息 静态的资源都是存储方法区中
- 本地方法区:调用本地方法 调用 c与c++的方法 使用native都是c与c++的方法 例子:public native int hashCode();
- 程序计数器:与cpu有关 控制程序的执行 控制具体代码的执行
7.数组创建内存图
8.数组中两个引用指向同一堆内存内存图
在这里插入图片描述
9.数组中的异常
1.异常:程序运行的时候 发现错误 或者是执行的顺序与需求不匹配 都是异常 生活中:生病 迟到…
2.数组中常见的异常:数组下标越界 和 空指针异常
3.数组下标越界
A.ArrayIndexOutOfBoundsException 数组下标越界异常
B.产生原因:获取数组中不存的索引的数据 就会出现这个错误
C.解决问题:在数组中通过索引获取值的时候 会索引的范围进行判断 索引的范围 0 -数组的长度-1
4.空指针异常
A.NullPointerException 空指针异常
B.产生原因:栈内存的引用没有指向任何堆内存中地址值 但是却要从堆内存中去获取数据
C.解决问题:使用数组的之前 进行非空验证 以及长度的验证 保证数组中存在数据以及栈内存的引用指向堆内存的地址值
5.先判断是否是空指针,再判断数组长度,不能更改位置
public class Test {
public static void main(String[] args) {
int[] ints = new int[6];
ints=null;
if (ints!=null&& ints.length>0){
System.out.println("不会报空指针");
}
}
}