Java基础:常用API(3)

常用API(3)

一.Math类

1.数学工具类Math

java.util.Math是数学相关工具类,提供大量与数学运算相关得静态方法。

常用的静态方法有:

  • public static double abs (double num): 获取绝对值
  • public static double ceil (double num): 向上取整(12.1–>13)
  • public static double floor (double num): 向下取整(12.1–>12)
  • public static long round (double num): 四舍五入

另外介绍一个常用的成员变量:

  • Math.PI 代表近似的圆周率常量

例子:计算再-10.8到5.9之间绝对值大于6或者小于2.1的整数有多少个?

 /*
 分析:1.已经给定范围:使用for循环
 2.起点-10.8应该转换成整数-10,有两种方法(1)想上取整ceil(double num)(2)强制类型转换,把0.8舍弃
 3.找到绝对值,通过Math.abs(double num);
 4.一旦发现一个数,让计数器++进行统计
 */
 
 double min = -10.8;
 double max = 5.9;
 int count = 0;	//用于计数
 for (int i = (int)min;i < max;i++) {
 	int abs = Math.abs(i);
 	if (abs > 6 || abs < 2.1) {
 		sout(i);
 		count++;
 	}
 }
 sout("总共有:"+count);



二.Object类

1.Object类的toString方法

java.lang.Object
类Object是类层次结构的根类。每个类都使用Object作为超类(父类),所有对象(包括数组)都实现了这个类的方法

toString()方法返回了一个字符串

  • public String toString()
    返回该对象的字符串表示,通常toString方法返回一个”以文本方式表示“此对象的字符串。结果应是一个简明但是易于读懂的信息表达式,建议所有的子类都重写此方法

Object类的toString方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at标记符"@"和此对象的哈希码的无符号十六进制组成。
换句话说该方法返回一个字符串,他的值等于:
getClass().getName()+’@’+Inter.toHexString(hashCode())


2.Object类的equals方法

String类中的equals方法是比较字符串中的内容,是重写了Object类中的equals方法

  • public boolean equals(Object obj): 指示某个对象是否与此对象相等
    源代码如下:
 public boolean equals(Object obj) {
 	return (this == obj);
 }

参数:Object obj:可以传递任意的对象
== 比较运算符
基本数据类型比较的是数值
引用数据类型比较的是两个对象的地址值
this是谁?哪个对象调用的方法,方法中的this就是那个对象


3.重写Object类的equals方法

默认是比较两个对象的地址值,没有什么意义,我们一般像String类一样重写equals方法使之比较两个对象的属性

例子:

 @Override
 public boolean equals(Object obj) {
 	//提高效率
 	if (null == obj) {
 		return false;
 	}
 	//传参如果是this本身,也做一个判断
 	if (obj == this) {
 		return true;
 	}
 	//使用向下转型,将obj转换成Person类型
 	if (obj instanceof Person) {
 		Person p = (Person)obj;
 	}else {
 		return false
 	}
 	//比较两个对象的属性,一个对象是this(p1),一个对象是p(obj-->p2)
 	boolean b = this.name.equals(p.name) && this.age == p.age;
 	return b;	
 }

equals方法可以使用快捷键添加,和get、set方法一样
我们同时还可以看一下系统的源码

 if (o == null || getClass() != o.getClass())	return false;
 //getClass() != o.getClass()使用反射技术,判断o是不是Person类型,等效于instance of
 Person person = (Person)o;
 return age == person.age && Objects.equals(name,person.name);

那么Objects.equals又是什么呢?


4.Objects类的equals方法

在JDK1.7添加了一个Objects工具类。它提供了一些方法操作对象,它由一些静态的实用方法组成。这些方法是null-save(空指针安全)null-tolerate(容忍空指针的)用于计算对象的hashcode、返回字符串表示形式、比较两个对象
NullPointException:null是不能调用方法的,不然就会抛出空指针异常
而Objects类的equals方法:对象个对象进行比较,可以防止空指针异常

 public static boolean equals(Object a,Object b) {
 	return (a == b) || (a != null && a.equals(b));
 }

其实进入方法一看什么意思就很清楚了



三.Date类

1.毫秒值的概念和使用

