首页后端开发JAVAJava中常用类的方法

Java中常用类的方法

时间2023-07-05 21:13:01发布访客分类JAVA浏览1109
导读:一.System1.概念  在API中system类介绍的比较简单,我们给出定义,system中代表程序所在系统,提供了对应的一些系统属性信息和系统操作。  注意,system类不能手动创建对象,因为构造方法被私有化(即被private关键...

一.System

1.概念

  在API中system类介绍的比较简单,我们给出定义,system中代表程序所在系统,提供了对应的一些系统属性信息和系统操作。

  注意,system类不能手动创建对象,因为构造方法被私有化(即被private关键字修饰),组织外界创建对象(即不能用new关键字生成一个对象)。System类中的都是静态方法(static关键字修饰),类名访问即可。在JDK中,有许多这样的类。在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

2.常用方法

  • 获取系统当前毫秒值(public static long currentTimeMillis())

  获取当前系统时间与1970年01月01日00:00点之前的毫秒差值,我们可以用它来测试程序的执行时间。代码如下:

package cn.org.yinzhengjie.demo;

 
 public class SystemDemo {

     public static void main(String[] args) {
    
         long start = System.currentTimeMillis();
    
         for(int i=1;
    i=9;
i++) {
    
             for(int j=1;
    j=i;
j++) {
    
                 System.out.printf("%d x %d = %d \t",j,i,(j*i));

             }
    
             System.out.println();

         }
    
         long end = System.currentTimeMillis();
    
         System.out.printf("程序运行时间为[%d]毫秒!",(end-start));

     }

}
    
 
 
 /*
 以上代码执行结果如下:
 1 x 1 = 1     
 1 x 2 = 2     2 x 2 = 4     
 1 x 3 = 3     2 x 3 = 6     3 x 3 = 9     
 1 x 4 = 4     2 x 4 = 8     3 x 4 = 12     4 x 4 = 16     
 1 x 5 = 5     2 x 5 = 10     3 x 5 = 15     4 x 5 = 20     5 x 5 = 25     
 1 x 6 = 6     2 x 6 = 12     3 x 6 = 18     4 x 6 = 24     5 x 6 = 30     6 x 6 = 36     
 1 x 7 = 7     2 x 7 = 14     3 x 7 = 21     4 x 7 = 28     5 x 7 = 35     6 x 7 = 42     7 x 7 = 49     
 1 x 8 = 8     2 x 8 = 16     3 x 8 = 24     4 x 8 = 32     5 x 8 = 40     6 x 8 = 48     7 x 8 = 56     8 x 8 = 64     
 1 x 9 = 9     2 x 9 = 18     3 x 9 = 27     4 x 9 = 36     5 x 9 = 45     6 x 9 = 54     7 x 9 = 63     8 x 9 = 72     9 x 9 = 81     
 程序运行时间为[42]毫秒!
 */
复制代码
  • 结束正在运行的Java程序(public staitc void exit(int status))

 参数传入一个数字即可。通常传入0记为正常状态,其它为异常状态。

public class SystemDemo {

     public static void main(String[] args) {
    
         int counts = 0;

         while(true) {
    
             System.out.println("yinzhengjie");

             if(counts==5) {
    
                 System.exit(0);

             }
    
             counts++;

         }

     }

 }
    
 
 
 /*
 以上代码执行结果如下:
 yinzhengjie
 yinzhengjie
 yinzhengjie
 yinzhengjie
 yinzhengjie
 yinzhengjie
 */
复制代码
  • 垃圾回收器(public static void gc())

  用来运行JVM中的垃圾回收器,完成内存中垃圾的清除。

class Student{

     //清除垃圾时,会默认调用被清空对象的finalize方法。
     public void finalize() {
        
         System.out.println("垃圾已经被收取啦!");

     }

 }

 
 
 public class SystemDemo {

     public static void main(String[] args) {
    
         new Student();
    
         new Student();
    
         new Student();
    
         new Student();
    
         new Student();
    
         System.gc();
    
         
     }

 }
    
 
 
 /*
 以上代码执行结果如下:(输出结果不一定是三行,有可能是0行或者5行哟!每次运行的结果几乎是不一致的)
 垃圾已经被收取啦!
 垃圾已经被收取啦!
 垃圾已经被收取啦!
 */
复制代码
  • 确定当前的系统属性(public static getProperties getProperties() )
  • 获取单个属性(getProperties(String key))
public class SystemDemo {

     public static void main(String[] args) {
    
         System.out.println(System.getProperties());

     }

 }

 
 
 /*
 以上代码执行结果如下:
 {
    sun.desktop=windows, awt.toolkit=sun.awt.windows.WToolkit, java.specification.version=9, file.encoding.pkg=sun.io, sun.cpu.isalist=amd64, sun.jnu.encoding=GBK, java.class.path=D:\10.Java\JavaSE\eclipse\Myprogram\workspace\Day6\bin, java.vm.vendor=Oracle Corporation, sun.arch.data.model=64, user.variant=, java.vendor.url=http://java.oracle.com/, user.timezone=, os.name=Windows 7, java.vm.specification.version=9, sun.java.launcher=SUN_STANDARD, user.country=CN, sun.boot.library.path=D:\10.Java\jdk-9.0.4\bin, sun.java.command=cn.org.yinzhengjie.demo.SystemDemo, jdk.debug=release, sun.cpu.endian=little, user.home=C:\Users\Administrator, user.language=zh, java.specification.vendor=Oracle Corporation, java.home=D:\10.Java\jdk-9.0.4, file.separator=\, java.vm.compressedOopsMode=Zero based, line.separator=
 , java.vm.specification.vendor=Oracle Corporation, java.specification.name=Java Platform API Specification, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, user.script=, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, java.runtime.version=9.0.4+11, user.name=Administrator, path.separator=;
    , os.version=6.1, java.runtime.name=Java(TM) SE Runtime Environment, file.encoding=GBK, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, java.vendor.url.bug=http://bugreport.java.com/bugreport/, java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\, java.version=9.0.4, user.dir=D:\10.Java\JavaSE\eclipse\Myprogram\workspace\Day6, os.arch=amd64, java.vm.specification.name=Java Virtual Machine Specification, java.awt.printerjob=sun.awt.windows.WPrinterJob, sun.os.patch.level=Service Pack 1, java.library.path=D:\10.Java\jdk-9.0.4\bin;
    C:\Windows\Sun\Java\bin;
    C:\Windows\system32;
    C:\Windows;
    D:/10.Java/jdk-9.0.4/bin/server;
    D:/10.Java/jdk-9.0.4/bin;
    D:\10.Java\jdk-9.0.4\bin;
    C:\ProgramData\Oracle\Java\javapath;
    C:\Windows\system32;
    C:\Windows;
    C:\Windows\System32\Wbem;
    C:\Windows\System32\WindowsPowerShell\v1.0\;
    D:\04.Python\python3.6.5\Scripts\;
    D:\04.Python\python3.6.5\;
    D:\10.Java\JavaSE\eclipse\Myprogram\eclipse;
    ;
., java.vm.info=mixed mode, java.vendor=Oracle Corporation, java.vm.version=9.0.4+11, sun.io.unicode.encoding=UnicodeLittle, java.class.version=53.0}
    
 */
复制代码

 各个属性关系对应图如下:  

  • System类方法复制数组
  • (public static notive void arraycopy(Object src, int srcPos, Object dest, int destPos, int length))【notive 是可以调用当前操作系统来实现数组拷贝的】 用来实现将源数组部分元素复制到目标数组的指定位置。各个参数功能如下:

  Object src:要复制的原数组;

  Int srcPos:数组源的起始索引;

  Object dest:复制后的目标数组;

  int destPos:目标数组起始索引;

  int length,指定复制的长度;

public class SystemDemo {

     public static void main(String[] args) {

         int[] src = {
1,22,333,4444,5555,666666,7777777}
    ;

         int[] dest = {
10,20,30}
    ;
    
         System.arraycopy(src, 2, dest, 0, 2);
    
         
         for(int i=0;
    idest.length;
i++) {
    
             System.out.println(dest[i]);

         }

     }

 }
    
 
 
 /*
 以上代码执行结果如下:
 333
 4444
 30
 */
复制代码

二、Math

常用值和函数

Math.PI 记录的圆周率 Math.E 记录e的常量 Math中还有一些类似的常量,都是一些工程数学常用量。

Math.abs 求绝对值 Math.sin 正弦函数 Math.asin 反正弦函数 Math.cos 余弦函数 Math.acos 反余弦函数 Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数 Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度 Math.ceil 得到不小于某数的最大整数 Math.floor 得到不大于某数的最大整数 Math.IEEEremainder 求余 Math.max 求两数中最大 Math.min 求两数中最小 Math.sqrt 求开方 Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常 Math.exp 求e的任意次方 Math.log10 以10为底的对数 Math.log 自然对数 Math.rint 求距离某数最近的整数(可能比某数大,也可能比它小) Math.round 同上,返回int型或者long型(上一个函数返回double型) Math.random 返回0,1之间的一个随机数

用法实例: double s=Math.sqrt(7); double x=Math.pow(2,3) //计算2的3次方

三、BigDecimal

1.简介

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

2.构造器

BigDecimal(int)       创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long)    创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
复制代码

