Java面向对象-常用类

Object类

Object 类是所有类、数组、枚举类的父类,也就是说,Java允许把热呵呵类型的对象赋给Object类型的变量。当定义一个类时没有使用extends关键字为它显式指定父类,则该类默认继承Object父类。

因为所有的Java类都是Object类的子类,所以任何Java对象都可以调用Object类的方法。Object提供了如下几个常用方法。

  • boolean equals(Object obj):判断指定对象与该对象是否相等。此处相等的标准是,两个对象是同一个对象,因此该equals()方法通常没有太大的实用价值。(一般通过方法重写来实现具体的判等)
  • protected void finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
  • Class<?>getClass(): 返回该对象的运行时类。
  • int hashCode(): 返回该对象的hashCode值。在默认情况下,Object类的hashCode()方法根据该对象的地址计算。但很多类都重写了该方法,不再根据地址来计算。
  • String toString():以字符串形式打印该对象,大部分情况下需要改写。默认情况下返回“运行时类名@该对象的16进制地址”。

Java 9改进的String、StringBuffer和StringBuilder类

字符串就是一连串的字符序列,Java 提供了String StringBuffer StringBuilder 三个类来封装字符串,并提供了一系列方法来操作字符串对象。
Java 9 改进了字符串(包括String StringBuffer StringBuilder)的实现。在Java 9 以前字符串采用char[]数组来保存字符,因此字符串的每个字符占2字节;而Java 9 及更新版本的JDK的字符串采用byte[]数组再加一个encoding-flag字段来保存字符,因此字符串的每个字符只占1字节。

  • String类是不可变类(以final修饰),即一旦一个String类对象被创建后,其字符序列则不可改变,直到这个对象被销毁。
  • StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer对象被创建时,通过StringBuffer提供的的append(),inser(),reverse(),serCharAt(),setLength()等方法可以改变这个字符串序对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用他的toString()方法将其转换为一个String对象。
  • StringBuilder类时JDK1.5新增的类,它也代表可变字符串对象。实际上,StringBuffer和StringBuilder功能基本相似,两个类的构造器和方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以功能略高。因此通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用StringBuilder类。

String提供的大量构造器。

  • String(): 创建一个包含0个字符串序列的String对象(并不是返回null)。
  • String(byte[] bytes,Charset charset):使用指定的字符集将指定的byte[]数组解码成一个新的String对象。
  • String(byte[] bytes,int offset,int length):使用平台默认的字符集将指定的byte[]数组从offset开始,长度为length的子数组解码成一个新的String对象。
  • String(byte[] bytes,int offset,int length,String charsetName):使用指定的字符集将指定的byte[]数组从offset开始,长度为length的子数组解码成一个新的String对象。
  • String(char[] value,int offset,int count):将指定的字符数组从offset开始、长度为count的字符元素连缀成字符串。
  • String(String original):根据字符串直接量来创建一个String 对象。也就是说,新创建的String对象是该参数字符串的副本。
  • String(StringBuffer buffer):根据StringBuffer来创建对应的String对象。
  • String(StringBuilder builder):根据StringBuilder来创建对应的String对象。

String的常用方法(用来操作字符串对象)

  • char charAt(int index): 获取字符串中指定位置的字符串。其中,参数index 指的是字符串的序数,字符串的序数从0开始到length()-1。
  • int compareTo(String anotherString):比较两个字符串的大小。如果两个字符串的字符序列相等,则返回0;不相等时,从字符串第0个元素开始比较,返回第一个不相等的字符差。另一种情况,较长字符差的前面部分恰巧时较短字符串,则返回它们的长度差。
  • String concat(String str):将该对象与str连接在一起。与Java提供的字符串连接符“+”的功能相同。
  • boolean contentEquals(StringBuffer sb):将该对象与StringBuffer的对象进行内容比较,相同时返回true。
  • boolean endsWith(String suffix):返回该对象是否以suffix 结尾。
  • …………不想抄了,见API文档吧。