Date类是日期类表示时期和时间的类
java.util.Date类,表示特定的瞬间,精确到秒
特定的瞬间:一个时间点
毫秒值的作用:可以对时间和日期进行运算
例子:2099-01-03到2088-01-01中间一共多少天
这里有一个时间原点:1970年1月1日 00:00:00中国要加8个小时
那么我们先是把日期换成毫秒,也就是计算当前日期到时间原点之间一共经历了多少毫秒,然后我们把日期转换为毫秒计算,计算完毕之后,再把毫秒转换成日期即可


2.Date类的构造方法和成员方法

  • Date类的空参构造方法:Date()获取当前系统的日期和时间
  • Date类的带参构造方法:Date(long date):传参传一个毫秒值,把毫秒值转换成Date日期
  • 常用的成员方法:getTime():返回自1970年1月1日00:00:00以来此Date对象表示的毫秒数。

3.DateFormat类

java.text.DateFormat 是日期格式化类,可以将英文日期转换成中文日期,它是一个抽象类无法直接使用
DateFormat直接子类SimpleDateFormat类
功能:

  • 格式化 日期–>文本
  • 解析 文本–>日期和标准化

那么怎么格式化和解析呢?
成员方法:

  • String format(Date date): 按照指定的模式把Date日期格式化为符合模式的字符串
  • Date parse(String source): 把符合模式的字符串解析成Date日期

java.text.SimpleDateFormat extends DateFormat
构造方法:
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号描述构造SimpleDateFormat
参数:String pattern:传递指定模式

模式区分大小写:

yMdHms

写对应的模式,会把模式替换为对应的日期和时间。
例: “yyyy-MM-dd HH:mm:ss”
注意:模式中的字母不能更改,连接模式的符号可以改变


4.DateFormat类的format方法和parse方法

  1. 使用DateFormat类中的方法,format把日期格式化为指定的模式
    使用步骤:
  • 创建SimpleDateFormat对象,构造方法中传递指定的模式
  • 调用SimpleDateFormat对象方法format,按照构造方法中指定的模式
    把Date日期格式化为符号模式的字符串(文本) String format(Date date)

我们下面还是做一个例子吧:

public class Main {

 public static void main(String[] args) {
     Date date = new Date();
     System.out.println(date);
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
     String format = sdf.format(date);
     String format1 = sdf1.format(date);
     System.out.println(format);
     System.out.println(format1);
 }
}

运行结果:

在这里插入图片描述

  1. 使用DateFormat类中的方法parse把文本解析成日期
    使用步骤:
  • 创建SimpleDateFormat对象,构造方法中传递指定的模式
  • 调用SimpleDateFormat类中的方法parse。要符合构造方法中的模式
    注意:publc Datr parse(String source) throws ParseException
    parse方法声明了一个异常叫ParseException解析异常
    如果字符串和构造方法中的模式不一样,那么程序就会抛出此异常,调用一个抛出异常的方法就要必须得处理这个异常,要么throws继续抛出这个异常,要么try-catch自己处理

举个例子吧:

 private static void tanglei02() throws ParseException {
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyy年MM月dd日 HH时mm分ss秒");
     Date parse = sdf.parse("2020年5月11日 21时03分01秒");
     System.out.println(parse);
 }

运行结果:

在这里插入图片描述



四.Calendar类

1. Calendar类介绍和获取对象的方法

java.util.Calendar是日历类,在Date类后出现,替换了许多Date的方法,提供了很多操作日历字段的方法
Calendar类是一个抽象类,那么我们如何使用它呢?
我们不使用Calendar的直接已知子类,我们可以通过类方法getInstance()方法,该方法返回了Calendar子类对象

下面还是来试试:

public class Calendar1 {
 public static void main(String[] args) {
     Calendar c = Calendar.getInstance();
     System.out.println(c);
 }
}

运行结果:

在这里插入图片描述

发现一长条很多字段对应的值都在上面,打印出来的不是地址值,说明重写了toString方法。


2. Calendar类常用方法

Calendar常用方法:

  • public int get(int field): 返回给定日历字段的值
  • public void set(int field,int value): 将给定的日历字段设置为给定值
  • public abstract void add(int field,int amount): 根据日历的规则,为给定的日历字段添加或减去指定的时间量
  • public Date getTime(): 返回一个表示此Calendar时间值(从历元到现在的毫秒的偏移量)的Date对象
    成员参数:
    int field:日历的字段,可以使用Calendar类的静态成员变量获取