这几个都是常用的构造器,他们返回的对象都是BigDecimal对象。换而言之, 将各个类型的值转换为BigDecimal对象,就是通过构造器。

反过来说,将BigDecimal对象转换为其他类型的对象,我们通过以下几种:

toString()                将BigDecimal对象的数值转换成字符串。
doubleValue()          将BigDecimal对象中的值以双精度数返回。
floatValue()             将BigDecimal对象中的值以单精度数返回。
longValue()             将BigDecimal对象中的值以长整数返回。
intValue()               将BigDecimal对象中的值以整数返回。
复制代码

3.常用方法

BigDecimal b1 = new BigDecimal("20");
    
BigDecimal b2 = new BigDecimal("30");
    
b1.add(b2) :加法,求两个BigDecimal类型数据的和。
b1.subtract(b2):减法,求两个BigDecimal类型数据的差。
b1.multiply(b2):乘法,求两个BigDecimal类型数据的积。
b1.remainder(b2):求余数,求b1除以b2的余数。
b1.max(b2) : 最大数,求两个BigDecimal类型数据的最大值
b1.min(b2) : 最小数,求两个BigDecimal类型数据的最小值。
bi.abs():绝对值,求BigDecimal类型数据的绝对值。
b1.negate():相反数,求BigDecimal类型数据的相反数。
复制代码

