千峰JAVA第五周总结

二、Object类:

  1. 概念:
    I. 超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
    II. 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。
    III. Object类中所定义的方法,是所有对象都具备的方法。
    IV. Object类型可以存储任何对象:
    1). 作为参数,可接受任何对象。
    2). 作为返回值,可返回任何对象。

  2. 常用方法:
    I. public final Class<?> getClass(){}
    返回引用中存储的实际对象类型。
    应用:通常用于判断两个引用中实际存储对象类型是否一致。

II. public int hashCode(){}
一个对象的整数表现形式(整数型的名字)。
返回该对象的十进制的哈希码值。
哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值。
哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码。

III. public String toString(){}
返回该对象的字符串表示(表现形式)。
可以根据程序需求覆盖该方法,如:展示对象各个属性值。

IV. public boolean equals(Object obj){}
默认实现为(this == obj),比较两个对象地址是否相同。
可进行覆盖,比较两个对象的内容是否相同。

V. 覆盖equals的顺序:
1). 比较两个引用是否指向同一个对象。
2). 判断obj是否为null。
3). 判断两个引用指向的实际对象类型是否一致。
4). 强制类型转换。
5). 依次比较各个属性值是否相同。

VI. protected void finalize() throws Throwable //了解(面试题中可能有坑)
当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
垃圾对象:没有有效引用指向此对象时,为垃圾对象。
垃圾回收: 由GC销毁垃圾对象,释放数据存储空间。
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
手动回收机制:使用System.gc(); 通知JVM执行垃圾回收。

附加源代码:Windows --> Preferences --> Java --> Installed JREs --> 选中JRE --> Edit --> xxx/rt.jar --> Source Attachment --> External Location --> External File 选中src.zip

三、包装类:

  1. 概念:
    I. 基本类型所对应的引用类型
    II. Object可统一所有数据,包装类的默认值为null
    III. 包装类中实际上就是持有了一个基本类型的属性,作为数据的存储空间(Byte中有一个byte属性),还提供了常用的转型方法,以及常量,
    既可以存储值,又具备了一系列的转型方法和常用常量,比直接使用基本类型的功能更强大。
    IV. 包装类型中提供了若干转型的方法,可以让自身类型与其他包装类型、基本类型、字符串相互之间进行转换。

  2. 转型方法:
    I. 8种包装类型中,有6种是数字型(Byte、Short、Integer、Long、Float、Double),继承自java.lang.Number父类。
    II. java.lang.Number父类为所有子类分别提供了6个转型的方法,将自身类型转换成其他数字型。
    byteValue();
    shortValue();
    intValue();
    longValue();
    floatValue();
    doubleValue();

III. parseXXX(String s) 静态转型方法,7种包装类型都有,除了Character,都可以通过String进行构建
parseByte(“123”);
parseShort(“123”);
parseInt(“123”);
parseDouble(“123.45”);

IV. valueOf(基本类型)、valueOf(字符串类型),静态转型方法,8种包装类型都有
Byte b1 = Byte.valueOf( (byte)10 );
Byte b2 = Byte.valueOf( “20” );

V. 注意:在使用字符串构建包装类型对象时,要保证类型的兼容,否则产生NumberFormatException。

VI. JDK5之后,提供自动装箱、拆箱,简化使用包装类的编程过程
Byte b4 = 40;//自动装箱,将基本类型直接赋值给包装类型,调用valueOf(byte b)
byte b5 = b4;//自动拆箱,将包装类型的值,直接赋值给基本类型,调用byteValue()

VII. 自动装箱时,会调用valueOf方法,Byte、Short、Integer、Long,四种整数包装类型都提供了对应的cache缓冲区,将常用的256个数字提 前创建对象并保存在数组中,实现复用。即在区间的复用已有对象,在区间外创建新对象。

四、String:

  1. 概念:
    I. 字符串是常量,创建之后不可改变。
    II. 字符串字面值存储在字符串池中,可以共享。
    III. String s = “Hello”; 产生一个对象,保存在池中
    IV. String s2 = new String(“World”); 产生两个对象,池、堆各一个

