常用API(Java)

Object

场景:当我们使用toString方法想要输出对象变量时,官方提供的toString方法会直接输出对象所在的地址,而不是我们想要的对象变量,所以我们要把toString方法进行重写。

改写代码:

  @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }

调用代码:

public static void main(String[] args) {
        Student s = new Student("沙雕", '男', 23);
         String rs = s.toString();
         System.out.println(rs);

         System.out.println(s.toString());

        // 直接输出对象变量,默认可以省略toString调用不写的
        System.out.println(s);
    }

场景:当我们想要使用equals方法比较集合中两个对象变量是否相等时,使用官方提供的equals方法比较的是两个对象的地址,结果显然为false(比较的对象不是同一个),那么我们需要将equals方法进行重写。

官方代码改写:

 /**
     定制相等规则。
     两个对象的内容一样就认为是相等的
     s1.equals(s2)
     比较者:s1 == this
     被比较者: s2 ==> o
     */
    @Override
    public boolean equals(Object o) {
        // 1、判断是否是同一个对象比较,如果是返回true。
        if (this == o) return true;
        // 2、如果o是null返回false  如果o不是学生类型返回false  ...Student !=  ..Pig
        if (o == null || this.getClass() != o.getClass()) return false;
        // 3、说明o一定是学生类型而且不为null
        Student student = (Student) o;
        return sex == student.sex && age == student.age && Objects.equals(name, student.name);
    }

自己代码改写:

  /**
       自己重写equals,自己定制相等规则。
        两个对象的内容一样就认为是相等的
     s1.equals(s2)
     比较者:s1 == this
     被比较者: s2 ==> o
     */
 /*   @Override
    public boolean equals(Object o){
        // 1、判断o是不是学生类型
        if(o instanceof Student){
            Student s2 = (Student) o;
            // 2、判断2个对象的内容是否一样。
//            if(this.name.equals(s2.name) &&
//                 this.age == s2.age && this.sex == s2.sex){
//                return true;
//            }else {
//                return false;
//            }
            return this.name.equals(s2.name) && this.age == s2.age
                    && this.sex == s2.sex ;

        }else {
            // 学生只能和学生比较,否则结果一定是false
            return false;
        }
    }*/

代码调用:

public static void main(String[] args) {
        Student s1 = new Student("沙雕", '男', 19);
        Student s2 = new Student("沙雕", '男', 19);
        // equals默认是比较2个对象的地址是否相同,子类重写后会调用子类重写的来比较内容是否相同。
        System.out.println(s1.equals(s2));
        System.out.println(s1 == s2);

        System.out.println(Objects.equals(s1, s2));
    }

Objects(JDK 1.7开始才有)

说明:比较两个对象的变量,底层会先进行非空判断,从而可以避免空指针异常。再进行equals方法比较。,相较于Object的equals方法更加安全且结果一样。
代码:

public static boolean equals(Object a, Object b) {
                     return (a == b) || (a != null && a.equals(b));
             }

**说明:判断变量是否为null,为null返回true,反之false。

public static boolean equals(Object a, Object b) {
                     return (a == b) || (a != null && a.equals(b));
             }

StringBuilder

  • StringBuilder是一个可变的字符串类,我们可以把它看成一个对象容器。
  • 作用:提高字符串的操作效率,如拼接、修改等。
  • String对象是不可改变的。每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能。
StringBuilder sb = new StringBuilder(); // ""
        sb.append("a");
        sb.append("b");
        sb.append("c");
        sb.append(1);
        sb.append(false);
        sb.append(3.3);
        sb.append("abc");
        System.out.println(sb);  //abc1false3.3abc

支持链式编程*

StringBuilder sb1 = new StringBuilder();
        // 支持链式编程
        sb1.append("a").append("b").append("c").append("我爱你中国");
        System.out.println(sb1);  //abc我爱你中国

支持反转

 // 反转
        sb1.reverse().append("110");
        System.out.println(sb1);//国中你爱我cba110

字符串长度

  System.out.println(sb1.length()); // 11

