Java第2周(0622-0701)---一周知识点总结

三种排序算法

  • 冒泡排序
    在这里插入图片描述- 选择排序 在这里插入图片描述- 插入排序在这里插入图片描述

  • 二维数组

    • 一个数组中的元素还是数组
  • 方法的值传递机制

  • 可变参数方法

    • 可以是[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值