JAVA04
switch语句
- 格式:
switch(){
case:常量1
执行语句
break;
default:
执行语句
break;
}
- case满足执行case执行语句,跳出循环;否则执行default执行语句;
- 案例:输出星期几
- switch表达式类型
l jdk 0-1.4 byte short int char
l jdk1.5 byte short int char enum
l jdk1.7 byte short int char enum String(sun公司被收购后)
- case穿透
case穿透现象指的是: switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果没有break语句,那么就会从表达式的值相匹配的case标签处开始执行,一直执行到switch语句的末尾,这种从其中的一个case处开始,忽略后面的值的匹配,直接运行case的内容的现象就是穿透的现象。没有break会一直穿透执行。
switch(){
case1:
case2:
case3:
case4:
执行语句
break;
}
数组
- 一种容器用来存数据
- 数据多了存数组
- 定义规则
l 数据类型
l 容器大小
l 公式:数据类型[] 变量名=new 数据类型[存储元素的个数];
l 数据类型:存储元素的数据类型
l [ ] 表述数组
l new 创建容器的关键字
l [ ] 表示数组
l 个数:就是存储数据的个数
l 恒定数组大小,一旦确定就不能改变
l 引用类型
l 内存问题
- 操作系统管理硬件(内存)
- Jvm找系统
- 操作系统分给jvm一部分内存,由jvm管理
- JVM对自己的内存进行了划分,分成五个区域
a) 寄存器:内存和CPU之间 (和我们无关)
b) 本地方法栈:JVM完成不了的功能,JVM调用系统中的功能(目前无关)
c) 方法和数据的共享区:运行时期class文件进入的内存部分(与开发有关)
d) 方法栈:所有的方法运行的时候,进入的内存部分
e) 堆:存储的容器和对象
java开辟关闭内存空间不用自己动手关闭
c++关闭内存空间需要手动关闭
一维数组
l 数组内存问题
数组内存图:
public class ArrayDemo{
main(){
int[] arr=new int[3];
}
}
a) 首先 方法区 运行ArrayDemo.class文件
b) 然后main进入方法栈运行,即压栈运行(先进的在底下),方法栈开辟一部分来运行main方法
c) 然后 新建数组容器 JVM在对内存里面开辟一部分空间存储数组容器并按照内存大小平均分,每一数据在内存中有内存地址,(自动编号,最小值是0,最大值存储长度-1,自动编号即为索引,下标,角标);数组首地址就是第一个数据的地址,每一个数据的地址都是连续的;
d) 然后虚拟机将地址返回给定义的变量arr,变量arr存储的是一个地址,arr指向内存地址;
e) 打印arr :多次打印不一样因为内存随机分配
f) 打印完毕main方法结束,arr变量失效,堆里面的分配空间也失效
g)
l 数组访问公式
- 每一数据在内存中有内存地址,(自动编号,最小值是0,最大值存储长度-1,自动编号即为索引,下标,角标);
- 变量名[下标];
l Length属性
- 最大索引 Length-1;
l 数组定义方式
- 定义的同时对元素进行赋值
a) 数据类型[] 变量名=new 数据类型[] { };
Int [] arr=new inr[]{1,2,3,4,5};
b) 不允许在中括号中定义长度,否则编译失败
c) 避免后面的元素说超过或者少于定义空间,而造成的逻辑错误和空间浪费风险;
- 没有new关键字
a) 数据类型[] 变量名={};
b) 方便简单,推荐使用;
l 对元素进行赋值
Int [] arr=new int[5];
arr[1]=3;
l 总结
int[] arr=new int[5];
arr[1]=2;
int[] arr=new int[]{2};
int[] arr={2};
l 遍历数组
- for循环实现
a) for循环 一直循环次数,计数器思想
b) while 未知循环此时
- for(i=0;i<arr.length-1;i++){
输出i
}
l 异常
- 越界异常(负数索引和超序访问)
a) 编译成功
b) 运行出错(只有运行时才会使用内存加载方法并执行里面的操作,见上面的内存问题)
- 空指针异常
a) 正常现象
b) 非正常现象
赋值数组元素为nul,null为特殊常量,引用类型都可以为null,此时变量不保存此元素地址或不指向此元素地址,此时再次访问那此元素就会报空指针异常,虚拟机堆中清理此元素内存,切无法进行再次分配地址;
l 数组最值思想
- Int[] arr={1,5,8,9,3,}; (前面不可以,后面可以多一个逗号, )
Int max=arr[0];
- for(i=1;i<arr.length-1;i++){
If(max<arr[i])
{
max=arr[i];
}
}
输出max
二维数组(存储多个一维数组)
l 定义方式
- Int [] [] arr=new int[3] [4];
- 多了一个[]
- 表示:二维数组中,有三个一维数组,三个一维数组中,每个数组的长度是4
l 内存图
- 创建时,首先退内存中分配一个内存空间给二维数组,分为三个部分
- 然后再为每一个一维数组各分配一个内存空间,每个一维数组中,又分为四部分;每一个一维数组都有一个首地址,
- 二维数组里面存的是每一个一维数组的首地址
- 二维数组变量指向二维数组的首地址,即第一个一维数组的地址;
- 用二维数组定义特殊情况
l Int[] [] arr=new Int [3][];
l 此时不能用 需要 赋值二维数组 arr[0]=new int [5];…
- 简单的定义方式
a) Int [] [] arr={{1,4},{5,6},{7,8,9} };
b) 允许一维数组长度各不相同
l 遍历
- 两个for循环来进行遍历
- 外层循环遍历二位数组
- 内存循环遍历一维数组
- for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
输出arr[i][j];
}
}
练习:随机点名器
- 功能:
a) 存储全班同学姓名
b) 总览全班同学姓名
c) 随机出一个人的姓名
- 注释量达到源代码的30%
java语言的注释
程序注释是源代码的重要部分,对于一份规范的程序源代码而言,注释应该占到源代码的1/3以上。几乎所有的编程语言都提供了注释的方法,一般的编程语言都提供基本的单行注释和多行注释,java语言也不例外,除此之外,java语言还提供了一种文档注释。java语言的注释有三种
单行注释
多行注释
文档注释
- 3. re
核心词汇
英 [re?] 美 [re?]
prep. 关于
pref. 再,重新
n. 长音阶的第二音
- 方法中的选择功能实现问题
l 如果用户进行功能选择输入时,输入了规定外的其他字符时,可以利用else语句重新执行该方法,实现功能完善,前提是方法是仅作为界面展示时,否则无法进行重新执行;