常用类


内部类

1. 基本概念

  1. 分类:成员内部类、静态内部类、局部内部类、匿名内部类
  2. 概念:在一个类的内部再定义一个完整的类。
  3. 特点:
    (1)编译之后可生成独立的字节码文件
    (2)内部类可直接访问外部类的私有成员,而不破坏封装。
    (3)可为外部类提供必要的内部功能组件。

2. 成员内部类

  1. 在类的内部定义,与实例变量、实例方法同级别的类。
  2. 属于外部类的一个实例部分,创建内部类对象,必须依赖外部类对象。
  3. 创建

Outer out=new Outer();
Outer.Inner in=out.new Inner();

  1. 当外部类存在同名属性时,优先访问内部类属性,通过外部类类名.this.外部类实例属性
  2. 成员内部类不能定义静态成员

3. 静态内部类

  1. 不依赖外部类对象,可直接创建或通过类名访问,也可声明静态成员
  2. 创建

Outer.Inner.静态成员
Outer.Inner in=new Outer.Inner();

4. 局部内部类

  1. 定义在外部类的方法中,作用范围和创建对象的范围仅限当前方法中。
  2. 局部内部类访问外部类局部变量时,因无法保障变量的生命周期与自身相同,所以修饰为final。
  3. 隐藏类的信息、限制类的作用范围。

5. 匿名内部类

  1. 没有类名的局部内部类
  2. 必须继承一个父类或实现一个接口。
  3. 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
  4. 优:减少代码量,书写的思路流畅。
  5. 劣:可读性较差。
  • API:Appplication Programming Interface应用程序编程接口(一些预先定义的函数)

Object类

1.概念

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

2. 常用方法:

1.public final Class<?> getClass ( ) { }

  • 返回引用中存储的实际对象类型。
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致。

2.public int hashCode ( ) { }

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

3.public String toString ( ) { }

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

4.public boolean equals(Object obj) { }

  • 默认实现为(this == obj),比较两个对象地址是否相同。
    可进行覆盖,比较两个对象的内容是否相同。

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

5.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. 概念

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

2. 转型方法

  1. 8种包装类型中,有6种是数字型(Byte、Short、Integer、Long、Double)继承自java.long.Number父类
  2. java.long.Number父类为所有子类分别提供了6个转型的方法,将自身类型转换成其他数字型。

byteValue(), shortValue(), intValue(),
longValue(),doubleValue(),floatValue()

  1. paraseXXX(String s)静态转型方法,7种包装类型都有。除了Character,都可以通过String进行构建

byte b=paraseByte(“123”);
paraseShort(“123”); paraseInteger(“123”);
paraseLong(“123”); paraseDouble(“123”); paraseFloat(“123”);

  1. valueOf(基本类型)、valueOf(字符串类型),静态转型方法,8种包装类型。

Byte b1=Byte.valueOf((byte)10);
Byte b2=Byte.valueOf(“20”);

  • 注意:在使用字符串构建包装类型对象时,要保证类型的兼容,否则产生NumberFormatException
  1. JDK5之后,自动装箱、拆箱,简化使用包装类的编程过程

Byte b4=40;//自动装箱,将基本类型直接赋值给包装类型调valueOf(byte b) byte
b5=b4;//自动拆箱,将包装类型的值,直接赋值给基本类型调用byteValue()

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

String

1. 概念

  1. 字符串是常量,创建之后不可改变。
  2. 字符串字面值存储在字符串池中,可以共享。

2. 创建及常用方法

String s = “Hello”; 产生一个对象,保存在池中
String s2 = new String(“World”); 产生两个对象,池、堆各一个

(上周总结)常用类&集合

3. 可变字符串:

  1. StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全。
  2. StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全。

4. BigDecimal

  1. 位置:java.math包中
  2. 作用:精确计算浮点数
  3. 创建方式:BigDecimal bd=new BigDecimal(“1.0”);
  4. 方法:

BigDecimal add(BigDecimal bd); 加
BigDecimal subtract(BigDecimal bd); 减
BigDecimal multiply(BigDecimal bd); 乘
BigDecimal divide(BigDecimal bd); 除
BigDecimal(BigDecimal bd,int scal,RoundingMode mode);除法

  • 参数scal:指定精确到小数点后几位
  • 参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式,
    取值为BigDecimal.ROUND_HALF_UP

集合

1 .Collection体系集合

  1. Collection父接口:该体系结构的根接口,代表一组对象,称为“集合”,每个对象都是该集合的”元素”
  2. 概念:对象的容器,存储对象的对象,可替代数组
    特点:容器的工具类,定义了对多个对象进行操作的方法
    位置:java.util.*;
    代表一组任意类型的对象,无序、无下标
  3. List接口特点:有序、有下标、元素可重复
  4. Set接口特点:无序、无下标、元素不可重复

