0803
常规的死循环
while(true){
System.out.println("xxx");
}
for(; ;){
System.out.println("xxx");
}
循环的嵌套
1、三种循环都可以相互嵌套
2、执行规律:外层循环一次,内层循环一轮
3、语法:一个完整的循环结构嵌套着另外一个完整的循环结构
数组
解决多个变量来记录同一种类型的数据麻烦的情况
数组就是一个容器,也就是一个特殊的变量
特点:
数组是引用数据类型
数组可以存多个同类型的数据
数组长度在运行期间不可改变
初始化数组
动态初始化:
数据类型 [] 数组名称 =new 数据类型 [数据长度];
数据类型:表示数组存的是同一种数据类型
[]:表示其是数组
new:表示开辟空间
数据类型:与前面的数据类型一定要一致
数据长度:表示数组的容量
注意点:
动态初始化必须给其长度
数组的类型可以是引用数据类型,也可以是基础数据类型
数组只初始化都会有默认的值
三要素
数组的:数据类型、名称、长度
静态初始化:
1、 int [] money=new int [] {88,128,268,228};
2、 int [] money={88,128,268,228};
注意点
静态初始化不需要给其长度
静态初始化时根据具体的值来推算其长度
大括号里以逗号来分割
数组里的值
1、通过数组下标(索引)来取其值
2、索引是从0开始的
3、索引永远比其长度小1
4、如果直接输出的是数组的名称,获取数组的内存地址的哈希值(16进制)
5、获取数组里的具体值
数组的名称 [下标]
6、获取数组的长度
名称.length
java的分块
栈
都是局部变量
局部变量包含两部分:方法里的参数;方法里的变量
只要离开作用域,栈里就没有值
所有的方法的执行都是在栈内
所有方法里的变量都是随着方法的开始而开始,方法的结束而结束(除了静态变量)
堆
只要是new出来的东西都是在堆里
所有堆里的数据都有一个内存,这个地址是十六进制的
所有存在堆里的基础数据类型或者引用数据类型都有默认值
int 0
double 0.0
String null
char \u0000 (类似于 "")
方法区
class 字节码的信息
方法里的基本信息(比如方法名)
本地方法栈
系统
寄存器
cpu
数组的内存分析:
数组创建的时候,都会在栈与堆里面有同样一个地址,所有的赋值取值操作都是通过栈里面的地址,去找堆里的地址进行赋值或取值。
赋值的方法:
1、直接赋值
2、通过循环来赋值
数组常见的错误:
1. ArrayIndexOutOfBoundsException : 数组下标越界
2. java.lang.NullPointerException : 空指针异常
作业
数组的定义:
若是引用型String,在赋值时每个值都要加""
若是字符型char,在赋值时每个字符要加’'
冒泡排序:
在if的执行操作里面,数组arr[]下标不能是 i,必须更换为 j 。
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
if (arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
插入一个字母时,找到其位置后,先将后面位置的元素向后移位,在移位的循环外再把新字母插进去。不可把插入新字母的代码放入移位的循环里面!!!!!