Math类

  • 关于三角运算的
  • 三角函数:sin、cos、tan
  • 反三角函数:asin、acos、atan
  • 双曲函数:sinh、cosh、tanh
  • 返回从直角坐标(x,y)转换为极坐标(r,theta)的角度atan2(0.1,0.2)
  • 关于取整运算的
  • floor向下取整
  • ceil向上取整
  • round四舍五入
  • 乘方、开方、指数运算
  • sqrt:开方根
  • cbqt:立方根
  • pow:乘方
  • 自然对数log
  • 底数为10的对数log10
  • 最大值max
  • 最小值min
  • 返回一个伪随机数random:在0到1之间

ThreadLocalRandom与Random

Random类专门用于生成一个伪随机数,他有两个构造器:一个构造器使用默认的种子(以当前时间为种子),另一个构造器需要程序员显式的传入一个long型整数的种子。
ThreadLocalRandom是Random的增强版。在并发访问的环境下,ThreadLocalRandom来代替Random可以减少多线程资源竞争,最终确保系统具有更好的线程安全性。

package Random;
import java.util.Arrays;
import java.util.Random;
public class RandomText {
    public static void main(String[] args) {
        var rd = new Random();
        System.out.println("rand.nextBoolean():"+rd.nextBoolean());
        //生成处于byte范围内的随机数数组
        var buffer = new byte[16];
        rd.nextBytes(buffer);
        System.out.println(Arrays.toString(buffer));
        //生成0~1.0之间的随机数(double或者是float都行)
        System.out.println(rd.nextDouble());
        //生成一个处于int整数范围的为随机数
        System.out.println(rd.nextInt());
        //生成一个0~26之间的伪随机数
        System.out.println(rd.nextInt(26));
    }
}

ThreadLocalRandom的一种用法

package Random;

import java.util.concurrent.ThreadLocalRandom;

public class RandomText2 {
    public static void main(String[] args) {
        ThreadLocalRandom rd = ThreadLocalRandom.current();
        int x = 20;
        while (x > 0) {
            System.out.println(rd.nextInt(2, 5));
            x--;
        }
    }
}

BigDecimal类

Java的double类型会发生精度丢失,尤其在进行算术运算时更容易发生这种情况。不仅是Java,很多编程语言也存在这样的问题。
为了能精确表示、计算浮点数,Java提供了BigDecimal类,该类提供了大量的构造器用于创建BigDecimal对象,包括把所有的基本数值类型变量转换为一个BigDecimal对象,也包括利用数字字符串、数字字符数组来创建BigDecimal对象。
查看BigDecimal类的BigDecimal(double val)时可以看到不推荐使用该构造器,主要时因为使用该构造器时有一定的不可预知性。当程序使用new BigDecimal(0.1)时,他的值并不是0.1,而是一个极近似0.1的值。写入new BigDecimal(“0.1”);将创建一个真正值为0.1的BigDecimal对象。因此通常建议优先使用基于String的构造器。
如果必须使用double浮点数作为BigDecimal构造器的参数时,不要直接将该浮点数作为构造器参数创建BigDecimal对象,而是应该通过BigDecimal。valueOf(double value)静态方法来创建BigDecimal对象。
BigDecimal类提供了add() subtract() multiply() divide() pow()等方法来进行浮点数计算。

package BigDecimal;

import java.math.BigDecimal;
import java.util.Scanner;

public class BigDecimalText {

    public static void main(String[] args) {
        var sc = new Scanner(System.in);
        var f1 = new BigDecimal(0.1);
        var f2 = new BigDecimal("0.1");
        System.out.println(f1+"\n"+f2);

        String a;
        String b;
        a=sc.next();
        b= sc.next();
        var av = new BigDecimal(a);
        var bv = new BigDecimal(b);
        System.out.println(a+"+"+b+"="+av.add(bv));
        System.out.println(a+"-"+b+"="+av.subtract(bv));
        System.out.println(a+"*"+b+"="+av.multiply(bv));
        System.out.println(a+"/"+b+"="+av.divide(bv));
        System.out.println(a+"^"+b+"="+av.pow(23));
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值