15.常用API

1. Math类

Math包含执行基本数字运算的方法

1.1 常用方法

方法名说明
public static int abs(int a)返回参数的绝对值
public static double ceil(double a)返回大于或等于参数的最小double值,等于一个整数
public static double floor(double a)返回小于或等于参数的最大double值,等于一个整数
public static int round(float a)按照四舍五入返回最接近参数的int
public static int max(int a,int b)返回两个int值中的较大值
public static int min(int a,int b)返回两个int值中的较小值
public static double pow(double a,double b)返回a的b次幂的值
public static double random()返回值为double的正值随机数,默认的取值范围为[0.0,1.0)

1.2 应用实例

public class MathDemo {
    public static void main (String[] args) {
        //返回参数的绝对值
		System.out.println(Math.abs(88));//88
        System.out.println(Math.abs(-88));//88
        
        //返回大于或等于参数的最小double值,等于一个整数
        System.out.println(Math.ceil(12.34));//13.0
        
        //返回小于或等于参数的最大double值,等于一个整数
        System.out.println(Math.floor(12.34));//12.0
        
        //按照四舍五入返回最接近参数的int
        System.out.println(Math.round(12.34F));//12
        System.out.println(Math.round(12.56F));//13
        
        //返回两个int值中的较大值
        System.out.println(Math.max(66,77));//77
        
        //返回两个int值中的较小值
        System.out.println(Math.min(66,77));//66
        
        //返回a的b次幂的值
        System.out.println(Math.pow(2.0,3.0));//8.0
        
        //返回值为double的正值随机数,默认的取值范围为[0.0,1.0)
        System.out.println(Math.random());//0.25232
        System.out.println(Math.random()*100);//25.232
        //可以强转为int类型数据
        System.out.println((int)(Math.random()*100));//25
    }
}

2. System类

System包含几个有用的类字段和方法,它不能被实例化

2.1 常用方法

方法名说明
public static void exit(int status)终止当前运行的Java虚拟机,非零表示异常终止,0为正常终止
public static long currentTimeMillis()返回当前时间(以毫秒为单位)

2.2应用实例

2.2.1 exit(int status)方法

public class SystemDemo {
    public static void main(String[] args) {
        System.out.println("开始");
        System.exit(0);//终止当前运行的Java虚拟机
        System.out.println("结束");
    }
}
  • 运行发现只输出了“开始”,“结束”未被输出

2.2.2 currentTimeMillis()方法

public class SystemDemo {
    public static void main(String[] args) {
        System.out.println(System.currentTimeMillis());//输出一串毫秒值
    }
}
  • 运行输出了当前时间与1970年1月1日之间的毫秒值

2.2.3 输出当前时间与1970年1月1日之间隔了多少年

public class SystemDemo {
    public static void main(String[] args) {
        System.out.println(System.currentTimeMillis()* 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");//输出当前时间与1970年1月1日之间隔了多少年
    }
}
  • 为了确精度,让数值乘1.0变为浮点数,1毫秒与1秒相差1000倍,所以让数值除以1000可以将数值转换为秒为单位,后面的除数原理相同,进而得到所需的年份距离。

2.2.4 输出执行某段代码所需的时间

public class SystemDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i <10000; i++) {
            System.out.println(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("共耗时" + (end - start) + "毫秒");//共耗时90毫秒
    }
}

3. Object类

  • Object类是类层次结构的根类,每个类都可以将其作为超类。所有类都直接或间接继承自该类。

  • 其构造方法只有:

public Object()
  • 因为该类只有无参构造方法,所以其子类的构造方法默认访问的是父类的无参构造方法。

3.1 常用方法

方法名说明
public String toString()返回对象的字符串表示形式。建议Object的子类全部重写该方法,方法的重写可以自动生成
public boolean equals(Object obj)比较对象是否相等。默认比较对象的内存地址,重写可以比较对象内容,可以自动生成

3.2 应用实例

