> 文档中心 > JAVA SE (第二天)(流程控制、导包操作、数组原理细节)

JAVA SE (第二天)(流程控制、导包操作、数组原理细节)

前言: 赶进度ing。。。。。。。。。。。。。。。。。。。。。。。。。


目录

 流程控制、导包操作、数组原理细节       

1.导包操作基本流程

2.流程控制

2.1.流程控制语句分类

3.数组原理细节

3.1.数组定义

3.2.数组初始化

3.3.数组误区


                流程控制、导包操作、数组原理细节

                                  

1.导包操作基本流程

Scanner使用①导包import java.util.Scanner;②创建对象Scanner scanner = new Scanner(); ③接收数据int num = scanner.nextInt();

2.流程控制

2.1.流程控制语句分类

  • 顺序结构
  • 分支结构(if,switch)
  • 循环结构(for,while,do-while)
switch语句:多个case后面 不可以重复,重复则编译报错。do{    循环体语句;    条件控制语句;    }while{条件判断语句};while(条件判断语句){    循环体语句;    条件控制语句;}两者区别: do-while 会先执行一遍循环体语句和条件控制语句。

CPU: 程序由线程调度执行,线程运行在CPU上,程序死循环会导致CPU瞬间飙高。


3.数组原理细节

3.1.数组定义

一次性声明大量的空间用于存储数据的变量

int [] arr;int arr [];     int 默认值为0

3.2.数组初始化

java 中的数组必须先初始化才能用,初始化就是为数组中的数组元素分配内存空间,并为每个数组元素赋值两种初始化方式:1.动态初始化: 数据类型 [] 变量名 = new 数据类型[数据长度] ;2.静态初始化: 数据类型 [] 变量名 = {元素1,元素2,元素n};int a[] = new int[];new int[] 时  会在堆内存开辟一块空间,存放数组内容。int a[]  时 会在栈内存开辟一块空间,存放数组在堆内存空间的存放地址tips: 数组初始化时会在存储空间添加默认值。int: 0float、double:     0.0boolean:    falsechar:空字符引用数据类型:      null栈内存:一片内存区域,存放的都是局部变量堆内存:存储的是数组和对象,凡是new建立的都在堆中,堆中存放的都是实体(对象)(栈内存通过存储地址访问堆内存)

3.3.数组误区

在构建数组的时候会有一个常见的误区,如下:int [] arr1 = new int[2];arr1[0] = 1;arr1[1] = 2;/** * arr1 = {1,2}; */int [] arr2 = {1 , 2};//这时候arr1 和 arr2 内容相当于是相同的内容,但是他们的堆内存中的内存地址却不一样。//输出他们俩的栈内存地址,即直接输出对象,就会发现他们俩值不一样,所以也就不相等。System.out.println(arr1);System.out.println(arr2);System.out.println(arr1==arr2);cosole:[I@1b6d3586[I@4554617cfalse
但是在这种情况下,有不一样了:int [] arr1 = new int[2];arr1[0] = 1;arr1[1] = 2;/** * arr1 = {1,2}; */int [] arr2 = arr1;//这时候相当于把 arr1的栈内存中的堆内存地址赋值给arr2。//输出他们俩的堆内存地址,即直接输出对象,就会发现他们俩值一样,所以也就相等。System.out.println(arr1);System.out.println(arr2);System.out.println(arr1==arr2);cosole:[I@1b6d3586[I@1b6d3586true

所以在输出对象的时候,是输出对象在栈内存保存的堆内存地址,相互赋值的话会指向同一个内存地址,如同上面的情况,两个对象arr1和arr2指向同一个地址,相当于arr1内容修改,arr2也会随之修改。