数组
概念:
数组是存储同一种数据类型多个元素的容器
数组既可以存储基本数据类型,也可以存储引用数据类型
定义格式
1.数据类型【】数组名;//推荐使用
2.数据类型 数组名【】;
注意:定义后,数组中没有元素值
初始化
必须先初始化后使用
数组中的数组元素进行分配内存空间,并且为每一个数组元素进行赋值
分类
1.动态初始化
初始化的时候,只指定数组的长度,由系统来为数组分配初始值
2.静态初始化
初始化的时候,已经指定了每一个数组元素初始化的值,由系统来决定数组的长度
异常
数组常见异常
-
数组下标越界
java.lang.ArrayIndexOutOfBoundsException
访问了数组中不存在的索引
-
空指针异常
java.lang.NullPointerException
数组的引用没有指向对象,但是却在操作对象中的元素
异常处理
异常处理后,异常代码块后的其他代码还能继续执行
try {
可能发生异常的代码块;
} catch(异常原因 e){
System.out.println("发生了...异常");
}catch (Exception e) {
e.printStackTrace();
}
当异常代码块有多个异常时,系统只检测第一个异常,之后的异常代码块不执行。
数组排序
冒泡排序
package cn.tedu.day03;
public class SortedDemo {
public static void main(String[] args) {
int[] arr = {4,8,6,12,94,35,16,27};
for(int i=0;i<arr.length;i++){//轮数 n-1
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){//每次都和下一元素进行比较
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("排序后的结果为:");
for(int k=0;k<arr.length;k++){
System.out.println(arr[k]);
}
}
}
对冒泡排序进行优化:
package cn.tedu.day03;
/**
*封装优化
*@author Administrator
*
*/
public class SortedDemo02 {
public static void main(String[] args) {
int[] arr = {4,8,6,12,94,35,16,27};
bubbleSorted(arr);
}
public static void bubbleSorted(int[] arr){
boolean isSorted;
for(int i=0;i<arr.length;i++){ //轮数 n-1
isSorted = true; //假设剩下的元素已经排好序了
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){ //每次都和下一元素进行比较
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
isSorted = false;
//一旦交换了数组元素,就表明剩余元素未排好序
}
}
System.out.println("排序的次数为:"+i);
if(isSorted){
break;
//如果没有发生交换,说明剩下的元素没有排好序
}
}
System.out.println("排序后的结果为:");
for(int k=0;k<arr.length;k++){
System.out.println(arr[k]);
}
}
}
Java中的内存分配
1.栈
存储局部变量
局部变量就是定义在方法中的变量
使用完之后系统自动释放数据,立即回收该空间
2.堆
存储new出来的对象:实体
每一个对象都是有地址值得,每一个对象的数据都是有默认值的
byte,short,int,long的默认值是0
float,double的默认值是0.0
char的默认值是‘\u0000’
Boolean的默认值是FALSE
引用类型的默认值是null
使用完毕之后系统会自动在垃圾回收器空闲的时候回收
方法区:
本地方法区(和系统有关):
寄存器:给CPU使用的