3.2.1 toString方法

学生类:

public class Student {
    //成员变量
    private String name;
    private int age;
    
    //无参构造方法
    public student(){}
    
    //有参构造方法
    public student(String name, int age){
        this.name = name;
        this.age = age;
    }
    
    //成员方法
    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }
    
    public void setAge(int age){
        this.age = age;
    }
    
    public int getAge(){
        return age;
    }
    
}

测试类:

public class ObjectDemo {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("阿夸");
        s.setAge(5);
        System.out.println(s);//输出com.liu.Student@3f3ae12,这是其在栈内存中的地址
    }
}
  • 查看源码可以发现println()方法此处最终调用了Object类中的toString()方法。
  • 为了方便阅读一般在Object的子类中重写子方法,可以自动生成toString()方法。
	//在Student类中重写toString()方法
	@Override
	public String toString() {
        return "Student{" +
            	"name='" + name + '\'' +
            	", age=" + age +
            	'}';
    }

在测试类中调用该方法

public class ObjectDemo {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("阿夸");
        s.setAge(5);
        System.out.println(s);//Student{name='阿夸','age=5'}
        System.out.println(s.toString());//Student{name='阿夸','age=5'}
    }
}
  • 发现即使不去调用toString方法,直接输出对象的引用s也可以得到相同内容

3.2.2 equals()方法

  • 继续使用上面的学生类

测试类:

public class ObjectDemo {
    public static void main(String[] args) {
        Student s1 = new Student();
        s.setName("阿夸");
        s.setAge(5);

        Student s2 = new Student();
        s.setName("阿夸");
        s.setAge(5);
        
        //比较两个对象内容是否相同
        System.out.println(s1 == s2);//false,此处s1与s2代表的是不同的地址值,不可能相同
        System.out.println(s1.equals(s2));//false,此处还是比较的地址值
    }
}

equals()方法源码

public boolean equals(Object obj) {
    return (this == obj);//this为s1,obj为s2
}
  • equals()方法默认Object里比较的是地址值,需要重写该方法

  • 在Student类中自动生成equals方法

	@Override
	public boolean equals(Object o) {
        //this代表s1,o代表s2
        
        //比较地址是否相同,若相同返回true
    	if (this == o) return true;
        
        //判断参数是否为空;判断两个对象是否来自同一个类
    	if (o == null || getClass() != o.getClass()) return false;
    
        //把o强转为Student,此处对象的引用student表示的是s2
    	Student student = (Student) o;
    
        //比较s1的age和s2的age,由于age是int类型的,启会直接使用==进行比较
    	if (age != student.age) return false;
        
        //三元表达式判断s1的name是否不为空,若不为空则对s1和s2进行比较,若为空则返回student.name == null;
        //s1调用equals方法和s2比较。
        /**由于s1和s2的name都是String类型的,所以使用String类中的equals()方法,String类中的equals()方法比较的是内容是否相同*/
    	return name != null ? name.equals(student.name) : student.name == null;
	}
}
  • 再次运行
		System.out.println(s1.equals(s2));//true
  • 发现在Object类中比较的是地址,由于官方重写了String类中的equals()方法,所以在String类中比较的是内容,不同类中的equals方法是不同的。所以我们使用该方法时需要进行重写。

4. Arrays类

  • Arrays类包含用于操作数组的各种方法
  • Arrays类本质上是工具类
  • 工具类的设计思想:
    • 构造方法用 private 修饰(防止外界创建对象)
    • 成员用 public static 修饰(为了让外界用类名来访问该成员方法)

4.1 常用方法

方法名说明
public static String toString(int[] a)返回指定数组的内容的字符串表示形式
public static void sort(int[] a)按照数字顺序排列指定的数组

4.2 应用实例

public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = {24,69,80,57,13};
        System.out.println("排序前:" + Arrays.toString(arr));
        Arrays.sort(arr);//对数组排序
        System.out.println("排序后:" + Arrays.toString(arr));
    }
}