除法单独拿出来

BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
复制代码

除法 divide有三个参数的方法,第一参数表示除数,第二个参数表示小数点后保留位数,第三个参数表示取舍规则。只有在作除法运算或四舍五入时才用到取舍规则。 因为BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。所以当我们用三参数的除法方法时,规定了保留几位小数以及你的保留方式,就可以避免异常。

几个取舍规则:

ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN  //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN  //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP  //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入
复制代码

我们最常用的四舍五入应该是 ROUND_HALF_UP

源码中的注释也解释了这一点。

这里说下除法里的第三个参数,

a.divide(b,2,RoundingMode.HALF_UP)
复制代码

这里RoundingMode其实是个枚举类,点进去源码可以看到其实他就是匹配到几种取舍规则

UP(BigDecimal.ROUND_UP),
DOWN(BigDecimal.ROUND_DOWN),
CEILING(BigDecimal.ROUND_CEILING),
FLOOR(BigDecimal.ROUND_FLOOR),
HALF_UP(BigDecimal.ROUND_HALF_UP),
HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),
HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),
UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);
    
复制代码

而最常用的就是 HALF_UP 也就是四舍五入。

那如果我们在乘法或者加法减法中也要保留几位或者四舍五入,该怎么操作呢?

四舍五入 BigDecimal中有一个setScale()方法

第一个参数就是你要保留几位,第二个可填的参数就是取舍规则,图中的两种殊途同归。如果你第二个参数不加,仅仅想保留几位,他在源码中会自动帮你选择默认的规则

public BigDecimal setScale(int newScale) {
    
    return setScale(newScale, ROUND_UNNECESSARY);

}

/**
 * Rounding mode to assert that the requested operation has an exact
 * result, hence no rounding is necessary.  If this rounding mode is
 * specified on an operation that yields an inexact result, an
 * {
@code ArithmeticException}
     is thrown.
 */
public final static int ROUND_UNNECESSARY =  7;
    
复制代码

源码中提及,当我们需要精确结果的时候,可以用这种取舍方式,但是如果你的结果不精确就会抛出异常。例子

