该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
day4:Random类和数组(引用类型)
1.Random类讲解(随机数)
——Random 的使用步骤:
-1.导包:java.util.Random;
-2.创建对象
-3.调用nextInt(int n);方法
——格式:Random rnd = new Random();
——int d = rnd.nextInt(10);~0-9的随机数。
——生成随机数后,可以强转成char,即验证码案例。
2.猜数字游戏讲解
——三步骤生成一个1-100的随机数
——创建键盘输入对象
——while(true){};死循环体判定输入的值与随机数的大小,大了提示大了,小了提示小了,直到相等的时候提示,您猜对了,并结束循环。
3.数组概念介绍和定义格式
——定义:
A.任何已有的类型,添加一组方括号就变成数组类型。;数组元素的类型,是数组类型去掉一组方括号。
B.格式:
数组中要保存的数据类型[] 数组名 =new 数组中要保存的数据类型[数组长度];
——创建数组对象(数组初始化)
A.静态初始化。
-1.常用写法:new 类型[]{元素1,元素2,元素3,……};
不指定长度,只指定每个元素
-2.静态初始化简化语法:{元素1,元素2,元素3……}只能在定义数组变量指定初始值的时候使用。(不建议使用)。
B.动态初始化
new 类型[n];
只指定长度,不指定元素。
——使用数组:
A.数组都有一个length属性,还属性返回数组的长度。(数组一旦创建,其长度是固定的,"堆内存中的数组对象长度不变,但是引用型变量可以指向另外一个数组")
B.每个数组元素,就相当于一个变量。数组元素的类型,就是数组类型去掉一组方括号。访问数组元素:
数组变量[索引]--索引从0开始。
4.数组的好处
——一次性在内存中开辟多个空间
——可以对多个空间统一管理
——每个定义好的数组,每个空间都有唯一的编号,我们操作数组的时候,需要通过该数组的统一名称和对应的下标来操作数组中的每个空间。
——数组的下标从0开始,到(长度-1)结束。如果操作的下标不在这个范围内,下标越界程序报错。
——数组有.length属性,可以获取数组长度。
5.java内存分配介绍
——java程序必须要使用虚拟机才能运行
——命令窗口java -Xms256m -Xmx1024m
设定堆内存初始内存大小,最高内存大小。
——堆(heap)内存:java虚拟器启动时分配的一块永久的,很大的内存区。(说明堆是和虚拟机关联的)
——栈(stack)内存:
a.每次方法运行分配一块临时、很小的内存区。(说明栈是和方法关联的)
b.每个方法都有自己对应的栈区,方法结束时,对应的栈区就会被回收。
——在方法中定义的、局部变量(不管什么类型),都放入对应的方法栈
——new出来的东西(对象),都在堆内存。
堆内存中的对象,如果没有引用变量指向它,那它就成了垃圾,等待VM(虚拟机)的垃圾回收器来回收它。
——变量赋值区别:
a.基本类型变量赋值:直接将该值存入变量所在内容
b.引用类型的赋值:将该对象所在的第一个内存单元的编号(内存地址)存入变量。
6.数组内存分配
——引用数据类型保存的是地址,遇到new就是在堆内存中开辟空间,堆内存中的变量有默认初始值。
7.数组越界异常
——使用的下标index超出数组长度,就会导致ArrayIndexOutOfBoundsException(数组索引越界异常);
8.空指针异常
——数组赋值为null时,访问数组的元素将会报空指针异常。
9.数组遍历(依次使用每个元素)
——使用for循环遍历。
——使用foreach循环遍历
for(元素类型 变量名:数组名)
{
可通过变量名访问每个元素
}
数组有几个元素,该循环就执行几次,变量会自动、依次等于每个元素。
foreach遍历缺点,只能访问,不能修改。(永远不要在foreach遍历中修改循环计数器的值)
10.求数组最值问题
——假设第一位为最大值,遍历数组,比较如果比假设的值还要大,覆盖掉即可。
11.二维数组
——只有一维数组,二维数组是不存在的。一维数组中还有一维数组。二维数组的本质,是数组元素为一维数组的数组。
——格式:
数据类型[][] 数组名 = new 数据类型[行的长度][列的长度];
——初始化:
a.动态初始化
——int[][] arr = new int[3][6];
b.静态初始化
——int[][] arr = new int[][]{
new int[]{22,3,19},
new int[]{5,2},
new int[]{5,90,300,213}
};