三种排序算法
-
冒泡排序
- 选择排序 - 插入排序 -
二维数组
- 一个数组中的元素还是数组
-
方法的值传递机制
-
可变参数方法
- 可以是[0-n]个参数
- 要放在末尾
- 传进方法后 可以当做数组处理
-
方法的重载
- 在同一个类中,方法名相同、参数不同(数量、类型、顺序)的方法为重载
-
类和对象
-
封装
- 将属性的修饰符改为private
- 提供属性的get/set方法
-
构造器(重载的运用)
- 类中默认有一个无参构造器 当自己编写构造器后 这个构造器自动失效
-
DeBug调试
-
继承
- 子类会继承父类private以外的方法和属性
-
this关键字和super关键字可以结合记忆 但是其本质是不同的 this关键字代表的是当前对象 super关键字代表的是父类 是一个关键字
-
syso中直接写引用数据类型时,调用的是它的toString方法
-
子父类知识点
-
父类引用子类对象 父类引用调用子类重写过的方法时 编译上还指向父类的方法 但实际上执行时执行的是子类重写过的方法
-
父类构造器中调用子类构造器重写后的方法(子类构造器调用父类构造器) 创建子类对象时 调用的是子类重写后的方法
- 和子类调用getClass() 方法原理相同 返回的是子类的东西 就算是Parent parent = new Child() parent.getClass() 结果也是Child
-
多态的运用 在编译时认为是父类类型的变量 但是在实际运行时认为是子类的对象
- 等号左侧是编译时数据类型 右侧是运行时数据类型
- 向上转型
-
-
hashCode( )是将实际的地址只经过hash转换为一个虚拟的地址值 可以重写
-
重写后的hashCode( )方法可以将两个对象展现出来的值(toString)相同 但是实际上它们任然存放在不同的地址上
-
重写hashCode( ) 方法实际上是为了equals( )方法服务的 因为规定equals的两个对象hashCode必须相同(尽管他们实际存放的地址可能不同) String的equals和hashCode方法都进行了重写
-
若不重写equals方法 直接调用对象的equals方法的话,调用的是从Object类继承下来的equals方法 用的是"" 而""比较的是两个对象的地址值 用来比较基本数据类型可以 但是我们将两个类型相同、属性也相同的两个对象称作相等的对象,这个时候,Object中的equals方法() 就不能满足我们的需求,所以需要重写equals方法
-
重写equals方法的步骤
-
重写hashCode
-
判断是否==
-
判断obj是否为null
-
不为空的话 判断类型是否可转
-
类型可转的话 判断属性是否相同
-
-
重写的equals方法只需要判断传进对象是否为null而不需要判断this,因为this对象能.equals必不是null
-
判断类型是否可转要用instanceof(向下转型前的判断)(向上转型不需要判断)他可以判断某变量在实际存储是否有要查询类的数值(多态)(因为传进来的都转成了Object 但实际上存储空间还是之前的)
-
-
自动装箱和自动拆箱
- 除int --> Integer char --> Charcter 外 其余均为基本数据类型的首字母大写
-
代码块
- 构造器 属性(静态) 属性的隐/显式初始化、代码块(静态) 方法 执行的顺序:
- 所有静态变量隐式初始化 --> 父类静态变量显式初始化/父类静态代码块 -->子类静态变量显式初始化/子类静态代码块 -->所有非静态变量的隐式初始化 --> 父类(显式初始化/代码块、构造器) --> 子类(显式初始化/代码块、构造器) --> 方法
- 其中:静态指只会加载一次 非静态的每new一次对象执行一次 方法可以执行多次
- 显式初始化和代码块(多个) 按从上到下的顺序执行
- 开辟空间(隐式初始化) 最先
- 构造器 属性(静态) 属性的隐/显式初始化、代码块(静态) 方法 执行的顺序:
-
包
- 包的命名规则
- 以个人或者组织命名:org.域名.[项目简称].模块
- 一公司域名命名:com.域名.[项目简称].模块
- 工程中的分包
- entity包中放实体类(只有属性、及对应的get/set方法、toString、equals、hashCode等方法(均是为属性服务的))
- manage包中放业务类操作、管理实体类的一些方法
- view包中放视图
- 包的使用:导包(只能指定某个类导入) 要想导入一个包下面的多个类可以使用*
- Java.lang包为自动导入的
- 不填包名的包为默认包,default 它能调用别的包的类 但是别的包不能调用默认包中的类
- 包的命名规则
-
修饰符
-
访问修饰符
- public
- protected
- default
- private
-
非访问修饰符
- static
- final
- abstract
- synchronized(同步)
- native(本地 放的是c/c++代码 不在编译器中展现)
-
private和protected不能用来修饰类
-
局部变量不能添加访问修饰符
-
子类重写父类方法要遵循两同一大两小原则
- 两同:方法名、参数列表同
- 一大:子类权限修饰符大于等于父类
- 两小:子类返回值类型和抛出的异常要小于父类
- 特别注意的是:覆盖的方法和被覆盖的方法 要么都是类方法(静态) 要么都是实例方法(非静态) 不能一个是类方法一个是实例方法 编译会报错
-
从上到下为public protected default private
-
类和类之间的关系
- 泛化 父类引用子类对象
- 依赖 数据类型作为一个类中方法的一个参数类型
- 关联 一个数据类型是一个类的属性类型
- 聚合 与关联无代码上的区别 是理解上的区别
-
抽象类
- 有抽象方法的类必为抽象类
- 抽象类有构造器但是不能实例化
- 抽象类被继承后 子类只能为抽象类或者实现父类中所有抽象方法
- 一个抽象类中可以没有抽象方法
- 抽象方法没有方法体
- 抽象方法
- private、final、static 都是因为不能继承/不能重写从而不能和abstract一起用
-
内部类
-
在编译后的class文件中 外部类和内部类分为两个字节码文件 内部列名为:外部类$内部类.class
-
匿名内部类也可以叫匿名子类
-
匿名内部类用完以后要加分号
-
内部类也可以声明在方法中
-
创建内部类的实例对象
- 在外部类的内部 直接new
- 在外部类的外面
- 内部类对象.new 内部类名([参数列表])
- 静态:new 外部类名.内部类名
-
-
单例设计模式
- 将构造器私有化
- 创建一个静态私有属性 类型为本类
- 对外提供一个get方法 返回同一个当前类的对象
- 懒汉式vs饿汉式
- 懒汉式是使用时在创建对象(有线程危机)
- 饿汉式是在声明静态属性是就新建了对象
-
单一职责
- 只干自己负责的事
-
Java中的分层结构:上级可以调用下级 下级不能调用上级 上级传值并调用下级后 下级职能将处理结果返还给上级
-
final可以修饰 类 属性 方法 局部变量
-
final修饰方法时 方法不能被重写 修饰类时 类不能被继承
-
修饰属性时,必须显性赋值一次(声明属性,构造代码块,构造器中:如果有多个构造器时,每个构造器中都要进行赋值),后期不能进行改变(栈值不能改变)。
-
final修饰的变量的栈值不能改变,若final修饰的是数组,则数组中的内容是可变的
-
-
静态常量 static final