Java语言基础
- for循环嵌套练习(具体见java_practice的代码)
打印:
一、
****
***
**
*
二、
*
**
***
****
三、
4321
432
43
4
四、九九乘法表
- 其他流程控制语句
- break :跳出,只能作用于switch语句和循环语句。(一般用if语句控制break)
break如何跳出指定循环?①将break放到指定循环下;②给for循环命名,break指定名称。
outer:for(int x=1;x<6;x++)
{
inner:for(int y=1;y<x;y++)
{
System.out.print(x);
break outer;//直接跳出外循环,这里break inner=break;因为break默认跳出最近的循环
}
System.out.println(""); //这里加个break inner;无法运行,因为超出inner循环的范围了
}
- continue:继续,作用于循环结构,(结束本次循环,继续下次循环)continue也可以指定循环名称。
for(int x=0; x<9; x++)
{
if(x%2==0)
continue;//满足if语句的条件,则不再执行continue 后面的语句
System.out.println("x="+x);
}//最后输出结果为打印奇数
函数
定义
在java中函数即方法
格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,···){ 执行语句;return 返回值;}
Tips:
- 函数名由多个单词组成时,第一个单词小写,其余都大写表示
- static为修饰符,对应public static void
- 特殊情况:功能没有具体的返回值。当出现这种情况时,返回值类型用void表示,且函数中的return语句可以省略
- 函数中只能调用函数,不能定义函数
- 除非是必要,定义的函数里面不要打印输出,输出交给调用者处理
练习
需求一:定义一个功能,判断两个数是否相等
需求二:定义一个功能,获取两个整数中较大的那个数
需求三:根据考试成绩获取分数对应的等级
内存加载
程序中要运行的函数加载到栈中,最先加入的是主函数main(),放在栈底,然后按照函数调用顺序依次加载,由栈底往上叠加,最上面的最先执行,执行后的函数将其从栈内取出,若再次调用,则再次加入,直至栈内函数全部运行完毕。(类比于弹匣和子弹的关系)
函数重载
什么叫函数的重载?
- 两个及以上的函数属于同一个类;
- 这些函数都同名;
- 各个函数的参数个数不同或参数类型不同;
- 函数重载和返回值类型无关。
数组
定义
同一种类型数据的集合,其实数组就是一个容器。
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
int[] ar = new int[3];
System.out.println(ar[1]);
//输出为0,因为数组ar中的元素还没有被赋值,默认值为0
内存空间划分
- 寄存器(供CPU使用)
- 本地方法区
- 本地区
- 栈内存
- 堆内存
栈内存
存储的都是局部变量,而且变量所属的作用域一旦结束,该变量就自动释放。局部变量都在方法里,所以方法先进栈。
堆内存
存储的是数组和对象(数组就是对象)凡是new建立的,都存在堆中。堆存实体,实体是存储多个数据的地方。
特点:
- 每一个实体都有首地址值
- 堆内存中的每一个变量都有默认初始值,根据类型的不同而不同,整数是0,小数是0.0或0.0f,boolean false,char ‘\u0000’(\u表示unicode码表,四个0表示两个字节)
- 垃圾回收机制
如下图所示:首先,new在堆内根据数据类型和元素个数创建一个实体,堆给这个实体安排一个内存地址0x0045,然后将该地址赋予栈中的数组变量arr,arr就根据该地址对实体进行操作,将null赋值给arr后,无法再进行操作。
可能引发的问题:
int[] arr = new int[3];
System.out.println(arr[3]);
//ArrayIndexOutOfBoundsException:访问数组中不存在的角标
arr = null;
System.out.println(arr[0]);
//NullPointerException:引用型变量没有任何实体指向,还在用其操作实体。