5. 基本类型包装类

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

5.1 Integer类的概述和使用

5.1.1 常用方法

方法名说明
public Integer(int value)根据int值创建Integer对象(过时)
public Integer(String s)根据String值创建Integer对象(过时)
public static Integer valueOf(int i)返回表示指定的int值的Integer实例
public static Integer valueOf(String s)返回一个保存指定值的Integer对象String

5.1.2 应用实例

public class IntegerDemo {
    public static void main(String[] args) {
        //根据int值创建Integer对象
        Integer i1 = new Integer(100);
        System.out.println(i1);//100
        
        //根据String值创建Integer对象(过时)
        Integer i2 = new Integer("100");
        System.out.println(i2);//100
        
        //根据String值创建Integer对象(过时)
        Integer i2 = new Integer("abc");
        System.out.println(i2);//报错NumberFormatException,原因是字符串必须由纯数字组成
        
        //返回表示指定的int值的Integer实例
        Integer i1 = Integer.valueOf(100);
        System.out.println(i1);//100
        
        //返回一个保存指定值的Integer对象String
        Integer i2 = Integer.valueOf("100");
        System.out.println(i2);//100 
        
        //返回一个保存指定值的Integer对象String
        Integer i2 = Integer.valueOf("abc");
        System.out.println(i2);//报错NumberFormatException,原因是字符串必须由纯数字组成        
    }
}
  • 基本类型包装类还有很多种,可查阅api文档进行了解

5.2 int和String的相互转换

  • 基本类型包装类的最常见操作就是:用于基本类型和字符串之间的相互转换

5.2.1 常用方法

方法名说明
public static String valueOf(int i)将int转为String类型。返回int参数的字符串表示方式,该方法是String类中的方法,可以由类名直接调用
public static int parseInt(String s)将String转为int类型。将字符串解析为int类型返回,该方法是Integer类中的方法,可以由类名直接调用

5.2.2 int转为String

public class IntegerDemo {
    public static void main(String[] args) {
        int number = 100;
        //方式1
        String s1 = "" + number;
        System.out.println(s1);//100,String类型
        
        //方式2,使用public static String valueOf (int i)方法
        String s2 = String.valueOf(number);
        System.out.println(s2);//100,String类型        
    }
}
  • public static String valueOf (int i)方法为静态方法,由类名直接调用

5.2.3 String转为int

public class IntegerDemo {
    public static void main(String[] args) {
        String s = "100";
        //方式1,先将String转为integer,再转为int
        Integer i = Integer.valueOf(s);
        //调用public int intValue()方法
        int x = i.intValue();//用对象i调用方法
        System.out.println(x);//100,int类型
        
        //方式2,调用public static int parseInt (String s)方法
        int y = Integer.parseInt(s);
        System.out.println(y);//100,int类型
    }
}	
  • public int intValue ()方法为非静态方法,需要用对象调用
  • public static int parseInt (String s)方法为静态方法,由类名直接调用

5.3 自动装箱和拆箱

  • 装箱:把基本数据类型转换为对应的包装类型
  • 拆箱:把包装类型转换为对应的基本数据类型
public class IntegerDemo {
    public static void main(String[] args) {
        //装箱
        Integer i = Integer.valueOf(100);
        //自动装箱,隐藏了valueOf()方法的调用
        Integer ii = 100;
        
        //拆箱
        ii = ii.intValue() + 200;//包装类型无法进行运算,故需要用拆箱操作把类型变为基本数据类型来完成运算,最后自动装箱赋值给ii
        System.out.println(ii);//300
    }
}
public class IntegerDemo {
    public static void main(String[] args) {
        //装箱
        Integer i = Integer.valueOf(100);
        //自动装箱,隐藏了valueOf()方法的调用
        Integer ii = 100;
        
        //自动拆箱
        ii += 200;//不是包装类型直接和基本数据类型进行了运算,而是其中隐藏了intValue()方法的调用
        System.out.println(ii);//300
        
        Integer iii = null;//自动装箱
        iii += 300;//报错NullPointerException,这里iii调用了intValue()方法,但是自身为null,所以报错空指针
    }
}
  • 空指针问题:
public class IntegerDemo {
    public static void main(String[] args) {
        Integer iii = null;//自动装箱
        iii += 300;//报错NullPointerException,这里iii调用了intValue()方法,但是自身为null,所以报错空指针
    }
}

为了避免这个问题,一般在使用包装类型前会进行判断

public class IntegerDemo {
    public static void main(String[] args) {
        Integer iii = null;//自动装箱
        if(iii != null) {
        iii += 300;//报错NullPointerException,这里iii调用了intValue()方法,但是自身为null,所以报错空指针    
        }
    }
}
  • 在使用包装类类型时,如果做操作最好先判断是否为null,推荐只要是对象,在使用前必须进行不为null的判断

6. 日期类

6.1 Date类

  • Date代表了一个特点的时间,精确到毫秒

6.1.1 构造方法

  • 导包时注意是util包下的Date类
方法名说明
public Date()分配一个Date对象,并初始化,以便它代表被分配的时间,精确到毫秒
public Date(long date)分配一个Date对象,并将其初始化为表示从标准基准时间(1970年1月1日)开始指定的毫秒数,相当于把传入的参数和标准基准时间相加并存入对象引用中
public class DateDemo {
    public static void main(String[] args) {
        //使用构造方法public Date()实例化对象
        Date d1 = new Date();
        System.out.println(d1);//Sun Aug 09:28:09 CST 2048, 发现输出的内容不是内存中的地址信息,说明Date类重写了父类的toString方法
        
        //使用构造方法public Date(long date)实例化对象
        long date = 1000*60*60;//设置long类型变量date的值为1小时(因为标准时间以毫秒为单位,而1000毫秒为1秒,60秒为1分钟,60分钟为1小时,故用以上方式相乘来代表1小时对应的毫秒数)
        Date d2 = new Date(date);
        System.out.println(d2);//Thu jan 01 09:00:00 CST 1970,成功输出数据,数据表示时间为中国时间1970年1月1日9时,我们将其时间设定的是1970年1月1日1时,但是中国处于东八区,时间要再加上8小时
    }
}

6.1.2 常用方法

方法名说明
public long getTime()获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
public void setTime(long time)设置时间,传入的参数是毫秒值
/**getTime()方法*/
public class DateDemo2 {
    public static void main(String[] args) {
        //创建日期对象
        Date d = new Date();
        
        //调用public long getTime()方法
        System.out.println(d.getTime());//2323232323123
        //将毫秒值转化为年
        System.out.println(d.getTime()* 1.0 /1000 / 60 / 60 / 24 / 365 + "年");//82.1231231231232年
    }
}
/**setTime()方法*/
public class DateDemo2 {
    public static void main(String[] args) {
        //创建日期对象
        Date d = new Date();
        //直接输出时间对象d
		System.out.println(d);//Sun Aug 09:28:09 CST 2048,输出的是当前时间
        
        long time = 1000*60*60;//传入1小时对应的毫秒值
        //调用public void setTime(long time)方法
        d.setTime(time);
        System.out.println(d);//Thu jan 01 09:00:00 CST
    }
}
public class DateDemo2 {
    public static void main(String[] args) {
		long time = System.currentTimeMillis();//传入系统获取到的当前时间对应的毫秒值
        d.setTime(time);
        System.out.println(d);//Sun Aug 09:28:09 CST 2048,输出的是当前时间
    }
}

6.2 SimpleDateFormat类

  • SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。重点学习日期格式化和解析

  • 日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A’到‘Z’以及从‘a’到‘z’引号的字母被解释为表示日期或时间字符串的组件的模式字母。

  • 常用的模式字母及对应关系如下:

    • y 年
    • M 月
    • d 日
    • H 时
    • m 分
    • s 秒

