变量:可以更改的值,方便操作,用来保存数据 是一个有名字的内存空间
变量声明:数据类型 变量名=值;;
局部变量:在方法中声明的变量称为局部变量,该变量只能在该方法中被使用,并且通过名字直接调用即可,没有默认值,必须赋值;
静态变量:再类体中使用static声明的变量,和方法平级,需要通过类名.静态变量名才能调用,在当前类中调用当前静态变量时,类名可以省略;
成员变量:类体中没有static声明的变量,和方法平级,须通过对象引用才能调用;
默认值:整数(0),小数(0.0),boolean(false),char(\u0000),引用(null);
数组:引用数据类型,用来保存多个数据;
数据结构:存储,组织数据的方式;
操作:增删改查;
数组特性:内存中连续存储,线型数据结构,下标从0开始(内存地址偏移);数组长度一旦确定,不能更改;数组不能进行添加和删除,除非新建新数组,把原来数组复制过去,复制的过程可以添加删除;
数组查询和更改效率高,添加删除效率低;
内置属性:length.保存数组长度;
Java中有一个java.until.Arrays类,提供了一些数组操作;
数组声明:
静态声明:在已知每个元素的时候使用静态声明;
数据类型[] 变量名=值;
重新赋值:变量名=new int[]{};
动态声明:不知道数组中元素的时候使用动态声明;
数据类型[] 变量名=new 数据类型[]长度;
动态声明保存的是对应类型的默认值(整数0,小数0.0,布尔false,字符\u0000,引用null);
数组使用:
获取数据:int[] arr={10,11,12};
System.out.println(arr[0]);下标从0开始;
数组长度:System.out.println(arr.length);
更改数据:数组[下标]=值;
寻找最后一个元素:System.out.println(arr[arr.length-1]);
遍历:
For(int i=0;i<arr.length;i++){System.out.println(arr[i]);}
增强for循环:把数组中的每一个元素都赋值给变量;
For(数据类型 变量名:数组){}
For(int element:arr){}
常见异常:
下标越界;
空指针异常:arr=null;没数组时会出现空指针异常;数组没进行初始化,对数组进行了属性操作;
数组传递:int [] arr={1,2,3} m2(arrr); m2(new int []{1,2,3});
传值和传址:
传值:传递基本数据类型的数据,相互无影响;
传址:传递引用数据类型的值,相互有影响,指向同一个堆内存空间;
数组复制:原数组 原数组起始位置 目标数组 目标数组起始值 复制个数 替换式复制,把原来数组更改了,没生成新数组,传址引用
数组插入式复制:原数组 原数组起始位置 目标数组 目标数组起始值 插入个数 因为是插入复制,所以肯定会更改数组长度,因为数组长度不能更改,所以我们只能新建数组,并通过返回值把数组返回
创建一个新数组,长度为 dest.length + length
目标数组中 从0开始 到 起始位置结束(包含),复制到新数组中
源数组中 从起始位置开始(包含) 复制 length个 到 新数组中
目标数组中 从起始位置+1开始(包含) 到最后 所有的数据 复制到新数组中
排序:让保存的元素按照一定的规则进行排序,存储;
冒泡排序:比较相邻的两个元素;重复对每一个元素进行相同操作,直到没有一对元素的时候;针对所有元素,再重复上面的步骤,直到没有任何一对需要比较;
选择排序:每次把最小的放到左边,拿出第一个,假设是最小的,挨个和后面的进行比较,有比第一个小的就交换下标,比较完一轮,放到最前面,重复步骤,直到当前元素后没其他元素即可;
查找元素:
二分查找:又称为折半查询,要求数据必须有序,升序或降序都可;
升序和降序须更改算法;随机查找的效率更高;
一般用于固定数据查找,添加和删除比较麻烦,需要考虑元素位移问题;
算法实现:
确定开始和结束位置还有中间数据;
用目标数据和中间数据比较;
如果目标数据=中间数据,返回中间数据的索引即可;
如果目标数据>中间数据的话,则在后半截继续查找,其实数据=中间数据+1,结束不变,在生成中间数据
如果目标数据<中间数据,取前半截,起始不变,结束等于中间数据-1,在生成中间数据
重复步骤,若起始数据大于结束数据,则表示查找失败,返回-1;
API排序:只能用于升序;
Arrays.sort(数组);
类和对象:
对象:某一个具体事物;
类:描述了这一类事物的属性和特征;
定义类: 类型 变量=new 类型();;
对象是类的实现,保存了类属性的值;在编程过程中,通过需求或现实事物的属性或特征,来定义相关类;
通过不同属性值来定义不同的对象;
对象和对象之间,有相同的属性相同的值,用静态变量;
对象和对象之间,有相同的属性相同或不同的值,用成员变量;