Java基础-2407-day16

Object

  • getClass

    获取对象的所属的类类型,不允许被重写

  • hashCode

    一个对象在堆中的特征(地址)经过hash算法得到的一个int值

    Object中一般是以地址值为特征的

    一般我们会重写,以属性的值进行计算。

  • equals

    两个对象的比较方法

    Object里是判断两个地址是否相同,使用的 ==

    一般我们会重写,以属性的值是否相同来判断的

  • toString

    输出一个对象的字符串形式

    Object里是对象的地址:全限类名+@+hashCode的十六进制字符串

    一般我们会重写,以输出对象的属性为原则

String

字符串常量池的存在

当字符串进行常量赋值或者调用intern方法的时候,会将字符串对象放入到常量池中并返回常量池中的地址。

String的本质,底层是字符数组。

枚举

对象个数固定的类型,基本和类一样,类可以定义的部分,枚举都可以,有这样几个不同点:

  • 构造器是私有的
  • 所有的枚举类都继承Enum,所以不能再继承其他类
  • 枚举类可以实现接口
    • 由枚举类统一实现
    • 由枚举对象做单独实现
  • 枚举类可以提供抽象方法,但必须由枚举对象立即实现

集合

Collection

单列集合的抽象,一个元素就是一个数据。

Collection接口是Iterable的子接口,Collection集合都可以使用迭代器。

List

有序的、元素可重复、有索引

遍历的时候有三种方式
  1. 普通for循环,需要转换成数组操作
  2. 增强for循环(推荐)
  3. 迭代器遍历
// 获取迭代器的对象
Iterator it = 集合.iterator();
while(it.hasNext()){
	it.next();
}
  • ArrayList:底层使用数组实现,增删慢,查找快
  • LinkedList:底层使用双向链变实现,增删快,查找慢
  • Vector:底层使用动态数组实现,加了线程安全,使用方法和ArrayList相同
Set

元素没有顺序、没有索引、不能重复

  • HashSet:底层用Hash表,无序且不可重复

    • 唯一性的验证:先验证hashCode的值,如果hashCode值相同,需要继续验证equals的结果
    • 使用的时候,自定义的类型必须重写hashCode和equals
  • TreeSet:底层用红黑树,有序且不可重复

    ​ 唯一性的验证:根据比较方法的返回值是否为0,为0则代表重复。

    ​ 提供了两种排序的方法

    • 自然排序:要求集合中元素的所属类型实现Conparable接口,提供compareTo的方法实现。返回值有正数、负数和0三个选项
    • 比较器排序:一般用在源代码无法侵入的情况,要求第三方的类实现Comparator接口,提供compare方法的实现。返回值有正数、负数和0三个选项。可以使用外部类、成员内部类、匿名内部类、lambda表达式来进行使用。
  • LinkedHashSet:数据的存取顺序是一致的

Map

双列的结合,一个元素是一个键值对(key-value),键值对被抽象成了Map的内部子接口,Entry

  • HashMap:key值不重复、键值对是无序的,原理参照HashSet,要求对key所在的类重写hashCode和equals
  • TreeMap:key值不重复,key可以进行排序,排序的方式参照TreeSet,同样的也是提供自然排序和比较器排序。
  • HashTable:使用和HashMap一样,加了线程安全
  • LinkedHashMap:要求map的键值对存取顺序一致
  • Properties
遍历
  • 根据key找value

  • 根据entry输出对应的key和value

    Collections

集合的常用方法组成的工具类

  • 填充
  • 排序
  • 反转
  • 混洗
  • 添加多个元素
  • 最大值、最小值

注解Annotation

定义

用在java类的元素(属性、方法、类名、包名)上,主要起标记作用,主要标记元素具有特殊功能,或者在编译期间进行语法检查。

写法

  • 语法:@Interface

    public @interface 注解的名字{
    	属性;
    }
    
  • 生效范围(@Retation)

    • source :java文件里
    • class : java文件和class文件
    • runtime:运行时,包含前面的所有阶段
  • 注解存在的位置(@Target)

    • method:方法
    • filed:属性上
    • type:类型上

异常

java中对于所有出现的异常情况抽象成了异常类,等到异常情况发生的时候,会抛出一个该异常类型的对象。

异常的种类

  • 编译型异常
  • 运行时异常

异常的处理

  • 使用throw和throws关键字进行向上抛出
    • throw
    • throws
  • 使用try-catch语句块进行捕获
    • 将可能出现异常的代码放在try块里
    • 使用catch后的参数捕获指定异常
    • catch可以捕获多个异常,用|隔开
    • 如果想对多个异常进行单独处理,可以写多个catch语句,但捕获的异常范围要从小到大捕获

finally

无论什么情况,都会执行的代码块,一般放一些记录日志、关闭资源等的代码。

如果finally中有变量的赋值操作,同时呢在上面有return语句,finally中的变量赋值不会被返回。主要是因为return的值已经复制好准备返回了,就等finally执行完毕了。

自定义异常

  • 定义的编译型异常:需要写个类继承Exception,然后定义子类的构造器即可,主要靠父类的构造器进行实现
  • 定义的编译型异常:需要写个类继承RuntimeException,然后定义子类的构造器即可,主要靠父类的构造器进行实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值