一维数组:
一维数组的含义:数组就是同一类型元素的集合,可以通过数组下标来确定某元素的位置,注意:数组下标从0开始。初始化:
一维数组初始化分为静态初始化和动态初始化,其中静态初始化是在定义数组时直接赋值,数组长度由系统判断。如 : int[] is = new int[]{1,2,3}; 或者 int[] is = {1,2,3};而动态初始化是指定义数组时只定义数组长度,如:Int[] is = new int[3];数组元素的值由系统默认给,其中整型为0,boolean为false,浮点型为0.0,char型为空格,引用类型为null。
设置或者获取数组元素:
数组元素由数组下标唯一确定,所以,只要知道某元素的数组下标,便可对其进行提取或修改,如:int num = is[0]; 表示将is数组中下标为0的元素提取出来并赋值给变量num。is[1] = 0; 表示直接将数组中下标为1的元素赋值为0。for循环和增强for循环:
for循环和增强for循环同是可以遍历数组的循环,但它们的不同之处在于for循环是通过改变数组下标进行的循环,相当于直接操作的数组,在循环过程中可以对数组元素进行改变,如:赋值,交换。而增强for循环只能用来输出数组,因为在增强for循环中输出的元素只是数组元素的一个副本,所以,无法用增强for循环对数组元素进行操作。
可变参数:
如果有一个方法,其输入参数个数不确定,考虑用到可变参数,表现为:public static void hhy(int ...is){ },即 类型 ... 名称。可变参数的注意事项,方法中不能同时具有多个可变参数,如果想加单个参数,则必须写在可变参数之前如:
public static void hhy(int num,int ...is2){ }。
三大排序:
冒泡排序:n个元素进行n-1轮排序
每一轮排序中从前往后,相邻两元素比较,将较大的放于后面,故每一轮排序都会将本轮最大值放于参与本轮排序元素的最后面。for循环条件:外层循环0到length-1
内层循环0到length-1-i(i:外层循环变量)
选择排序:n个元素进行n-1轮排序
定义一个变量用来存放当前最小值的下标,初始时该变量定于该轮循环第一个元素的下标,循环中从前往后各个元素逐个与该变量指定的元素进行比较,比较后将较小元素的下标赋予该变量,一轮结束后,如该变量不等于第一位元素的下标,则交换该变量与其的值,进行下一轮循环,即选择排序每经过一轮排序就将当前最小值放于当轮第一位。它和冒泡的不同之处在于,不用在比较的过程中不停的交换值,只在每一轮排序结束后考虑交换值的问题,不用经常移动数组元素。
for循环条件:外层循环0到length-1
内层循环i+1到length-1(i:外层循环变量)
插入排序:n个元素要进行n-1轮排序
从最开始的两个元素开始,进行比较,交换值使其有序,后逐个将之后的元素当做要插入这个有序队列的元素从后往前逐个与有序元素进行比较,确定自己位置。特点:每一轮排序不能将一元素放置最终的正确位置,但是参与过排序的元素直接的相对顺序确定,即在排序的过程中参与过排序的元素部分有序。
for循环条件:外层循环0到length-1
内层循环i+1到0(i:外层循环变量)
查找:
顺序查找:最简单粗暴的方式,遍历整个数组,逐个比较二分法查找:前提条件:参与查找的数组必须有序,查找方式:
查找时需定义 start middle end,
循环条件(start <=end)
初始时start=0; end=length-1;
每次比较值下标为middle = (start+end)/2;
每次分别用下标为middle的元素比较下标为start,end的元素,确定该元素在那个区间,改变start或end的值。
Arrays工具类
.sort();给数组排序
.fill();给数组中的元素全部赋值
还有许多方法自行百度。
二维数组:
其实二维数组就是同种类型的一维数组的几个,二维数组的长度即表示该二维数组中存放的一维数组的个数,使用方法和一维数组基本上相同,毕竟可以将二维数组拆成多个一维数组来处理。构造方法:
其实构造方法就是名字和类名相同的方法,其特点是:方法名与类名相同,无返回值。用法:new 构造方法();创建对象
系统默认给定一个无参的构造方法,当然构造方法也可以重载,但是如果编写了一个有参的构造方法,那么系统将不会再默认创建一个无参的构造方法,如想使用无参的构造方法需自己建立。
和普通方法的不同:
构造方法在创建对象时使用
普通方法用对象名调用
构造方法名字必须与类名相同且没返回值(连void都没有)
代码块:
{这就是代码块...
};
代码块在创建对象的时候执行,其执行顺序排在构造方法之前,可以用其在创建对象过程中初始化对象。
this:
有三种关于this的用法:首先,this肯定是在某个方法之中
1. this.属性:调用本对象的属性 本对象:调用该方法的对象。
2. this.方法:调用本类的方法。
3. this(参数):根据参数的不同,调用相应的构造方法。
注意:
this():只能写在构造方法中的第一句话。
static:
静态的,static修饰全局变量:类名直接调用,不用创建对象,一般用static和final一起修饰全局变量。
static修饰方法,表示该方法可以直接用类名调用,多用于工具类。
static代码块:只在类加载的时候执行一次。
全局变量vs静态的全局变量
全局变量:每个对象独享一份
静态全局变量:由所有对象共享
静态全局变量:在静态常量区里。
构造方法vs代码块vs静态代码块
构造方法:在创建对象时使用,可以传入参数,给对象属性赋值
代码块:每次创建对象时调用,不可以传入参数。
静态代码块:类加载时调用,不可以传入参数。
继承:
extends关键字,子类继承父类,就继承了父类的一般属性和方法。优点:如果多个类有许多公共的属性和方法,则考虑将其提取出来创建一个父类,减少代码量。
特点:
创建子类对象会调用父类的构造方法,因为子类对象构造方法中的第一句就是其父类的构造方法。
super:
其必须在子类中使用,有三种用法,和this相似,即:调用属性,调用方法,调用构造方法,其中构造方法super()必须写在子类构造方法里的第一行。重写/复写:
当父类方法不能满足子类对象使用时,考虑对父类方法进行重写注意:
方法的重写必须在子类里面
方法名,形参,返回值类型必须和父类方法相同
访问修饰符不能比父类更严格
Object类:
其是所有类的基类/超类,如果一个类没有明确继承那个类,那么它就继承object类equals方法:object类中的该方法是比较两个对象的存储地址是否相同,即是否是同一个对象。不满足使用时考虑重写,根据需要的判断相同的逻辑。
toString方法:直接打印一个对象时,会自动调用该对象的toString方法。在object类中toString的功能是 输出包名+类名@ 哈希值,如果想改变其输出方法,考虑重写方法。