目录
一、键盘录入_Scanner
1.输入:导包 -> 创建对象 -> 调用方法
2.next和nextLine区别
二、Random随机数
1.生成随机数
2.在指定范围内随机生成一个数
三、Switch语句
四、一维数组
1.数组定义
2.获取数组长度
3.遍历数组
3.输出数组
4.数组常见异常
5.练习
五、内存图
1.java内存划分
一、键盘录入_Scanner
1.输入:导包 -> 创建对象 -> 调用方法
import java.util.Scanner; //导包
public class Demo01HelloWorld {
public static void main(String[] args) {
Scanner a = new Scanner(System.in); //创建对象
Scanner b = new Scanner(System.in);
a.nextInt(); //输入整型(int)
b.next(); //输入字符串(String)
}
}
2.next和nextLine区别
next遇到空格和回车结束
nextLine遇到回车结束
public class Demo02Scanner {
public static void main(String[] args) {
Scanner sc1 = new Scanner(System.in);
String data1 = sc1.next();
System.out.println(data1);
Scanner sc2 = new Scanner(System.in);
String data2 = sc2.nextLine();
System.out.println(data2);
}
}
二、Random随机数
1.生成随机数
public class Demo01Random {
public static void main(String[] args) {
Random rd = new Random();
int data = rd.nextInt();
System.out.println("data = " + data);
}
}
2.在指定范围内随机生成一个数
nextInt(int bound) -> 在 0-(bound-1) 随机一个数
public class Demo02Random {
public static void main(String[] args) {
Random rd = new Random();
int data = rd.nextInt(9);
System.out.println("data = " + data);
}
}
生成901-1000的随机数
int data1 = rd.nextInt(100) + 901; //生成901-1000的随机数
System.out.println("data1 = " + data1);
三、Switch语句
case具有穿透性,如果不用break终止,则一直运行到default(包括)。
四、一维数组
1.数组定义
a.动态初始化
数据类型[] 数组名 = new 数据类型[长度]
数据类型 数组名[] = new 数据类型[长度]
等号左边的数据类型:规定了数组中只能存储什么类型的数据
[]:代表是数组,一个[]代表一维数组,两个[][]代表二维数组
数组名:小驼峰式
等号右边的数据类型和等号左边相同
[长度]:指定数组长度,规定了数组最多能存多少个数据
b.静态初始化:定义数组直接给值 -> 不推荐
数组类型[] 数组名 = new 数据类型[]{元素1,元素2...}
数组类型 数组名[] = new 数据类型[]{元素1,元素2...}
c.静态初始化简化形式 -> 推荐
数据类型[] 数组名 = {元素1,元素2...}
2.获取数组长度
数组名.length
3.遍历数组
快速生成for循环和变量i
3.输出数组
直接输出数组名,会输出数组在内存中的地址。
地址值:数组在内存中的唯一标识。
数组中的默认值:整数:0 / 小数:0.0 / 字符:'\u0000' -> 对应int值为0 / 布尔:false / 引用:null
4.数组常见异常
a.数组索引越界异常 ArrayIndexOutOfBoundsException
b.空指针异常 NullPinterException
5.练习
练习一:随机产生10个【0-100】之间的数,统计既是3又是5,但不是7的倍数的个数
//练习:随机产生10个【0-100】之间的数,统计既是3又是5,但不是7的倍数的个数
public class Demo01array {
public static void main(String[] args) {
Random rd = new Random();
int count = 0;
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = rd.nextInt(100);
if (arr[i] % 7 == 0)
break;
if (arr[i] % 3 == 0 && arr[i] % 5 == 0) {
System.out.println("zhi:" + arr[i]);
count++;
}
}
System.out.println("total:" + count);
}
}
五、内存图
1.java内存划分
a.栈(重点)(Stack):主要运行方法,方法的运行都在栈内运行,运行完毕后,需要“弹栈”。
b.堆(重点)(Heap):保存的是对象,数组,每new一次都会在堆内存中开辟空间,并为这个空间分配一个地址值。堆中的数据都是有默认值的。
整数:0 / 小数:0.0 / 字符:'\u0000' -> 对应int值为0 / 布尔:false / 引用:null
c.方法区(重点)(Method Area):代码的“预备区”,记录了类的信息以及方法的信息,方法区中主要保存class文件及其中的信息,代码运行之前,需要先进内存(方法区)
d.本地方法栈(了解)(Native Method Stack):专门运行native方法(本地方法)
本地方法可以理解为堆对Java功能的扩充
有很多功能,java语言实现不了,所以需要依靠本地方法(c语言编写)完成,例如:读写
e.寄存器(了解)(pc register) -> 和CPU有关
2.数组指向同一空间则更改同一块区域
int[] arr1 = new int[3];
arr1[1] = 10;
int[] arr2 = arr1;
arr2[1] = 100; //更改的同一地址,值变为100.