常用类

本章介绍一些常用类以及常用类中的一些常用方法,本章有Scanner类、Arrays类、包装类、Integer类、Math类、Random类、System类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类

Scanner类

  1. 概述:用于获取用户的键盘输入
  2. 常用方法:
    (1)构造方法Scanner(InputStream source):构造一个新的Scanner,生成指定输入流扫描的值
    InputStream,字节输入流,System in:标准输入流,通常,对应键盘输入
    (2)nextxxx():从键盘中录入不同类型数据,xxx代表数据类型
package org.westos.test;

import java.io.InputStream;
import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        //获得键盘输入的值
        InputStream in = System.in;
        Scanner sc1 = new Scanner(in);
        //通常,获得键盘输入直接写成:
        Scanner sc2 = new Scanner(System.in);
        System.out.println("请输入一个数:");
        //从键盘中录入不同类型的数据(以int类型为例)
        int num = sc2.nextInt();
        System.out.println("录入的数是:"+num);
    }
}

结果:
在这里插入图片描述
(3)hasNextxxx()方法:判断录入的元素是否是某个类型的元素,xxx代表数据类型

package org.westos.test;

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        while(true){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个数:");
            if(sc.hasNextInt()){
                int num = sc.nextInt();
                System.out.println("录入的数是:"+num);
                break;
            }else{
                System.out.println("录入类型不正确");
            }
        }
    }
}

在这里插入图片描述

Arrays类

  1. 概述:是一个数组工具,包含用于操作数组(如排序和查找)的各种方法
  2. 常用方法:
    (1)二分查找(前提是数组元素有序):binarySearch(int[] arr,int key)
package org.westos.test;

import java.util.Arrays;

public class Test2 {
    public static void main(String[] args) {
        //定义一个有序的int类型数组
        int[] arr = {10,20,30,40,50,60,70};
        //使用二分法查找元素,并返回对应索引
        int index = Arrays.binarySearch(arr,40);
        System.out.println("对应的索引是:"+index);
    }
}

在这里插入图片描述
(2)数组排序(从小到大):sort(int[] arr)

package org.westos.test;

import java.util.Arrays;

public class Test2 {
    public static void main(String[] args) {
        //定义一个int类型数组
        int[] arr = {30,50,10,40,60,44,22};
        //调用sort方法对数组进行从小到大的排序
        Arrays.sort(arr);
        //Arrays重写了toString方法,输出的是内容
        System.out.println(Arrays.toString(arr));
    }
}

运行结果:
在这里插入图片描述
(3)对比两个数组中的元素是否一样:equals(int[] arr1,int[] arr2);

package org.westos.test;

import java.util.Arrays;

public class Test2 {
    public static void main(String[] args) {
        //定义int类型数组
        int[] arr1 = {30,50,10};
        int[] arr2 = {30,50,10};
        int[] arr3 = {30,50,10,11};
        //调用equals方法对比两数组元素是否一样
        //这里Arrays重写了equals方法,令它比较的是内容
        boolean b = Arrays.equals(arr1,arr2);
        boolean b1 = Arrays.equals(arr1,arr3);
        //两个数组元素一样,所以输出true
        System.out.println(b);
        //两个数组元素不一样,所以输出false
        System.out.println(b1);
    }
}

运行代码验证:
在这里插入图片描述
(4)在指定范围内替换数组元素:fill(int[] arr,int fromindex,int endindex,int num)

package org.westos.test;

import java.util.Arrays;

public class Test2 {
    public static void main(String[] args) {
        //定义int类型数组
        int[] arr = {30,50,60,20,10,70,90};
        //调用fill方法,替换数组元素(含头不含尾)
        Arrays.fill(arr,0,2,100);
        System.out.println(Arrays.toString(arr));
    }
}

结果:
在这里插入图片描述
(5)复制数组
指定长度的数组:copyOf(int[] arr,int newlength)
指定范围的数组:copyOfRange(int[] arr,int from,int to)

package org.westos.test;

import java.util.Arrays;

public class Test2 {
    public static void main(String[] args) {
        //定义int类型数组
        int[] arr = {30,50,60,20,10,70,90};
        //调用copyOf复制指定长度的数组,生成一个新数组
        int[] newArr1 = Arrays.copyOf(arr,4);
        System.out.println(Arrays.toString(newArr1));
        //调用copyOfRange方法复制指定范围的数组,生成一个新数组(含头不含尾)
        int[] newArr2 = Arrays.copyOfRange(arr,2,5);
        System.out.println(Arrays.toString(newArr2));
    }
}

