数组小结:
数组是相同数据类型的有序结合
数组也是对象,数组元素相当于对象的成员变量
数组长度是确定的,不可变的,如果越界,则报ArrayIndexOutOfBounds
Arrays数组的工具类
sort()排序
toString()打印
fill()填充
冒泡排序的时间复杂度O(n2)
package com.hollyland.array;
import java.util.Arrays;
public class BubbleSorting {
public static void main(String[] args) {
//冒泡排序
//1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
//2.每一次比较,都会产生出一个最大,或者最小的数字
//3.下一轮则可以少一次排序
//4.依次循环知道结束
int[] arr = {23, 12314, 12, 31, 3, 2, 1, 341231, 1};
System.out.println(Arrays.toString(sort(arr)));
}
public static int[] sort(int[] array) {
//临时变量
int temp = 0;
boolean flag = false;
//外层循环,判断我们这个要走多少次
for (int i = 0; i < array.length; i++) {
flag = false;
//内层循环,比价判断两个数,如果第一个数,比第二个数大,则交换位置
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = true;
}
}
if (flag == false) {
break;
}
}
return array;
}
}
面向过程
第一步做什么,第二步做什么
面向对象
物以类聚‘分类的思维模式
宏观--->面向对象
微观--->面向过程
面向对象的本质:以类的方式组织代码,以对象组织(封装)数据
抽象
三大特性:封装,继承,多态
方法:静态方法 非静态方法
类是一种抽象的数据类型,它是对某一类事物的整体描述/定义,但是并不能代表某一个具体的事物
对象是抽象概念的具体实例
* 1.类与对象 * 类是一个模板:抽象,对象是一个具体实例 * 2.方法 * 定义,调用 * 3.对应的引用 * 引用类型:基本类型(8) * 对象是通过引用来操作的:栈--->堆 * 4.属性:字段Field 成员变量 * 默认初始化: * 数字: 0 0.0 * char: u0000 * Boolean: false * 引用: null * * 修饰符 属性类型 属性名 = 属性值! * 5.对象的创建和使用 * -必须使用new 关键字创造对象,构造器 * -对象的属性 * -对象的方法 * 6.类: * 静态的属性 属性 * 动态的行为 方法
封装:
高内聚低耦合 不允许外部干涉
属性私有 set/get
extends 扩展 子类是父类 的拓展
super注意点
1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中
3.super和this不能同时调用构造方法
vs this
代表的对象不同
this: 本身调用者这个对象
super:代表父类对象的引用
前提
this:没有继承也可以使用
super:只能在继承条件才可以使用
构造方法
this()本类的构造
super()父类的构造
重写:需要有继承关系,子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能缩小 public> protected >default > private
4.抛出的异常:范围可以被缩小,但不能扩大:Class Not Found Exception -->Exception
重写,子类的方法和父类的必须一致,方法体不同
为什么要重写?
1.父类的功能,子类不一定需要,或者不一定满足
Alt+Insert:Overide
多态
动态编译:类型 可扩展性
多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系 否则转换类型会出现类型转换异常 ClassCastException
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象! Father f1 = new Son();
1.static 方法,属于类,他不属于实例
2.final常量
3.private方法