常用类的概念. 常用类一、Object类1. Object类的介绍(1) Object类位于java.lang包中是继承关系的根类、超类是所有类的父类(直接的父类或是间接父类)(2) Object类型的引用可以用于存储任意类型的对象。(3) Object类中定义方法所有类都可以直接使用。2. Object类中常用方法(1) getClass()返回引用中实际存储的对象类型。【理解】开发实际应用用于判断两个引用中实际存储的对象类型是否一致一致→true;不一致→false。class Animal{}class Dog extends Animal{}class Cat extends Animal{}//案例Animal a1 new Cat();Animal a2 new Dog();System.out.println(a1.getClass() a2.getClass());(2) int hashCode()返回对象的整数哈希码值。对象的哈希码值来源是将十六进制的地址转换十进制的整数的结果。注意由于不同的对象在堆空间中有不同的十六进制的地址所有不同的对象具有不同哈希码值。(3) String toString()返回该对象字符串的变现形式。【开发重点】a. 作用方便展示对象的信息子类通常将toString方法覆盖。toString方法覆盖的原则如下通常将所有的属性拼接为一个字符串进行结果返回。b. 案例public String toString(){return namename,ageage; // this. 省略}c. get方法和toString方法区别I. get方法是返回对象的单个属性的信息并且不会改变属性对应数据类型II. toString方法获取所有属性的信息并且将所有属性拼接为一个String类型的结果进行返回。(4) boolean equals(Object o)用于比较对象内容是否相同。【开发应用重点】a. 的应用I. 如果 两端为基本数据类型的变量则判断变量中数值是否相同如果 两端为引用类型的变量则判断引用中存储的地址是否相同。II. 开发中 两端为引用类型的实际应用通常用于判断两个引用是否指向同一个对象。引用名1 引用名2 结果为true代表两个引用指向同一个对象结果为false,代表两个引用指向不同的对象。b. equals方法的应用I. 父类Object类中equals方法实现原理如下public boolean equals(Object obj) {return (this obj);}注意父类中的equals方法是用于比较两个引用是否是同一个对象但是开发时通常用equals方法比较对象的内容所以父类中equals方法不足以满足子类的需求则需要覆盖父类Object中equals方法。II. equals方法覆盖的原则public boolean equals(Object obj){// 1. 自反性:判断当前对象和要比较的对象是否指向同一个对象 this 和 objif(this obj){return true;}// 2. 判断 obj是否空if(obj null){return false;}// 3. 判断 两个引用中实际存储的对象类型是否一致if(this.getClass() ! obj.getClass()){return false;}// 4. 强制类型转换为——比较对象属性做准备Student s (Student)obj;// 5. 将对象中属性一一进行比较:基本数据类型的属性 引用类型equals比较if(this.age s.age this.score s.score this.name.equals(s.name)){return true;}else{return false;}}面试重点 和 equals方法的区别。解析(1) 的应用两端为基本数据类型比较变量中数值是否相同两端为引用类型的变量比较引用存储地址是否相同(2) equals方法Object类中方法用于实现()实现比较对象地址但是实际开发时需要将equals方法进行覆盖用于比较对象的内容是否相同。(5) finalize()JVM进行垃圾回收时,自动调用的方法。(垃圾回收器回收垃圾对象)(JVM性能调优时关注)【面试】a. 垃圾对象没有任何引用指向的对象。Student s new Student();s null; // 将s指向的对象设置为 垃圾对象b. 垃圾回收器用于JVM回收垃圾对象。简称为gc / GCc. 垃圾回收的目的清除垃圾对象释放空间提高空间利用率。d. 垃圾回收器回收垃圾对象时机① 自动回收机制当JVM内存耗尽时不能再为新创建的对象分配空间时JVM中垃圾回收器会自动将所有的垃圾对象一次性进行回收垃圾回收器进行回收垃圾对象时自动调用finalize方法。② 手动回收机制利用System.gc();通知垃圾回收器(GC)进行垃圾回收如果GC空闲则进行垃圾回收如果GC繁忙则暂不回收。注意开发时finalize方法中不写任何重要代码finalize方法的执行节点不可控。二、包装类(位于java.lang包中)1. 概念基本数据类型对应引用类型称之为基本数据类型的包装类。2. 基本数据类型对应的包装类【重点】基本数据类型 包装类类名byte Byteshort Shortint Integerlong Longfloat Floatdouble Doublechar Characterboolean Boolean3. 数据之间转换【了解】(1) int 和 Integer之间的转换int ----- Integera. Integer i1 new Integer(12); // 借助构造方法b. Integer i2 Integer.valueOf(12); // 借助Integer类中的静态方法Integer ----- inta. int a1 i1.intValue(); // 借助Integer类中的成员方法 intValue()(2) String 和 Integer之间的转换String ---- Integera. Integer i3 new Integer(123); // 借助Integer类中的构造方法b. Integer i4 Integer.valueOf(123); // 借助Integer类中的静态方法Integer ---- Stringa. String s1 i4.toString();b. String s2 i4;//借助字符串的拼接(3) int 和 String之间的转换int --- Stringa. int a 3;String s3 a;String --- int 【开发应用重点】int a Integer.parseInt(123); // 借助 Integer类中静态方法注意将String类型的数据转换为int/Integer类型的数据要求要转换的String数据类型必须是纯数字否则运行报错错误信息如下java.lang.NumberFormatException (数字格式转换异常)4. 自动装箱、自动拆箱(1) JDK5.0之后提供自动装箱和自动拆箱的功能基本数据类型和对应包装类型之间可以相互自动转换(2) 自动装箱基本数据类型可以直接赋值给其对应的包装类型。自动拆箱包装类型的引用可以直接赋值给其对应的基本数据类型的变量。(3) 案例Integer i 12; // 自动装箱int a i; // 自动拆箱(4) 自动装箱实现的原理自动装箱底层调用的时Integer类中 静态的 valueOf方法【面试难点】public static Integer valueOf(int i) {if (i -128 i 127)return IntegerCache.cache[i (-IntegerCache.low)];return new Integer(i); // 如果 传入数据不在-128~127之间则new Integer类型对象}注意Java中将-128~127常用数据段的内容进行了预先的包装处理转换数据只要在-128~127之间不需要每次创建对象而是从处理结果中直接获取即可-128~127处理结果存储在缓冲区中、常量池。面试题目Integer i1 12;Integer i2 12;System.out.println(i1i2); // trueInteger i3 150;Integer i4 150;System.out.println(i3i4); // false5. 包装类实际开发应用【开发重点】(1) 可以用于区分有效数据和无效数据例如 0 和 null0.0和null.(2) 场景开发时通常将类中属性定义为基本数据类型对应包装类型。--区分有效数据和无效数据的三、String类【开发重点】1. 创建字符串的方式【面试重点】(1) String s1 hello; // 只会创建一个对象在串池中产生(2) String s2 new String(world); // 产生两个对象。一个在堆空间中一个在串池中产生。注意如果串池中已经存在的字符串常量对象不会重复创建。2. String类中常用方法(1) char charAt(int index)根据下标获取对应的字符。注意String类中封装了一个char类型数组下标范围 0~字符串的长度-1如果指定的下标超出下标范围则运行报错错误信息为java.lang.StringIndexOutOfBoundsException(数组下标越界)(2) boolean contains(String str)判断一个字符串中是否包含str子串包含→true;否则→false.(3) boolean equals(String str)比较两个字符串内容是否相同相同→true;否则→false.注意开发时比较字符串内容需要用equals方法比较。(4) int length()获取字符串的长度。注意获取数组的长度数组名.length ;// 思考如何遍历字符串String s hello;for(int i0;is.length();i){// 通过下标获取 对应的字符charAtchar c s.charAt(i);System.out.println(c);}(5) String trim()去除字符串前后的空格。注意应用场景结合将String转换int/Integer时应用String age 18 ;int n Integer.parseInt(age.trim());(6) String[] split(String str)将当前字符串进行拆分拆分结果封装为一个String类型的数组。3. String的不可变性【面试题目】(1) String的字面值是字面常量如果在字符串上进行操作在原有字符串的基础上拷贝一个副文本在副文本上完成操作(字符串拼接)。(2) 由于String具有不可变性所以在完成字符串拼接时效率较低。注意String s ab;上面的字符串拼接只创建一个对象。原因如果 两端都为字符串常量时编译器在编译阶段将ab直接编译为ab,称为编译器可知。四、可变长的字符串(位于java.lang包)1. StringBuffer:JDK1.0版本线程安全运行效率慢StringBuilder:JDK5.0版本线程不安全运行效率快。2. 常用的构造方法(1) public StringBuilder()无参数的构造方法(2) public StringBuilder(String str)带有字符串类型参数的构造方法3. 常用功能方法StringBuilder append(String str)字符串的拼接4. 注意StringBuilder是可变长字符串所有拼接效率远远高于 String。面试题目 String 和 StringBuilder、StringBuffer的区别。解析(1) String 是不可变长的字符串在完成字符串拼接时效率较低。String线程安全。(2) StringBuilder是可变长的字符串在完成字符串拼接时效率较高。StringBuilder线程不安全。(3) StringBuffer是可变长的字符串在完成字符串拼接时效率较高StringBuffer线程安全。五、BigDecimal类【了解】1. BigDecimal类位于java.math包中2. 作用精确的表示、计算浮点数3. 常用的构造方法public BigDecimal(String n)带有字符串类型构造方法4. 常用的方法(1) BigDecimal r1 bd1.add(bd2); // 加法 bd1 bd2(2) BigDecimal r2 bd1.subtract(bd2); // 减法 bd1 - bd2(3) BigDecimal r3 bd1.multiply(bd2); // 乘法 bd1*bd2(4) BigDecimal r4 bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP); // 除法 bd1/bd2参数说明第一个参数分母数据第二个参数指定保留到小数点后几位第三个参数取舍模式通常采用四舍五入(BigDecimal.ROUND_HALF_UP)