在这里插入图片描述

包装类

  1. 概述:为了对基本类型进行操作,提供了对应的类类型,主要用于基本数据类型与字符串之间的转换
  2. 基本类型和包装类的对应
    在这里插入图片描述
  3. 自动装/拆箱(以Interger为例)
    自动装箱:自动将基本类型转换成它所对应的包装类型
    自动拆箱:自动将包装类型转换成它所对应的基本类型
package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        //自动装箱
        Integer num1 = 100;
        Integer num2 = 200;
        //自动拆箱
        int num = num1 + num2;
        //手动装箱
        Integer integer = Integer.valueOf(num);
        //手动拆箱
        int i1 = num1.intValue();
        int i2 = num2.intValue();
    }
}

Integer类

  1. 概述:基本类型int对应的包装类型,该类提供多个方法,能在int和String类型之间转换
  2. Integer类的常用方法
    (1)构造方法
    public Integer(int value):构造一个新分配的Integer对象,表示指定的int值
    public Integer(String s):构造一个新分配的Integer对象,表示String参数所指示的int值
    (2)int类型的值转换成二进制,八进制,十六进制:toBinaryString(int num);toOctalString(int num);toHexString(int num);返回字符串类型
package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        int num = 100;
        //将100转换成二进制
        String s1 = Integer.toBinaryString(num);
        System.out.println(s1);
        //将100转换成八进制
        String s2 = Integer.toOctalString(num);
        System.out.println(s2);
        //将100转换成十六进制
        String s3 = Integer.toHexString(num);
        System.out.println(s3);
    }
}

在这里插入图片描述
(3)equals方法,这里Integer类重写了equals方法,比较的是值

package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        Integer i1 = new Integer(128);
        Integer i2 = new Integer(128);
        //==比的是地址值,这里是两个对象,所以地址值不一样
        System.out.println(i1==i2);//false
        //equals被重写,比的是值
        System.out.println(i1.equals(i2));//true
        System.out.println("---------");
        Integer i3 = 127;
        Integer i4 = 127;
        Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i3==i4);
        System.out.println(i5==i6);
    }
}

看看运行结果:
在这里插入图片描述
这里注意一下,==比较的是两者的地址值,new两个对象不用多说,地址值肯定不一样,但使用自动装箱需要注意,在给包装类对象赋值时,如果在包装类对应的基本类型一个字节范围内,第二次给包装类赋值相当于把第一次的地址值重新给它,因为方法区里有一个字节常量池,所以两者比较地址值是一样的,就比如此处int类型的一个字节范围是-128到127,所以把127给两个包装类对象,它们的地址值是一样的;当然,一个字节范围外就还是两个对象

  1. int和String类型的相互转换
    int–>String
    (1)和空串拼接
    (2)转换成包装类,在调用toString方法
    (3)调用valueOf方法
package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        int num = 100;
        //拼接空串
        String s1 = num + "";
        //通过包装类,调用toString方法
        Integer integer = new Integer(num);
        String s2 = integer.toString();
        //通过valueOf方法
        String s3 = String.valueOf(num);
    }
}

String–>int
(1)通过包装类调用intValue方法
(2)通过调用parseInt方法

package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        String str = "200";
        //通过包装类调用intvalue方法
        Integer integer = new Integer(str);
        int num1 = integer.intValue();
        //通过调用parseInt方法
        int num2 = Integer.parseInt(str);
    }
}

Math类

  1. 概述:包含用于执行基本数学运算的方法,方法都是静态的,可直接通过类名调用
  2. 成员变量:
    public static final double E :自然底数
    public static final double PI:圆周率
package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        double pi = Math.PI;
        System.out.println(pi);
        double e = Math.E;
        System.out.println(e);
    }
}

在这里插入图片描述
3. 常用方法:
public static int abs(int a) : 取绝对值
public static double ceil(double a):向上取整
public static double floor(double a):向下取整
public static int max(int a ,int b):获取最大值
public static int min(int a ,int b):获取最小值
public static double pow(double a,double b):获取a的b次幂
public static double random():获取随机数,范围0到1
public static int round(float a):四舍五入
public static double sqrt(double a):获取正平方根
演示:

package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        //取绝对值
        int num1 = -1;
        System.out.println(Math.abs(num1));
        //向上取整
        double num2 = 3.4;
        System.out.println(Math.ceil(num2));
        //向下取整
        System.out.println(Math.floor(num2));
        //四舍五入(返回整数)
        System.out.println(Math.round(num2));
        //获取最大值
        System.out.println(Math.max(num1,num2));
        //获取最小值
        System.out.println(Math.min(num1,num2));
        //获得a的b次幂
        System.out.println(Math.pow(2,3));
        //获得正平方根
        System.out.println(Math.sqrt(16));
        //获得随机数
        System.out.println(Math.random());
    }
}

运行结果:
在这里插入图片描述

Random类

  1. 概述:此类用于产生随机数
  2. 常用方法:
    public Random():没有给定种子,产生默认随机数
    public Random(long seed):给定一个long类型种子,每次产生的随机数都是相同的
    public int nextInt():没有参数,随机数范围是int类型的范围
    public int nextInt(int n):指定随机数范围
package org.westos.test;

import java.util.Random;

public class Test2 {
    public static void main(String[] args) {
        Random random = new Random();
        //不给参数,生成的就是int类型的范围
        int num1 = random.nextInt();
        System.out.println(num1);
        //如果要获得1-100的随机数,只需修改一下参数
        //参数给100,生成0-99随机数,在+1,即生成1-100随机数(含头不含尾)
        int num2 = random.nextInt(100)+1;
        System.out.println(num2);
        //给定种子,每次生成的随机数都是一样的
        Random r = new Random(1L);
        int a = r.nextInt(10);
        System.out.println(a);
    }
}

运行两边代码:
在这里插入图片描述
在这里插入图片描述
由结果可看出,前两次没有给出种子,所以每次生成的随机数都是不一样的,而第三次给出了种子,所以每次生成的随机数都是一样的

System类

  1. 概述:包含一些有用的类字段和方法,不能被实例化
  2. 常用方法:
    public static void gc():调用垃圾回收器
    public static void exit(int status):退出java虚拟机,参数0为正常退出,非0为强制退出
    public static long currentTimeMillis():获取当前时间的毫秒值
package org.westos.test;

public class Test2 {
    public static void main(String[] args) {
        //1970 01 01 00:00:00----当前系统时间的间隔的毫秒值
        //1s = 1000ms
        long time = System.currentTimeMillis();
        System.out.println(time);

        int[] arr = new int[5];
        arr=null;//手动置空
        //催促垃圾回收器回收垃圾,但并不是马上执行
        System.gc();


        System.out.println("---------");
        System.out.println("---------");
        //参数0,正常退出,后面的语句不执行
        System.exit(0);
        System.out.println("---------");
        System.out.println("---------");
    }
}

在这里插入图片描述
这里注意下,在调用gc方法时,是催促垃圾回收器回收垃圾,并不是马上执行,这里涉及JVM垃圾回收的算法,有两种,简单介绍一下:
在这里插入图片描述

BigDecimal类

  1. 概述:为了精确表示计算浮点数,因为float和double类型容易丢失精度
  2. 常用方法:
    public BigDecimal(String val):构造方法
    public BigDecimal add(BigDecimal augend):加法运算
    public BigDecimal subtract(BigDecimal subtrahend):减法运算
    public BigDecimal multiply(BigDecimal multiplicand):乘法运算
    public BigDecimal divide(BigDecimal divisor):除法运算
    public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):scale小数点后面保留几位
package org.westos.test;

import java.math.BigDecimal;

public class Test2 {
    public static void main(String[] args) {
        //double类型除法精度不准确
        double num1 = 10;
        double num2 = 3;
        System.out.println(num1/num2);

        BigDecimal a = new BigDecimal("10");
        BigDecimal b = new BigDecimal("3");
        //如果不能整除,决定保留多少位,然后在规定取舍模式
        //roundingMode 取舍模式,比如四舍五入
        BigDecimal divide = a.divide(b,30,BigDecimal.ROUND_HALF_UP);
        System.out.println(divide);
    }
}

在这里插入图片描述

Date类

  1. 概述:类Datev表示特点的瞬间,精确到毫秒

  2. 构造方法:
    public Date()
    public Date(long date):把一个long类型的毫秒值转换成一个日期对象

  3. 成员方法
    public long getTime():获取一个日期对象对象毫秒值
    public void setTime(long time):给一个日期对象设置指定的毫秒值
    演示:

package org.westos.demo;

import java.util.Date;