BigDecimal b1 = new BigDecimal("3.5");
        
BigDecimal b2 = new BigDecimal("7.7");
    
b1.divide(b2).setScale(2);
    
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion;
     no exact representable decimal result.
    at java.math.BigDecimal.divide(BigDecimal.java:1690)
复制代码

四、java.util.Objects

  1. Objects.equals(Object a,Object b)方法,对比对象地址值是否相等,而且还是用equals方法进行比较,而且不用关心a,b对象是否为空
public static boolean equals(Object a, Object b) {
    
    return (a == b) || (a != null &
    &
     a.equals(b));

}
    
复制代码
  1. Objects.deepEquals(Object a,Object b)方法,深度比较,就是可以比较数组内容是否相等
public static boolean deepEquals(Object a, Object b) {
    
    if (a == b)
        return true;
    
    else if (a == null || b == null)
        return false;
    
    else
        return Arrays.deepEquals0(a, b);

}
    
复制代码
  1. Objects.hashCode(Object 0),这个直接看代码
public static int hashCode(Object o) {
    
    return o != null ? o.hashCode() : 0;

}

Object.hashCode(Object...values)上一个方法的重载
public static int hash(Object... values) {
    
    return Arrays.hashCode(values);

}
    
复制代码
  1. Objects.toString(Object o),Objects.toString(Object o,String nullDefault),直接上代码
public static String toString(Object o) {
    
    return String.valueOf(o);

public static String toString(Object o, String nullDefault) {
    
    return (o != null) ? o.toString() : nullDefault;

}
    
复制代码
  1. Objects.compare(T a,T b,Comparator? extends T> c),地址值相同则返回0,具体排序规则自定定义
public static T>
     int compare(T a, T b, Comparator? super T>
 c) {
    
    return (a == b) ? 0 :  c.compare(a, b);

}
    
复制代码
  1. Objects.requireNonNull(T obj),Objects.requireNonNull(T obj,String message),校验参数是否为空,否则抛出异常,jdk1.8后本方法允许将消息的创建延迟,直到空检查结束之后。虽然在非空例子中这可能会带来性能优势, 但是决定调用本方法时应该小心,创建message supplier的开销低于直接创建字符串消息。
public static T>
 T requireNonNull(T obj) {
    
    if (obj == null)
        throw new NullPointerException();
    
    return obj;

}
    
public static T>
 T requireNonNull(T obj, String message) {
    
    if (obj == null)
        throw new NullPointerException(message);
    
    return obj;

}
    
public static T>
     T requireNonNull(T obj, SupplierString>
 messageSupplier) {
    
    if (obj == null)
        throw new NullPointerException(messageSupplier.get());
    
    return obj;

}
    
复制代码
  1. Objects.isNull(Object obj)判断对象是否为空,相对应的有nonNull方法
public static boolean isNull(Object obj) {
    
    return obj == null;

}

public static boolean nonNull(Object obj) {
    
    return obj != null;

}
    
复制代码

五、java.util.Collections

  1. 返回一个空的列表,不可变,开发中尽量避免返回null,还可以返回空map,set等
public static final T>
     ListT>
 emptyList() {
    
    return (ListT>
    ) EMPTY_LIST;

}
    
复制代码
  1. 不可变,任何对它的更改,都会导致UnsupportedOperationException,因此,此list的容量始终为1
public static T>
     ListT>
 singletonList(T o) {
    
    return new SingletonList>
    (o);

}
    
复制代码
  1. 返回指定映射的不可修改视图

试图修改返回的映射(不管是直接修改还是通过其 collection 视图进行修改)将导致抛出 UnsupportedOperationException。如果指定映射是可序列化的,则返回的映射也将是可序列化的。

private final Map? extends K, ? extends V>
     m;
    
 
UnmodifiableMap(Map? extends K, ? extends V>
 m) {
    
    if (m==null)
        throw new NullPointerException();
    
    this.m = m;

}
    


声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

JavaAPI索引

若转载请注明出处: Java中常用类的方法
本文地址: https://pptw.com/jishu/290775.html
通过IP安全策略 WIN2003禁止PING 从 Java 8 升级到 Java 17 全过程,贼特么坑!

游客 回复需填写必要信息