13变量
13.1局部变量
概念:声明在方法内部的变量,必须先赋值再使用
描述
定义位置 必须定义在方法中
作用范围 离当前变量最近的大括号以内
关于重名 在作用范围内不能重名
存储位置 基本数据类型,全部存放在栈(stack)中。
引用数据类型,名字放在栈(stack)中,值放在堆(heap)中
生命周期 随着方法的入栈(压栈)而生效,随着方法的出栈(弹栈)而死亡
14.循环结构
14.1 while
先判断条件再执行
循环必须的四个条件:
1,计数器初始化
2,判断条件
3,循环体
4,计数器变化
while ( 循环条件 ) {
循环操作
}
14.2 do-while
先执行再判断条件
do {
循环操作
} while( 循环条件 ) ;
初始情况不满足循环条件时
while循环一次都不会执行
do-while循环不管任何情况都至少执行一次
14.3 for
for(计数器初始化; 判断条件 ; 计数器变化){
循环体;
}
循环必须的四个条件:
1,计数器初始化
2,判断条件
3,循环体
4,计数器变化
14.4 循环对比
区别:
1,语法不同
2,执行顺序
while循环:先判断,再执行
do-while循环:先执行,再判断
for循环:先判断,再执行
3,使用情况
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while或do-while循环
14.5 break
跳出该循环结构
break可以用于switch中,表示跳出switch结构
也可以用于循环中,表示跳出当前循环,没有执行完的次数 不再执行
break关键字在循环中 通常结合分支结构来使用
break关键字之后 不能写代码
14.6 continue
作用:表示跳出本次循环,继续执行下一次循环
适用场景不同,break可以用于switch和循环中,continue只能用在循环中
14.7双重循环
外层变量变化一次 内层循环变量变化一轮
外层循环控制行数
内层循环控制列数
第一行元素的个数决定了计数器的初始值,
元素越来越多,就++,当计数器++的时候,我们必须设置一个上限,也就是我们的条件必须小于或者小于等于某个值,
否则就死循环
元素越来越少,就–,当计数器–的时候,我们必须设置一个下限,也就是我们的条件必须大于或者大于等于某个值,
否则就死循环
15 方法
15.1 static静态方法
15.1.1 方法的概念
用来解决特定问题(特定功能)的一定代码,可以反复使用
15.1.2 静态定义语法
public static void 方法名称( ){
//方法主体
}
15.1.3 调用
在需要调用方法的位置,直接书写方法名();即可实现调用
代码执行到调用方法的位置,会先执行方法内部的代码,再接着执行后续的代码
15.2参数
15.2.1 形参
形式参数,指方法定义的时候书写的参数,形参相当于局部变量的声明
形参规定了参数的个数、类型、顺序,指实参必须遵守这个规定
15.2.2 实参
实际参数,指用户调用方法的时候传入的参数,实参相当于局部变量的赋值
15.3返回值return
无返回值 void 也可以 return;
有返回值return 返回值;
使用方法:
方法1:直接返回 return a+b;
方法2:使用分支结构if,保证每一种情况都有正常的返回值
方法3:使用在void中表示终止方法 return;
15.4 方法多级调用
在方法中可以调用其他方法
16数组
16.1 数组概念
一组连续的存储空间,存储多个数据类型相同的值,空间连续,长度固定
16.2 数组声明赋值方式
16.2.1 先声明再分配空间
数据类型 [] 数组名;
数组名=new 数据类型[长度];
int [] a;
a=new int[10];
16.2.2 声明并分配空间
数据类型 [] 数组名=new 数据类型[长度];
int [] a=new int[10];
16.2.3 声明并赋值(繁)
数据类型 [] 数组名=new 数据类型[] {value1,value2,…};
int[] a-new int[]{1,2,3,4};
16.2.4 声明并赋值(简)
数据类型 [] 数组名={value1,value2,…};
int [] a={1,2,3,4};
16.3 数组下标和访问
从0开始
访问方式:数组名【下标】
16.4 数组遍历
int [] a={1,2,3,4};
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
16.5 数组的默认值
数组中的元素都有默认值,定义数组但是没有赋值时都默认为默认值。
整数:0
小数:0.0
布尔:false
字符:\u0000 unicode字符
其他引用类型:null
16.6 数组的存储
数组作为引用数据类型
引用(名称)存储在栈中,值存储在堆中
数组引用中保存的是hash值,所以直接打印输出hash值
16.7 复制数组
16.7.1 法1
创建大于原数组的新数组,并循环赋值
16.7.2 法2
System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度)
16.7.3 法3
import java.util.Arrays;
新数组=Arrays.copyOf(原数组,长度);
16.8 数组面试题
值传递和引用传递的区别?
值传递:传递的是值的副本,在方法中对值的操作不会影响原来的变量
引用传递:传递的是地址,根据这个地址对数据操作,会影响原来的值
String类型是特殊的引用数据类型,作为参数传递不会影响原来的变量
17 排序
17.1 冒泡排序
for (int i = 0; i < arr.length - 1; i++) { //外循环只需要比较arr.length-1次就可以了,n个数比n-1轮
for (int j = 0; j < arr.length - 1 - i; j++) {//-1为了防止索引越界,-i为了提高效率,每一轮都有一个最大的冒出来
if(arr[j] > arr[j+1]) { //大于就往上跑,冒泡
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j+1] = temp;
}
}
}
17.2选择排序
for (int i = 0; i < a.length; i++) {
int index=i;
for (int j = i+1; j <a.length; j++) {
if(a[index]>a[j]) {
index=j;
}
}
if(index!=i) {
int temp=a[i];
a[i]=a[index];
a[index]=temp;
}
}