例子:

package com.company.calendar;

import java.util.Calendar;
import java.util.Date;

/**
* @author Lenovo
*/
public class Calendar1 {
 public static void main(String[] args) {
//        Calendar c = Calendar.getInstance();
//        System.out.println(c);
     tanglei1();
     tanglei2();
     tanglei3();
     tanglei4();
 }

 private static void tanglei4() {
     /*public Date getTime():
      返回一个表示此Calendar时间值(从历元到现在的毫秒的偏移量)的Date对象
      把日历对象转换为日期对象
      */
     Calendar c = Calendar.getInstance();
     Date date = c.getTime();
     System.out.println(date);
 }

 private static void tanglei3() {
     /*public abstract void add(int field,int amount):
      根据日历的规则,为给定的日历字段添加或减去指定的时间量
      参数1:日历字段
      参数2:int amound:增加减少指定的值
     */
     Calendar c = Calendar.getInstance();
     c.add(Calendar.YEAR,2);
     int year = c.get(Calendar.YEAR);
     int month = c.get(Calendar.MONTH);
     int day = c.get(Calendar.DAY_OF_MONTH);
     System.out.println(year + "年" + month + "月" + day + "日");

 }

 private static void tanglei2() {
     /*public void set(int field,int value):
         将给定的日历字段设置为给定值
         参数:1.传递给定的日历字段
              2.int value,给指定的日历字段设置值
     */
     Calendar c = Calendar.getInstance();
     c.set(Calendar.YEAR,9999);
     int year = c.get(Calendar.YEAR);
     int month = c.get(Calendar.MONTH);
     int day = c.get(Calendar.DAY_OF_MONTH);
     System.out.println(year + "年" + month + "月" + day + "日");
     //用set方法同时设置年月日(重载get方法)
     c.set(8888,8,8);
     System.out.println(year + "年" + month + "月" + day + "日");
 }


 private static void tanglei1() {
     //public int get(int field):		返回给定日历字段的值
     //参数:传递指定的日历字段(YEAR,MONTH)
     //返回值:日历字段代表的具体的值

     //1.通过getInstance()方法获取Calendar子类对象,用父类引用,多态写法
     Calendar c = Calendar.getInstance();
     int year = c.get(Calendar.YEAR);
     int month = c.get(Calendar.MONTH);
     int day = c.get(Calendar.DAY_OF_MONTH);
     System.out.println(year + "年" + month + "月" + day + "日");

 }
}

运行结果:

在这里插入图片描述



五.System类

1.System类的常用方法

java.lang.System 提供了大量的静态方法,可以获取与系统相关的信息或者系统级的操作

常用方法:

  • public static long currentTimeMillis(): 返回以毫秒为单位的当前时间
  • public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length): 将数组中指定的部分拷贝到另一个数组中(数组复制)
    1. src 源数组。需要复制的数组
    2. srcPos 源数组的起始位置
    3. dest 目标数组
    4. src 目标数组的起始位置
    5. src 要复制的数组元素的数量

第一个方法常用来测试程序的效率

例子:

 private static void tanglei1() {
     /*
     第一个方法常用来测试程序的效率
     public static long currentTimeMillis():		返回以毫秒为单位的当前时间
      */

     //程序执行前获取一次毫秒值
     long s = System.currentTimeMillis();
     for (int i = 0; i <= 9999; i++) {
         System.out.println(i);
     }
     long e = System.currentTimeMillis();
     System.out.println("程序总耗时:" + (e-s) + "毫秒");
 }

运行结果:

在这里插入图片描述

例子2:

 private static void tanglei2() {
     /*
    public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):
    			将数组中指定的部分拷贝到另一个数组中(数组复制)
             1. src		源数组。需要复制的数组</font>
             2. srcPos		源数组的起始位置</font>
             3. dest		目标数组</font>
             4. src		目标数组的起始位置</font>
             5. src		要复制的数组元素的数量</font>
      */

     int[] src = {1,2,3,4,5};
     int[] dest = {6,7,8,9,10};
     System.arraycopy(src,0,dest,0,3);
     //因为直接打印,打印的是地址,我们借助数组工具类的toString方法
     System.out.println(Arrays.toString(dest));
 }

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值