public class MyTest {
    public static void main(String[] args) {
        //通过空参构造直接创建对象
        Date date = new Date();
        System.out.println(date);
        //年份由y-1900表示
        int year = date.getYear();
        System.out.println(year);
        //月份由0-11,0代表一月,11代表12月
        int month = date.getMonth();
        System.out.println(month);
        //获取1970到现在的时间毫秒值,等同于System类里的currentTimeMillis方法
        long time = date.getTime();
        //给起始元年设置一定的时间量
        date.setTime(1000*60*60);
        System.out.println(date);

    }
}

在这里插入图片描述

  1. Date和long类型之间的转换
    Date–>long
    调用getTime方法:long time = date.getTime();
    long–>Date
    (1)使用构造方法
    (2)调用setTime方法

SimpleDateFormat类

  1. 概述:把一个日期对象格式化成一个字符串,也可以把一个日期字符串解析成一个日期对象
  2. 构造方法:
    public SimpleDateFormat():使用默认的模式创建对象
    public SimpleDateFormat(String pattern):使用指定的模式(例如yyyy:MM:dd HH:mm:ss)创建对象
package org.westos.demo;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MyTest {
    public static void main(String[] args) {
        //创建日期对象
        Date date = new Date();
        //日期格式化,调用format方法
        SimpleDateFormat dateFormat = new SimpleDateFormat();
        String format = dateFormat.format(date);
        System.out.println(format);
    }
}

在这里插入图片描述

  1. 成员方法:
    public String format(Date date):把一个日期对象格式化成一个字符串
package org.westos.demo;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MyTest {
    public static void main(String[] args) {
        //创建日期对象
        Date date = new Date();
        //按照自己的格式,格式化日期
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E ");
        String format1 = simpleDateFormat.format(date);
        System.out.println(format1);
    }
}

在这里插入图片描述

public Date parse(String dateStr):把一个日期字符串解析成一个日期对象

package org.westos.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MyTest {
    public static void main(String[] args)throws ParseException {
        String str = "2019年10月23日 20:40:48";
        //把日期字符串转成日期类型
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date = simpleDateFormat.parse(str);
        System.out.println(date);
    }
}

在这里插入图片描述
这里有个异常,在调用parse方法时会出现解析失败异常,在方法声明上抛出即可

Calendar类

  1. 概述:本身是一个抽象类,无法直接创建对象,通过它的静态方法getInstance方法获取它的对象,它主要是为YEAR、MONTH等日历字段提供一些方法
  2. 成员方法:
    public static Calendar getInstance():使用默认时区和语言环境获得一个日历对象
    public int get(int field):获得给定日历字段对应的值
package org.westos.demo;

import java.util.Calendar;

public class MyTest {
    public static void main(String[] args) {
        //调用getInstance方法获取日历
        Calendar instance = Calendar.getInstance();
        //获取年月日
        int year = instance.get(Calendar.YEAR);
        System.out.println(year);
        //月份输出0-11,分别对应1-12月
        int month = instance.get(Calendar.MONTH);
        System.out.println(month);
        int day = instance.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
    }
}

在这里插入图片描述
除了年月日,Calendar类还有很多字段的定义,这里就不一一演示了,感兴趣可以再去写写

public void add(int field,int amount):根据日历的规则,为给力的日历字段添加或减去指定的时间量
public final void set(int year,int month,int date):设置年月日

package org.westos.demo;

import java.util.Calendar;

public class MyTest {
    public static void main(String[] args) {
        //调用getInstance方法获取日历
        Calendar instance = Calendar.getInstance();
        //设置时间量,给年份增加2年
        instance.add(Calendar.YEAR,2);
        int year1 = instance.get(Calendar.YEAR);
        System.out.println(year1);
        //再给年份减少四年,调用的是同一个方法
        instance.add(Calendar.YEAR,-4);
        int year2 = instance.get(Calendar.YEAR);
        System.out.println(year2);

        //自己设置日期
        Calendar calendar1 = Calendar.getInstance();
        //设置日期为2020年10月1日
        //月份0-11分别代表1-12月
        instance.set(2020,9,1);
        //获得设置的年月日
        int year = instance.get(Calendar.YEAR);
        System.out.println(year);
        int month = instance.get(Calendar.MONTH);
        System.out.println(month);
        int day = instance.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
    }
}

在这里插入图片描述

本章介绍就到这里,常用类有很多种,每个类里的方法也有很多个,这里也仅介绍了部分,在个人的需求下,也要自己去学习类和方法的使用,这就需要我们会查API文档,根据其中的介绍自己学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值