集合:

  1. Collection体系集合:
    I. Collection父接口:该体系结构的根接口,代表一组对象,称为“集合”,每个对象都是该集合的“元素”。
    II. List接口的特点:有序、有下标、元素可重复。
    III. Set接口的特点:无序、无下标、元素不可重复。

  2. List子接口:
    I. 特点:有序、有下标、元素可以重复。
    II. 继承可父接口提供的共性方法,同时定义了一些独有的与下标相关的操作方法。

  3. List实现类:
    I. JDK8的ArrayList,实际初始长度是0
    II. 首次添加元素时,需要实际分配数组空间,执行数组扩容操作
    III. 真正向数组中插入数据,(Lazy懒)用的时候再创建,或再加载,有效的降低无用内存的占用

  4. ArrayList:
    I. 数组结构存储,查询快,增删慢。//注册(1次)-> 查询(N次)
    II. JDK 1.2发布,执行效率快,线程不安全。

  5. Vector:
    I. 数组结构存储,查询快,增删慢。
    II. JDK 1.0发布,执行效率慢,线程安全。

  6. LinkedList:
    I. 链表(链接列表)结构存储,查询慢、增删快。

II. 了解:Queue接口:队列、双端队列
III. 了解:栈结构Last In First Out(后进先出)
IV. 了解:队列结构First In First Out(先进先出)

  1. 泛型集合【重点-解决应用问题】:
    I. 概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致。
    II. 特点:
    1). 编译时即可检查,而非运行时抛出异常。
    2). 访问时,不必类型转换(拆箱)。
    3). 不同泛型之间引用不能相互赋值,泛型不存在多态。

  2. 泛型:高级类别的知识,熟练应用,需要时间、经验的积累(常用名称:E = Element / T = Type / K = Key / V = Value)
    I. 概念:约束-规范类型
    II. 泛型的场景:
    1). 定义泛型:
    A). 实例泛型:
    a). 类:创建对象时,为类所定义的泛型,进行参数化赋值
    b). 接口:实现接口时,为接口所定义的泛型,进行参数化赋值

B). 静态泛型:
a). 定义在方法的返回值类型前面:、、<T extends Comparable>、<T extends Comparable<? super T>> 可应用在形参列表、返回值两种场景上,不单单可以规范泛型,还可以语义化返回值。
b). 定义在方法的形参列表当中:<?>、<? extends Object>、<? super Integer>,不支持使用& 只能应用在形参列表上,规范泛型。

  1. Collections工具类:
    概念:集合工具类,定义了除了存取以外的集合常用方法。
    I. public static <T extends Comparable<? super T>> void sort(List list) //排序,要求:必须实现Comparable,必须可与自身类型比,以及父类类型比
    II. public static void reverse(List<?> list) //反转、倒置元素
    III. public static void shuffle(List<?> list) //随机重置顺序

  2. Set子接口:
    I. 特点:无序、无下标、元素不可重复(当插入新元素时,如果新元素与已有元素进行equals比较,结果为true时,则拒绝新元素的插入)
    II. 方法:全部继承自Collection中的方法

  3. foreach循环:
    for(数据类型 变量名 : 容器名称){ //可遍历集合或数组(常用在无序集合上)
    }

  4. Set接口实现类:
    I. HashSet【重要】:
    1). HashSet的底层使用的HashMap类,即是将所有需要存入HashSet的值,直接保存在HashMap中
    2). HashSet如何去掉重复?
    3). 先判断hashCode是否一致,==比较地址,equals比较内容

II. LinkedHashSet【了解】:
1). 底层使用LinkedHashMap(链表结构)存储,节点形式单独存储数据,并可以指向下一个节点,通过顺序访问节点,可保留元素插入顺序

III. TreeSet【了解】:
1). 实现了SortedSet接口,要求必须可以对元素排序。
2). 所有插入元素,必须实现Comparable接口,覆盖compareTo方法。
3). 根据compareTo方法返回0作为去重的依据,(意味重复)

  1. Map体系集合:
    I. Map:地图、映射
    I. 概念:存储一对数据(Key-value),无序、无下标、键不可重复、值可以重复。

II. HashMap算法:拿到任何一个对象好,通过hash(key)做运算,key>>>16(除以16),只可能得到0~15之间的一个数组,作为插入数组的下标
III. Hashtable:HashMap的线程安全版本
IV. TreeMap:自动对key做排序,根据compareTo的返回值去重
V. Properties:Hashtable 子类,主要用于存储key和value都是字符串的情况,常在读取配置文件之后,保存文件中的键值对。反射、JDBC

发布了21 篇原创文章 · 获赞 0 · 访问量 1967

猜你喜欢

转载自blog.csdn.net/qq_40091389/article/details/104721340