6.2.1 构造方法以及格式化,解析日期的方法

方法名说明
public SimpleDateFormat()构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern)构造一个SimpleDateFormat使用给定的模式和默认的日期格式
  • SimpleDateFormat的格式化方法(从Date到String)
//将日期格式化成日期/时间字符串
public final String formate(Date date);
  • SimpleDateFormat的解析日期方法(从String到Date)
//从给定字符串的开始解析文本以生成日期
public Date parse(String source);
  • 无参构造
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        Date date = new Date();//创建Date对象
        SimpleDateFormat sdf = new SimpleDateFormat();//使用无参构造创建SimpleDateFormat对象
        //格式化,从Date到String
        String s = sdf.formate(date);//SimpleDateFormat对象调用格式化方法
        System.out.println(s);//2022/5/8 上午10:52
    }
}
  • 带参构造
//格式化

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

public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        Date date = new Date();//创建Date对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//使用带参构造创建SimpleDateFormat对象,自己编写输出时间的格式
        //格式化,从Date到String
        String s = sdf.formate(date);//SimpleDateFormat对象调用格式化方法
        System.out.println(s);//2022年5月8日 10:52:12
    }
}
//解析日期

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

public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {
        String ss = "2022-05-08 10:52:12";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//使用带参构造创建SimpleDateFormat对象,自己编写输出时间的格式,格式要与字符串匹配,否则报错ParseException解析异常。
        //解析日期,从String到Date
        Date dd = sdf2.parse(ss);//SimpleDateFormat对象调用解析日期方法并赋值给对象dd。同时这里需要抛出ParseException解析异常
        System.out.println(dd);//Sun Aug 08 12:52:12 CST 2022
    }
}

6.3 Calendar(日历)类

  • Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法

  • Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:

    Calendar rightNow = Calendar.getInstance();
    

6.3.1 基本使用

测试类:

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
		//获取对象
        Calendar c = Calendar.getInstance();//多态的形式创建对象
        
        //public int get (int field)方法,根据给定的日历字段返回对应的值
        //获取年月日
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;//Calendar类中的月是从0算起的,需要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");//2022年5月8日
    }
}

6.3.2 常用方法

方法名说明
public int get(int field)返回给定日历字段的值
public abstract void add(int field,int amount)根据日历的规则,将指定的时间量添加或减去给定的日历字段
public final void set(int year,int month,int date)设置当前日历的年月日

测试类:

public abstract void add(int field,int amount)方法的使用

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
		//获取对象
        Calendar c = Calendar.getInstance();//多态的形式创建对象
        //调用方法public abstract void add(int field,int amount)
        //需求:三年前的今天
        c.add(Calendar.YEAR,-3);
        //public int get (int field)方法,根据给定的日历字段返回对应的值
        //获取年月日
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;//Calendar类中的月是从0算起的,需要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");//2019年5月8日
    }
}
import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
		//获取对象
        Calendar c = Calendar.getInstance();//多态的形式创建对象
        //调用方法public abstract void add(int field,int amount)
        //需求:十年后的五天前
        c.add(Calendar.YEAR,10);
        c.add(Calendar.DATE,-5);
        //public int get (int field)方法,根据给定的日历字段返回对应的值
        //获取年月日
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;//Calendar类中的月是从0算起的,需要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");//2032年5月3日
    }
}

public final void set(int year,int month,int date)方法的使用

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
		//获取对象
        Calendar c = Calendar.getInstance();//多态的形式创建对象
        
		//调用public final void set(int year,int month,int date)方法
        //设置当前日历的年月日
        c.set(2022,11,11);//注意这里的月是从0开始的,输入11月会输出12
        
        //public int get (int field)方法,根据给定的日历字段返回对应的值
        //获取年月日
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;//Calendar类中的月是从0算起的,需要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");//2022年12月11日
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值