你真的了解java吗?java总结六

你真的了解java吗?java总结六,第1张

java冷知识:在方法中声明的类称为局部类(也属于内部类),局部类不仅能够访问包含它们的外部类,还可以访问局部变量。不过,可以被访问的局部变量必须被声明为final。

1.API: 1.object类:

作用:

  • 一个类要么继承Object类,要么间接继承了Object类,Object类是java中的祖宗类
  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法

在object类中,我们最常用到的两个api是equal和toString方法

官方给出的equal方法逻辑

  • 先判断传进来的对象是不是自己
  • 在判断这个对象是不是空以及是不是本类的类型(第一个getClass()省略this.也就是本类的意思)
  • 然后就是判断每个属性的值是否相等。

细心的同学可能注意到了,这里的name判断的时候调用的是Objects.equals方法,而不是直接调用equals。

因为如果这里的name是一个null而没有做处理直接进行判断的话,则会抛出异常。而Objects.equals方法则进行了判断,避免了这种情况。

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id && age == student.age && Objects.equals(name, student.name);
    }

如果不重写toString,那么直接输出就会输出包名位置,以及地址等信息。

我们可以重写toString方法,来输出我们想要的信息

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
2.StringBuilder:

作用:提高字符串的 *** 作效率,比如拼接。修改等。

append()方法,参数几乎可以是各种类型

 而且,StringBuilder支持链式编程。

  public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("a").append(false).append(12);
        System.out.println(sb);
    }

StringBuilder只是帮我们来处理字符串,通过toString方法即可获得处理后的字符串。

StringBuilder的另一个常用方法reverse,反转字符串。

public class Builder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("1").append(2).append(3);
        sb.reverse().append("las");
        System.out.println(sb);
    }
}

3.Math类

常用的方法:

1.获取参数绝对值

 2.向上取整

3.向下取整

 

4.四舍五入

 

5.获取两个int值中的较大值

6.返回a的b次幂的值

7.返回值为double的随机值,范围[0.0,1.0]

 

4.BigDecimal类:

double类型在进行运算时,往往会出现精度问题。

比如下列代码:

public class Builder {
    public static void main(String[] args) {
        Double a = 0.1+0.2;
        System.out.println(a);
    }
}

 

结果并不是0.3,那我们如何来解决这个问题呢?java给我提供了BigDecimal类去处理精度损失问题。

建议使用以下两种方式进行创建对象

一种是作为字符串类型传参,第二种是通过valueOf方法进行传参(java强制禁止使用BigDecimal(Double)构造器进行创建对象,可能存在损失精度的风险)

public class Builder {
    public static void main(String[] args) {
        BigDecimal decimal = new BigDecimal("0.1");
        BigDecimal decimal1 = BigDecimal.valueOf(0.2);
        System.out.println(decimal.add(decimal1));
    }
}

加减乘除方法:

public class Builder {
    public static void main(String[] args) {
        BigDecimal decimal = new BigDecimal("0.1");
        BigDecimal decimal1 = BigDecimal.valueOf(0.2);
        System.out.println("相加:"+decimal.add(decimal1));
        System.out.println("相减:"+decimal1.subtract(decimal));
        System.out.println("相乘:"+decimal.multiply(decimal1));
        System.out.println("相除:"+decimal1.divide(decimal));
    }
}

doubleValue()方法可以将BigDecimal类转化成double方法。

注:因为BigDecimal是做精度运算的,所以当我们算数除不尽的时候,则会抛出异常,这时我们需要做一步处理。

下列代码表示保留两位小数,第三位小数四舍五入。

decimal1.divide(decimal,2, RoundingMode.HALF_UP)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/731137.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-27
下一篇2022-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存