使用String方法拼接数组使用+会在内存中产生多个对象,所以使用StringBuilder()方法效率比之高很多。
方法重写代码:

 /**
       1、定义方法接收任意整型数组,返回数组内容格式
     */
    public static String toString(int[] arr){
       if(arr != null){
            // 2、开始拼接内容。
           StringBuilder sb = new StringBuilder("[");
           for (int i = 0; i < arr.length; i++) {
               sb.append(arr[i] ).append(i == arr.length - 1 ? "" : ", ");
           }
           sb.append("]");
           return sb.toString();
       }else {
           return null;
       }

方法调用及结果

public static void main(String[] args) {
        int[] arr1 = null;
        System.out.println(toString(arr1));

        int[] arr2 = {10, 88, 99};
        System.out.println(toString(arr2));

        int[] arr3 = {};
        System.out.println(toString(arr3));
  //结果
      null
      [10, 88, 99]
      []
    }

Math

  • 包含执行基本数字运算的方法,Math类没有提供构造器,都是静态方法。
  • 直接通过类名调用。
public static int abs(int a)
public static double ceil(double a)
public static double floor(double a)
public static double pow(double a, double b)
public static long round(double a)
 //  [0 - 6] + 3
        int data =  (int)(Math.random() * 7) + 3;
        System.out.println(data);

System类

  • System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。

说明:返回当前系统的时间毫秒值形式

// 2、计算机认为时间有起源:返回1970-1-1 00:00:00 走到此刻的总的毫秒值:时间毫秒值。

long time = System.currentTimeMillis();

应用: &#x8FDB;&#x884C;&#x65F6;&#x95F4;&#x7684;&#x8BA1;&#x7B97;&#xFF1A;&#x6027;&#x80FD;&#x5206;&#x6790;

// 2、计算机认为时间有起源:返回1970-1-1 00:00:00 走到此刻的总的毫秒值:时间毫秒值。
        long time = System.currentTimeMillis();
        System.out.println(time);

        long startTime = System.currentTimeMillis();
        // 进行时间的计算:性能分析
        for (int i = 0; i < 100000; i++) {
            System.out.println("输出:" + i);
        }
        long endTime = System.currentTimeMillis();
        System.out.println((endTime - startTime)/1000.0 + "s");

说明:数组拷贝

  // 3、做数组拷贝(了解)
        /**
         arraycopy(Object src,  int  srcPos,
         Object dest, int destPos,
         int length)
         参数一:被拷贝的数组
         参数二:从哪个索引位置开始拷贝
         参数三:复制的目标数组
         参数四:粘贴位置
         参数五:拷贝元素的个数
         */
        int[] arr1 = {10, 20, 30, 40, 50, 60, 70};
        int[] arr2 = new int[6]; // [0, 0, 0, 0, 0, 0] ==>  [0, 0, 40, 50, 60, 0]
        System.arraycopy(arr1, 3, arr2, 2, 3);
        System.out.println(Arrays.toString(arr2));

BigDecimal

  • 用于解决浮点型运算精度失真的问题。

BigDecimal大数据类。

&#x5F15;&#x5165;&#xFF1A;
    &#x6D6E;&#x70B9;&#x578B;&#x8FD0;&#x7B97;&#x7684;&#x65F6;&#x5019;&#x76F4;&#x63A5;+  * / &#x53EF;&#x80FD;&#x4F1A;&#x51FA;&#x73B0;&#x6570;&#x636E;&#x5931;&#x771F;&#xFF08;&#x7CBE;&#x5EA6;&#x95EE;&#x9898;&#xFF09;&#x3002;
    BigDecimal&#x53EF;&#x4EE5;&#x89E3;&#x51B3;&#x6D6E;&#x70B9;&#x578B;&#x8FD0;&#x7B97;&#x6570;&#x636E;&#x5931;&#x771F;&#x7684;&#x95EE;&#x9898;&#x3002;

BigDicimal&#x7C7B;&#xFF1A;
    &#x5305;&#xFF1A;java.math.

    &#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x5F0F;&#xFF08;&#x6700;&#x597D;&#x7684;&#x65B9;&#x5F0F;&#xFF1A;&#xFF09;
          public static BigDecimal valueOf(double val) :&#x5305;&#x88C5;&#x6D6E;&#x70B9;&#x6570;&#x6210;&#x4E3A;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;&#x3002;
    &#x65B9;&#x6CD5;&#x58F0;&#x660E;
          public BigDecimal add(BigDecimal value)       &#x52A0;&#x6CD5;&#x8FD0;&#x7B97;
          public BigDecimal subtract(BigDecimal value)  &#x51CF;&#x6CD5;&#x8FD0;&#x7B97;
          public BigDecimal multiply(BigDecimal value)  &#x4E58;&#x6CD5;&#x8FD0;&#x7B97;
          public BigDecimal divide(BigDecimal value)    &#x9664;&#x6CD5;&#x8FD0;&#x7B97;
          public double doubleValue(): &#x628A;BigDecimal&#x8F6C;&#x6362;&#x6210;double&#x7C7B;&#x578B;&#x3002;

代码:

public static void main(String[] args) {
        // 浮点型运算的时候直接+  * / 可能会出现数据失真(精度问题)。
        System.out.println(0.09 + 0.01);
        System.out.println(1.0 - 0.32);
        System.out.println(1.015 * 100);
        System.out.println(1.301 / 100);

        System.out.println("-------------------------");
        double a = 0.1;
        double b = 0.2;
        double c = a + b;
        System.out.println(c);
        System.out.println("--------------------------");
        // 包装浮点型数据成为大数据对象 BigDeciaml
        BigDecimal a1 = BigDecimal.valueOf(a);
        BigDecimal b1 = BigDecimal.valueOf(b);
        BigDecimal c1 = a1.add(b1);
        // BigDecimal c1 = a1.subtract(b1);
        // BigDecimal c1 = a1.multiply(b1);
        // BigDecimal c1 = a1.divide(b1);
        System.out.println(c1);

        // 目的:double
        double rs = c1.doubleValue();
        System.out.println(rs);

        // 注意事项:BigDecimal是一定要精度运算的
        BigDecimal a11 = BigDecimal.valueOf(10.0);
        BigDecimal b11 = BigDecimal.valueOf(3.0);
        /**
           参数一:除数 参数二:保留小数位数  参数三:舍入模式
         */
        BigDecimal c11 = a11.divide(b11, 2, RoundingMode.HALF_UP); // 3.3333333333
        System.out.println(c11);

        System.out.println("-------------------");
    }

Original: https://www.cnblogs.com/zhangyouren/p/16441321.html
Author: Haziy
Title: 常用API(Java)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621922/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 第17章 触发器

    第17章 触发器 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 &#x5546;&#x54C1;&#x4FE1;&#x…

    数据库 2023年6月6日
    0122
  • JavaScript Date 时间类型 .toISOString() 时差问题

    JS中使用 toISOString 方法导致差了8个小时的问题 使用 getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。对差的时间进行补…

    数据库 2023年6月11日
    089
  • MySQL并行复制(MTS)原理(完整版)

    MySQL 5.6并行复制架构 MySQL 5.7并行复制原理 Master 组提交(group commit) 支持并行复制的GTID slave LOGICAL_CLOCK(由…

    数据库 2023年5月24日
    0104
  • ubuntu下vscode安装go插件失败解决办法

    mac环境下设置GOSUMDB,可能会导致不会库到校验不通过 go env -w GOSUMDB=gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVo…

    数据库 2023年6月14日
    0107
  • Python学习笔记(八)–Django框架

    1.什么是框架? 框架就是程序的骨架,主体结构,也是个半成品。 2.框架的优缺点 可重用、成熟,稳健、易扩展、易维护。 3.Python中常见的框架 (1)大包大揽Django被官…

    数据库 2023年6月16日
    0115
  • Flume和 Sqoop

    vim flume-dir-hdfs.conf 添加如下内容 a3.sources = r3 a3.sinks = k3 a3.channels = c3 Describe/con…

    数据库 2023年6月16日
    087
  • 当你想静下来的时候,你就可以静下来。

    当你想静下来的时候,你就可以静下来。1,2年前,我有时还在为当时选的专业恼悔,因为继续教育是同事推荐的,最后同事给我的消息是,他在疫情后去其他公司,做人工智能的公司,拿月薪20K,…

    数据库 2023年6月11日
    089
  • Shell第一章《变量》

    什么是shell shell-‘壳’ 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程…

    数据库 2023年6月14日
    082
  • Executor 创建线程

    Executors创建有四种创建方式: newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIF…

    数据库 2023年6月9日
    0100
  • MySQL启动过程详解五:GTID的处理

    MySQL启动过程中 GTID 的处理: 在核心模块启动函数 init_server_components() 会调用 gtid_server_init() 初始化 gtid se…

    数据库 2023年6月9日
    085
  • Mock.js的简单使用

    Mock.js的简单使用 简述 Mock.js 是一款 模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试。 功能 根据数据模板生成模拟数据。 模拟 Ajax …

    数据库 2023年6月11日
    0115
  • ConcurrentHashMap深入剖析(基于JDK1.7)

    1 package cn.com.pep.concurrent; 2 3 import java.util.concurrent.ConcurrentMap; 4 import j…

    数据库 2023年6月14日
    0107
  • Rocksdb Compaction原理

    compaction主要包括两类:将内存中imutable 转储到磁盘上sst的过程称之为flush或者minor compaction;磁盘上的sst文件从低层向高层转储的过程称…

    数据库 2023年6月9日
    096
  • MySQL慢查询优化问题-解决办法

    根据发现的问题,找出原因,然后对症下药。 [En] According to the problems found, find the cause, and then prescr…

    数据库 2023年5月24日
    096
  • MySQL中的触发器

    1.定义: 触发器和存储过程相似,都是嵌入到 MySQL 中的一段程序。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会激活触发器来执行相应的操作。这些事件称为触发条件,…

    数据库 2023年6月16日
    0112
  • 前后端数据交互利器–Protobuf

    Protobuf 介绍 简而言之,Protobuf 是 Google 开源的一款用于处理前后端数据交互格式的工具。通常来讲前后端使用的编程语言是不同的,使用 Protobuf无需多…

    数据库 2023年6月16日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球