2. List接口

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

3. List实现类:

  1. JDK8的ArrayList,实际长度是0
  2. 首次添加元素时,需要实际分配数组空间,执行数组扩容操作(10)
  3. 真正向数组空间插入数据,Lazy懒用的时候再创建,或再加载,有效降低无用内存空间
  4. ArrayList
    (1)数组结构存储,查询快,增删慢。//注册(1次)—>查询(N次)
    (2)JDK1.2版本,运行效率快、线程不安全
  5. Vector
    (1)数组结构存储,查询快,增删慢
    (2)JDK1.0版本,运行效率慢、线程安全
  6. LinkedList:
    链表(链接列表)结构存储,查询慢,增删快
    了解:Queue接口:队列、双端队列
    了解:栈结构Last In First Out(后进先出)
    了解:队列结构:First In First Out(先进先出)
    (上周总结)常用类&集合

4. 泛型集合

  1. 概念:参数化类型、类型安全的集合。强制集合元素类型必须一致。

  2. 特点:
    (1)编译时即可检查,而非运行时抛出异常。
    (2)访问时,不必类型转化(拆箱)
    (3)不同泛型之间引用不能相互赋值,泛型不存在多态

  3. 泛型:高级类别的知识,熟练应用,需要时间、经验积累(常用名称:E=Element/T=Type/K =Key/V=Value)
    (1)概念:约束、规范类型
    (2)泛型的场景:
    定义泛型:
    A)实例泛型(类、接口):

    a)类:创建对象时,为类所定义的泛型,进行参数化赋值
    b)接口:实现接口时,为借口所定义的泛型,进行参数化赋值

    B)静态泛型

a)定义在方法的返回值类型前面,
< T >、< T extends Object>、<T extends Comparable< T >>、
<T extends Comparable<? Super T>

  • 可应用在形参列表、返回值两种场景下,不单单可以规范泛型,还可以语义化返回值

b)定义在方法的形参列表当中:
<?>、<? Extends Object>、<? Super Integer>

  • 不支持使用&。只能应用在参数列表上,规范泛型

5. Collections工具类

1.public static<T extends Comparable<? Super T>> void sort(List list)//排序, 要求:必须实现Comparable,必须可与自身类型相比,以及父类类型相比
2.public static void reverse(List<?> list)//反转、倒置元素
3.public static void shuffle随机重置顺序

  • 经验:一级目标能看懂能调用,二级目标能定义、能设计

6. set子接口

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

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

  1. Set接口实现类
  • HashSet(重要):
    1)HashSet的底层使用的HashMpa类,即将即将所有需要存入HashSet的值,直接保存在HashMap中
    2)先判断hashcode是否一致,==比较地址,equals比较内容
  • LinkedHashSet(了解)
    底层使用LinkedHashMap(链表结构)存储,节点形式独立存储数据,并可以指向下一个节点,通过顺序访问节点,可保留元素插入顺序
  • TreeSet(了解)
    1)实现了SortedSet接口,要求必须可以对元素排序。底层TreeMap
    2)所有插入元素,必须实现Comparable接口,覆盖compareTo方法
    3)根据compareTo方法返回0作为去重依据,(意为重复)

7. Map体系集合

  1. Map地图、映射
    概念:存储一对数据(Key-Value),无序、无下表,键不可重复,值可重复
  2. HashMap算法:拿到任何一个对象后,通过hash(key)做运算,key>>>16(除以16),只可能得到0~15之间的一个数组,作为插入数组的下标
  3. 分类:
  • HashTable:HashMap的线程安全版本
  • TreeMap:自动对key做排序,根据compareTo的返回值去重
  • Properies:Hashtable子类,主要用于存储key和value都是字符串的情况,常在读取配置文件后,保存文件中的键值对。反射、JDBC
  1. Map集合的遍历
    (1)keySet();获得Map集合的所有键,返回的是Set集合
    (2)Values();获得Map集合中的所有值。返回的是Collection集合
    (3)entrySet();返回的是Map.Entry(Node)包含了getKey()和getValue()。直接输出调用的是toString打印键值对
    (4)Iterator迭代器 专注于迭代Collection体系集合的

相关文章:

  • 2022-12-23
  • 2021-12-01
  • 2021-12-24
猜你喜欢
  • 2021-06-22
  • 2021-11-21
  • 2022-01-07
  • 2021-09-24
  • 2021-11-19
相关资源
相似解决方案