JavaSE相关基础知识03
Java控制语句
- 用于控制程序执行流程的语句或语句块
- 条件语句
- 循环语句
- 控制语句
if
条件语句
if (boolean exp1) {
} else if (boolean exp2) {
} else {
}
if
后的布尔表达式的真值决定了后面的代码块是否执行
true
则执行代码块 执行结束后整个if结构也随之结束false
则跳过当前代码块 向下执行
- 如果存在
else
结构 则执行else
结构中的内容 然后整个if结构结束 - 如果存在
else-if
结构 可以将else
之后的if
看做一整个另一个的if
结构 重新执行一次上面的操作
else
和else-if
都是可选结构 可以写也可以不写 但是else
一定是整个结构的最后一个结果if
结构一定是第一部分 else
和else-if
要紧贴其后
switch
条件语句
switch (int para) {
case value1:
break;
case value1:
break;
default:
}
switch
语句支持int
、枚举、String
类型(JDK7)- 当给
switch
语句传入一个值时 会在代码块中的case
字段搜寻是否存在相等的值
- 如果存在相同值 则跳转至该行继续执行
- 如果不存在相同值 有
default
行就跳转至default
行 没有就跳出整个结构 switch
语句是跳转 执行完case行后的代码不会结束 直至执行至break
语句才会跳出default
行与beak
语句都是可选的 可以不编写
for
循环语句
for(int i=0; i<10; i++) {
}
- 语法结构
for(变量初始化语句; 循环判断语句; 变量更新语句)
for
循环结构执行流程
- 首先执行初始化语句 初始化变量
- 然后进行循环判断
- 每执行完一次循环主体 会进行一次变量更新语句
- 然后继续进行循环判断 执行循环主体 如此往复 直至判断结果为假或使用其他语句跳出结构才结束
for
循环中的三个语句可以不写 但是;
必须存在 例如 for( ; ; )
代表一个死循环
while
循环语句
while (boolean exp) {
}
while
循环只根据判断表达式决定是否继续循环 条件更新手段需要自行在循环体中定义- 表达式为真就继续执行 为假就跳出结构
do..while
循环结构
do {
} while (boolean);
do...while
循环会先执行一次do
中的代码块 然后才进行循环判断- 无论表达式真值为何
do
代码块一定会执行 do...while
循环体最少执行一次循环- 注意:
while();
中的;
continue
break
控制语句
continue;
break;
- continue语句用于循环结构中 当执行至continue语句时 循环结构会中止该轮循环 直接开启下一轮循环
- break语句用于跳出结构
- 例如 switch语句可以跳出switch结构 用在循环中则是终止整个循环结构
- break语句和标签搭配可以用于跳出多层循环
label1: for(int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(i==5)
break label1;
}
}
Java程序的基本执行与简单的JVM
- Java程序的执行
- 编译阶段
- 编译器只检测程序的语法错误 没有语法错误则编译通过
- 运行阶段
- 程序实际在JVM中运行时 需要根据具体运行时的对象具体分析
- JVM在有三个主要的区域
- 堆内存
- 用于存储实例化后的实例变量
- 由于Java屏蔽了指针 不能像C/C++一样直接操控指针去访问堆内存中的内容 Java中需要使用引用去访问
- 引用数据类型的变量内部其实存储的是一个内存地址 指向了堆内存中的区域
- 只要是引用数据类型 内部具体的值都在堆内存中
- 栈内存
- 即程序栈 这是变化最频繁的一个区域
- 当方法被调用时
- 会从方法区复制代码到栈内存中 并为使用的局部变量分配内存空间
- 方法调用的过程称作压栈
- 当方法执行结束时
- 方法区
- 方法区是最先存在数据的区域
- 当类被加载至内存时
- 会将方法全部加载到方法区中等待调用 静态变量也会被载入至方法区
- GC垃圾回收机制 (简单描述)
- GC垃圾回收器主要关心对堆内存的回收
- 当堆内存中的数据没有引用指向时 GC会将其视为垃圾数据 这时GC会尝试将其回收
- 但是GC启用的时间不确定 可以使用
System.gc()
方法通知GC启动(可能不启动 只是通知一下)