超详细的JAVA高级进阶基础知识03

目录

3. 面向对象高级 - 常用的API

3.1 Object 类

3.1.1 Object 类介绍

3.1.2 Object类的常用方法:

3.1.3 Objects 概述

3.2 Math 类

3.3 System 类

3.3.1 System 类概述

3.3.2 常用方法

3.4 BigDecimal 类

3.4.1 BigDecimal 类概述

3.4.2 BigDecimal 类使用

3.4.3 BigDecimal 类使用

3.5 包装类

3.5.1 包装类的介绍

3.5.2 包装类的好处 

3.5.3 基本类型对应的包装类 

3.5.4 以Integer包装类为例

3.5.5 Interger 常用方法

3.5.6 包装类面试题 

3.5.7 今日学习目标 

3.6 Runtime

3.6.1 获取Runtime对象的方法  

3.6.2 Runtime 的方法

3.7 浅拷贝、深拷贝 

3.7.1 对象克隆  

3.7.1 浅拷贝

3.7.2 深拷贝

3.7.3 总结


3. 面向对象高级 - 常用的API

什么是API?

  • API(Application Programming interface)  应用程序编程接口。
  • 简单来说:就是 Java 帮我们已经写好的一些类和方法,我们直接拿过来用就可以了

3.1 Object 类

3.1.1 Object 类介绍

  • 所有的类,都直接或者间接的继承了 Object 类 (祖宗类)
  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。

3.1.2 Object类的常用方法:

  

public class ToStringDemo {
    /*
         public String toString() 返回该对象的字符串表示

            public String toString() {
                return getClass().getName() + "@" + Integer.toHexString(hashCode());
            }

            getClass().getName() : 类名称, 全类名(包名 + 类名)
            Integer.toHexString() : 转十六进制
            hashCode() : 返回的是对象内存地址 + 哈希算法, 算出来的整数 (哈希值)

         -------------------------------------------------------

         细节: 使用打印语句, 打印对象名的时候, println方法, 源码层面, 会自动调用该对象的toString方法.

             public static String valueOf(Object obj) {
                return (obj == null) ? "null" : obj.toString();
             }
     */
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a);
        System.out.println(a.toString());

        Student stu = new Student("张三",23);
        System.out.println(stu);

        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        list.add("abc");
        list.add("abc");

        System.out.println(list);

    }
}

class A {

    @Override
    public String toString() {
        return "大哥重写了toString方法";
    }
}

 

结论: Object类中的equals方法, 默认比较的是对象内存地址                                                               - 通常会重写equals方法, 让对象之间, 比较内容

3.1.3 Objects 概述

  Objects类与 Object 还是继承关系Objects类是从JDK 1.7开始之后才有的。

3.2 Math 类

包含执行基本数字运算的方法

 

3.3 System 类

3.3.1 System 类概述

  • System的功能是静态的,都是直接用类名调用即可  ------ 工具类 

3.3.2 常用方法

3.4 BigDecimal 类

3.4.1 BigDecimal 类概述

   用于解决小数运算中, 出现的不精确问题

BigDecimal类 : 解决小数运算中, 出现的不精确问题

BigDecimal创建对象 :

        public BigDecimal(double val) : 不推荐, 无法保证小数运算的精确
        ---------------------------------------------------------------
        public BigDecimal(String val)
        public static BigDecimal valueOf(double val)

BigDecimal常用成员方法 :

        public BigDecimal add(BigDecimal b) : 加法
        public BigDecimal subtract(BigDecimal b) : 减法
        public BigDecimal multiply(BigDecimal b) : 乘法
        public BigDecimal divide(BigDecimal b) : 除法
        public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) : 除法

注意: 如果使用BigDecimal运算, 出现了除不尽的情况, 就会出现异常

3.4.2 BigDecimal 类使用

  ● 常用方法

3.4.3 BigDecimal 类使用

  • divide 除法细节 

3.5 包装类

3.5.1 包装类的介绍

基本数据类型 , 包装成 ( 变成引用数据类型 )

3.5.2 包装类的好处 

3.5.3 基本类型对应的包装类 

基本数据类型, 包装成 (变成引用数据类型)

  

3.5.4 以Integer包装类为例

由于基本数据类型对应的包装类使用方式大同小异,以下以Interger包装类为例展开

包装类 : 将基本数据类型, 包装成类, 变成引用数据类型

----------------------------------------------------------------------------------

手动装箱: 调用方法, 手动将基本数据类型, 包装成类

            1. public Integer(int value) : 通过构造方法 (不推荐)
            2. public static Integer valueOf(int i) : 通过静态方法

手动拆箱: 调用方法, 手动将包装类, 拆成(转换)基本数据类型

            1. public int intValue() : 以 int 类型返回该 Integer 的值

JDK5版本开始, 出现了自动拆装箱 :

3.5.5 Interger 常用方法

3.5.6 包装类面试题 

public class InterView {
    /*
        看程序说结果, 并说明原因

        自动装箱的时候, 如果装箱的数据范围, 是-128~127, ==号比较的结果就是true, 反之都是false

        -----------------------------------------------------------------------------------

        自动装箱的原理 : 自动帮我们调用了 Integer.valueOf(127);

                                        // i = 127
            public static Integer valueOf(int i) {
                if (i >= -128 && i <= 127) {
                    return IntegerCache.cache[255];
                }
                return new Integer(i);
            }

            如果装箱的数据, 不在 -128 ~ 127 之间, 会重新创建新的对象
            如果装箱的数据, 在 -128 ~ 127 之间, 不会创建新的对象, 而是从底层的数组中, 取出一个提前创建好的Integer对象, 返回

                    - Integer类中, 底层存在一个长度为256个大小的数组, Integer[] cache
                            在数组中, 存储了256个Integer对象, 分别是 -128 ~ 127
     */
    public static void main(String[] args) {
        Integer i1 = 127;
        Integer i2 = 127;
        System.out.println(i1 == i2);       // true

        Integer i3 = 129;
        Integer i4 = 129;
        System.out.println(i3 == i4);       // false

        Long i11 = 129L;
        Long i22 = 129L;

        System.out.println(i11 == i22);
        System.out.println(i11.equals(i22));
    }
}

3.5.7 今日学习目标 

3.6 Runtime

          Runtime表示当前虚拟机的运行环境

3.6.1 获取Runtime对象的方法  

观察下面源码知:由于RunTime 构造方法被私有化,故获取Runtime的对象的方法为:

RunTime.getRuntime()

  

3.6.2 Runtime 的方法

3.7 浅拷贝、深拷贝 

3.7.1 对象克隆  

     把A对象的属性值完全拷贝给B对象,也叫对象拷贝、对象复制 

 2.克隆对象
        细节:   方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。
 3.书写细节:

  1.   重写Object中的clone方法
  2.   让javabean类实现Cloneable接口
  3.   创建原对象并调用clone就可以了

Cloneable 如果一个接口里面没有抽象方法

表示当前的接口是一个标记性接口

现在Cloneable表示一旦实现了,那么当前类的对象就可以被克降

如果没有实现,当前类的对象就不能克隆 

 Cloneable接口源码 

  

3.7.1 浅拷贝

浅拷贝内存结构演示 

3.7.2 深拷贝

深拷贝内存结构演示 

  

浅克隆与深克隆的区别

 

深拷贝的使用方式

    一般会用第三方工具进行克隆

    

    

     1.第三方写的代码导入到项目中
     2.编写代码

​​    Gson gson =new Gson();
        //把对象变成一个字符串
    String s=gson.toJson(u1);
     
        //再把字符串变回对象就可以了
    User user =gson.fromJson(s, User.class);

 

具体代码如下


public class ObjectDemo4 {
    public static void main(String[] args) throws CloneNotSupportedException {
        // protected object clone(int a) 对象克隆 

        //1.先创建一个对象
        int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0};
        User u1 = new User(1, "zhangsan", "1234qwer", "girl11", data);

       
        //User u2 =(User)u1.clone();

        //验证一件事情:Object中的克隆是浅克隆
        //想要进行深克隆,就需要重写clone方法并修改里面的方法体
        //int[] arr = u1.getData();
        //arr[0] = 100;

        //System.out.println(u1);
        //System.out.println(u2);


        //以后一般会用第三方工具进行克隆
        //1.第三方写的代码导入到项目中
        //2.编写代码
        //Gson gson =new Gson();
        //把对象变成一个字符串
        //String s=gson.toJson(u1);
        //再把字符串变回对象就可以了
        //User user =gson.fromJson(s, User.class);

        //int[] arr=u1.getData();
        //arr[0] = 100;

        //打印对象
        //System.out.println(user);


    }
}

3.7.3 总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值