Java常用API和类 2020.05.05

常用API就是要学习一些常用的类和类中的方法

特点:方法多,概念少,就和背单词一样。

1.Object类

​ java.lang.Object是java语言中的根类, 祖宗类。所有的类都直接或间接的继承自Object。

​ 在对象实例化的时候,最终找到的父类就是Object。

1.1 equals()方法

  • 判断相等:

    public class Demo {
           
    
        public static void main(String[] args) {
           
            int a = 10;
            int b = 10;
    
            Student s1 = new Student("柳岩",37);
            Student s2 = new Student("柳岩",37);
    
            /*
                ==号:
                 判断基本数据类型时判断的是值是否相等
                 判断引用数据类型是判断的是地址值是否相等
             */
            System.out.println(a == b);     //true
            System.out.println(s1 == s2);   //false
    
    
            /*
                Object类中有一个equals()方法,作用是判断两个对象是否相同
                
             */
    
            //按住键盘的ctrl+鼠标左键可以查看底层源代码
            System.out.println(s1.equals(s2)); //false
    
        }
    }
    
  • 查看Object中equals的源码:

    • 查看源码发现,Object类里面的equals方法其实也是和==是一样的,也是判断两个对象的地址值是否相同,那么这个方法就没有意义。
    public boolean equals(Object obj) {
           
        return (this == obj);
    }
    
  • idea重写equals()方法:

    • 因为父类的equals()方法没有实际意义,所以在子类中需要自己重写equals方法,只不过也不需要我们自己写,idea是可以帮我们生成的。

    • 重写的equals()方法是判断成员变量

      • 相同类型且成员变量的值相同就会返回true
      //重写方法
      //alt  + insert
      //生成的是两个方法,但是后面那个hashCode()我们现在不用所以可以删掉
      @Override
          public boolean equals(Object o) {
               
              //比如说再测试类中  s1.equals(s2)   this就是s1  o就是s2
              //如果两个对象的地址值是相同的,那么说明姓名年龄肯定相同,直接返回true
              if (this == o) {
               
                  return true;
              }
      
              //getClass()的意思是获取对象的实际类型
              //判断o是空 或者 两个对象不是同种类型,就直接返回false
              if (o == null || this.getClass() != o.getClass()) {
               
                  return false;
              }
      
              //向下转型
              //Object是父类   Student是子类
              //使用o不能调用子类的特有方法和属性,所以需要向下转型
              Student student = (Student) o;
      
              //判断两个对象的年龄是否相同 并且 两个对象的姓名是否相同
              return  age== student.age &&
                      //Objects是什么鬼?一会单独讲解
                      Objects.equals(name, student.name);
          }
      

1.2 toString()方法

  • 输出语句和toString()的关系:

    在输出对象的时候,会自动调用对象的toString()方法
    
  • 查看源码:

    public String toString() {
           
        //获取类全名 + @ + 哈希值的十六进制(地址值)
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    
  • 使用idea完成方法重写:

    • Object类中的toString()方法打印的效果没有什么意义

    • 我们可以在子类中重写toString()方法,用来打印类型和成员变量值

      @Override
      public String toString() {
               
          return "Student{" +
                  "name='" + name + '\'' +
                  ", age=" + age +
                  '}';
      }
      

1.3 Objects类

  • Objects的equals()方法:

    • 作用:

      判断两个对象是否相同。

    • 优点:

      可以避免空指针异常。

    • 代码演示:

      public class Demo_Objects {
               
          public static void main(String[] args) {
               
      
              //这个equals()是一个静态方法,所以可以使用类名直接调用
              //参数可以传入两个对象,可以判断两个对象是否相同
              //这个方法的优点是:可以避免空指针异常
              String s1 = null;
              String s2 = "柳演";
      
              System.out.println(Objects.equals(s1,s2));//false
      
              System.out.println(s1.equals(s2));        //报错!
      
          }
      }
      
      虽然这个方法比较好,但是这个功能挺鸡肋的,我们自己在写代码时候也不需要用。
      

1.4 native关键字

​ native可以用来修饰方法,被native修饰的方法叫做本地方法。

​ 这些方法由于调用非java的代码,所以在java中无法显示。

​ 也就是说,native的方法是无法查看源码的。

​ 我们自己写代码是一定不会用这个东西的,学他是告诉你在底层是如果看到了这个关键字,表示没有源码。

	public native int hashCode();

2.日期类Date

  • 概述:

    java.util.Date表示日期类。可以精确的表示某一个时刻,用毫秒为单位。

  • 构造方法:

方法 说明
public Date() 将当前的系统时间,转换成Date对象
public Date(long date) 将指定参数的毫秒值date,转换成Date对象

​ 标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)

  • 示例代码:

    public class DemoDate的构造方法 {
           
        public static void main(String[] args) {
           
            //public Date()
            //将当前的系统时间,转换成Date对象
            Date d = new Date();
            System.out.println(d);  //Tue May 05 10:36:30 CST 2020
    
            //public Date(long date)
            //将指定参数的毫秒值date,转换成Date对象
    
            //1秒钟
            Date d2 = new Date(1000);
            System.out.println(d2);   //Thu Jan 01 08:00:01 CST 1970
        }
    }
    
  • 常用方法:

方法 说明
getTime() 获取时间对象的毫秒值
setTime(long time) 设置时间对象的毫秒值
before(Date date) 判断当前对象是否在参数时间之前
after(Date date) 判断当前对象是否在参数时间之后
  • 示例代码:
public class DemeDate常用方法 {
     
    public static void main(String[] args) {
     
        //getTime()
        //获取时间对象的毫秒值
        Date d = new Date(1000*60);
        System.out.println(d);

        System.out.println(d.getTime());  
        //对象时间距离1970年1月1日8点0分0秒的时间差值  60000

        Date d2 = new Date();
        System.out.println(d2.getTime()); 
        //当前时间距离1970年1月1日8点0分0秒的时间差值  1588646585598

        //setTime(long  time)
        //设置时间对象的毫秒值
        Date d3 = new Date();
        System.out.println(d3);  //Tue May 05 10:44:20 CST 2020

        d3.setTime(1000*60*60);
        System.out.println(d3);  //Thu Jan 01 09:00:00 CST 1970


        //before(Date date)
        //判断当前对象是否在参数时间之前
        System.out.println(d3.before(d2));  
        //d3表示的是1970年    d2表示的是2020年    true


        //after(Date date)
        //判断当前对象是否在参数时间之后
        System.out.println(d3.after(d));   
        //d3是1970年Jan 01 09:00:00      d是1970年1月1日8点1分0秒   true
    }
}

3.日期格式化类DateFormat

  • 概述:

    DateFormat是一个抽象类。这个类的功能是对日期格式进行改变,还可以对String字符串类型和Date日期类型做互相转换。

  • DateFormat常用方法:

方法 说明
String format(Date date) 格式化:按照指定的格式,把Date对象转换为String对象
Date parse(String s) 解析:按照指定的格式,把String对象转换为Date对象
  • 子类SimpleDateFormat的构造方法:
方法 说明
public SimpleDateFormat(String pattern) 创建时间格式化对象,传入时间模式
  • 示例代码:

    格式化:

    public class Demo格式化 {
           
        public static void main(String[] args) {
           
            //public SimpleDateFormat(String pattern)
            //创建时间格式化对象,传入时间模式
            //模式就是你要的日期格式
            //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
    
            //String format(Date date)
            //格式化:按照指定的格式,把Date对象转换为String对象
            Date d = new Date();
            String s = sdf.format(d);
            System.out.println(s);
        }
    }
    

    解析:

    public class Demo解析 {
           
        public static void main(String[] args) throws ParseException {
           
    
            String s = "1999年09月09日";
    
            //创建对象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
            //解析
            //这个方法会出现红色波浪线,把光标放上去按alt+enter再enter
            Date date = sdf.parse(s);
    
            System.out.println(date);
    
            //ParseException字符串和写的模式不一样,就会报错
        }
    }
    
练习一:字符串日期的格式转化
     /*
        键盘输入一个日期:2008年08月08日
        需求:变成"2008/08/08"的格式
     */
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Demo练习一 {
     
    public static void main(String[] args) throws ParseException {
     
         /*
            键盘输入一个日期:2008年08月08日
            需求:变成"2008/08/08"的格式
         */

        //1.键盘输入字符串表示时间
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个日期:格式(2008年08月08日)");
        String s = sc.nextLine();

        //2.先把字符串转成日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = sdf.parse(s);

        //3.再把日期转成另一个字符串
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
        String s2 = sdf2.format(date);
        System.out.println(s2);

    }
}
练习二:求你来到这个世界多少天?
/*
	键盘输入一个字符串类型的时间,打印来到世界多少天。
	比如:
		请输入你的出生时间:
		1999-01-01 
		你来到这个世界已经8888天了
*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Demo练习二 {
     
    public static void main(String[] args) throws ParseException {
     
        /*
            键盘输入一个字符串类型的时间,打印来到世界多少天。
            比如:
                请输入你的出生时间:
                1999-01-01
                你来到这个世界已经8888天了
        */

        //1.键盘输入一个时间代表生日String
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的出生年月日:(1999年01月01日)");
        String s = sc.nextLine();

        //2.获取现在时间Date
        Date d = new Date();

        //3.把生日的String-->Date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Date d2 = sdf.parse(s);

        //4.获取Date的毫秒值
        long nowTime = d.getTime();
        long birthdayTime = d2.getTime();

        //5.做计算
        System.out.println("你已经活了" +((nowTime-birthdayTime)/1000/60/60/24) + "天");
    }
}

4.日历类Calendar

  • 概述:

    Calendar把和时间相关的值都变成了字段,可以更加方便的对各种值进行单独的操作。

    比如:前面只有毫秒的概念,所以如果要表示一个小时需要:1000乘60乘60

    ​ 在日历类中想要表示一个小时,可以直接 小时 1

  • 创建对象:

    • 直接创建子类GregorianCalendar

      GregorianCalendar  gc = new GregorianCalendar();
      

      在抽象类中,提供了一个今天方法也能返回子类对象

      Calendar c = Calendar.getInstance();
      
  • 常用方法:

方法 说明
int get(int field) 获取某个字段的值
void set(int field,int value) 设置某个字段的值
void add(int field,int amount) 偏移某个字段的值(加减)
setTime(Date date) 把Date对象转成Calendar对象
  • 可以使用Calender中定义的常量来表示:

    Calendar.YEAR : 年 
    Calendar.MONTH :月 
    Calendar.DAY_OF_MONTH:日期
    Calendar.HOUR:小时 
    Calendar.MINUTE:分钟 
    Calendar.SECOND:秒
    Calendar.DAY_OF_WEEK:星期 
    
  • 示例代码:

    • get方法演示

      public class Demo日历的方法 {
               
          public static void main(String[] args) {
               
              //获取对象
              //也是代表当前系统时间
              Calendar c = Calendar.getInstance();
      
              //int get(int field)
              //获取某个字段的值
              //获取年
              int year = c.get(Calendar.YEAR);
              System.out.println(year);
      
              //获取月!!!在日历对象内部,保存月份用的是0-11,也就是说如果是1月保存的是0,如果是12月保存的是11
              int month = c.get(Calendar.MONTH);
              System.out.println(month);
      
              //获取日期
              int day = c.get(Calendar.DAY_OF_MONTH);
              System.out.println(day);
      
              //获取小时
              int hour = c.get(Calendar.HOUR_OF_DAY);
              System.out.println(hour);
      
              //获取分钟
              int minute = c.get(Calendar.MINUTE);
              System.out.println(minute);
      
              //获取秒
              int second = c.get(Calendar.SECOND);
              System.out.println(second);
      
              //获取星期!!!日历类里面保存星期是以星期日作为一周的第1天,星期一就是第2天
              int week = c.get(Calendar.DAY_OF_WEEK);
              System.out.println(week);
      
              //接下来说一个小问题
              //public final static int YEAR = 1;
              //在这里1不是生活中年份的意思,java之不过是用1来代表"年"这个字
          }
      }
      
    • 对于月份和星期的特殊处理

      public class Demo月份和星期的处理 {
               
          public static void main(String[] args) {
               
              //获取对象
              Calendar c = Calendar.getInstance();
      
              //获取月份
              //只要在输出的时候+1就可以了
              int month = c.get(Calendar.MONTH);
              System.out.println(month+1 +"月");
      
              //定义数组
              String[] arr = {
               "  ","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
              //获取星期
              int i = c.get(Calendar.DAY_OF_WEEK); // 1-7
              //返回的结果是3,从数组中获取索引为3的元素就是星期二
              System.out.println(arr[i]);
      
          }
      }
      
    • set()和add()方法演示

      public class Demo02日历的方法 {
               
          public static void main(String[] args) {
               
              //获取对象
              Calendar c = Calendar.getInstance();
              System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日");
      
      
              //void set(int field,int value)
              //设置某个字段的值
              //把年设置成2000年
              c.set(Calendar.YEAR,2000);
              //把月设置成10月
              c.set(Calendar.MONTH,9);
      
              System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日");
      
      
              //void add(int field,int amount)
              //偏移某个字段的值(加减)
              //在当前值的基础上做加减操作
              //让年加10
              c.add(Calendar.YEAR,10);
              //让日减6
              c.add(Calendar.DAY_OF_MONTH,-6);
      
              System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日");
          }
      }
      
    • setTime(Date date)方法演示

      public class Demo03日历的方法 {
               
          public static void main(String[] args) {
               
      
              //setTime(Date date)
              //把Date对象转成Calendar对象
      
              Date d = new Date(1000);
              System.out.println(d);
      
              //把Date的时间赋值给Calendar
              Calendar c = Calendar.getInstance();
      
              c.setTime(d);
      
              System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日");
      
              //这个方法不是讲义中要讲的,只是我发现经常有人用。
              //其实在类中海油很多很多方法我没有讲,我们也讲不完。。。
              //在以后你可能见到我们没有讲的方法,自己查方法的作用
      
          }
      }
      效果:
      	197011

5.Math类

  • 概述:

    Math表示数学,和数学相关的一些计算的方法在这个类中。

    Math是一个工具类。

    【工具类】的意思就是说,这个类的所有成员都是静态的,不需要创建对象可以使用类名直接访问。

  • 常用方法:

方法 说明
static int abs(int a) 获取绝对值
static double ceil(double a) 向上取整
static double floor(double a) 向下取整
static double pow(double a, double b) 获取a的b次方
static long round(double a) 四舍五入
  • 示例代码:
public class Demo_Math {
     
    public static void main(String[] args) {
     
        //static int abs(int a)
        //获取绝对值
        System.out.println(Math.abs(3));   //3
        System.out.println(Math.abs(-4));  //4


        //static double ceil(double a)
        //向上取整
        System.out.println(Math.ceil(3.14));  //4.0

        //static double floor(double a)
        //向下取整
        System.out.println(Math.floor(9.99)); //9.0

        //static double pow(double a, double b)
        //获取a的b次方
        System.out.println(Math.pow(2,3));    //8.0

        //static long round(double a)
        //四舍五入
        System.out.println(Math.round(4.45)); //4
        System.out.println(Math.round(4.5)); // 5
    }
}

6.System类

  • 概述:

    System也是一个工具类。

    和系统相关的一些方法放在System类里。

  • 常用方法:

方法 说明
static void exit(int status) 退出虚拟机,0表示正常退出
static long currentTimeMillis() 获取当前时间的毫秒值
static void arrayCopy() 数组中元素的复制
  • 示例代码:

    public class Demo_System {
           
        public static void main(String[] args) {
           
            //static void exit(int status)
            //退出虚拟机,0表示正常退出
            System.out.println(1);
            System.out.println(2);
            //System.exit(0);
            System.out.println(3);
    
    
    
            //static long currentTimeMillis()
            //获取当前时间的毫秒值
            long time = System.currentTimeMillis();
            System.out.println(time);
    
            Date d = new Date();
            long time2 = d.getTime();
            System.out.println(time2);
    
    
            //static void arraycopy()
            //数组中元素的复制
            int[] arr = {
           11,22,33,44,55,66};
            int[] brr = new int[6];
            /*
             Object src   原数组
             int  srcPos  原数组开始索引
             Object dest  目标数组
             int destPos  目标数组开始索引
             int length   复制的个数
             */
            System.arraycopy(arr,1,brr,0,3);
    
            for (int i = 0; i < arr.length; i++) {
           
                System.out.print(arr[i] + " ");
            }
            System.out.println();
            for (int i = 0; i < brr.length; i++) {
           
                System.out.print(brr[i] + " ");
            }
            System.out.println();
    
    
            int[] crr = {
           11,22,33,44,55};
    
            System.arraycopy(crr,2,crr,0,3);
    
            for (int i = 0; i < crr.length; i++) {
           
                System.out.print(crr[i] + " ");
            }
        }
    }
    

总结(对于实际开发中需要理解和记忆的部分我做了记号)

Object
	equals()【重要,需要理解】
		因为Object类中的equals()判断的是两个对象的地址值,没有意义,所以要重写
		重写之后判断两个对象的类型和成员变量
		
	toString()【重要,需要理解】
		因为Object类的toString()方法返回地址值的字符串,没有意义,所以要重写
		重写之后返回的是成员变量值组成的字符串
		
	Objects
		equals()
			在判断两个对象相同时,避免了空指针异常,但是我们也懒得用[作用有点鸡肋]
	native
		如果在底层看到了native表示这个方法无法查看源码
		
Date
	构造方法:
		new Date():【记】
		new Date(long time):
	常用方法:
		setTime(long time):【记】
		getTime():【记】
		before(Date date):
		after(Date date):
		
SimpleDateFormat
	只有在需要把【字符串】转成【日期】或者【日期】转成【字符串】的时候使用
	创建对象:
		SimpleDateFormat sdf = new SimpleDateFormat("匹配模式yyyy  MM  dd");
	常用方法:
		format(Date date):【记】
		parse(String s):【记】
	
Calendar
	创建对象:
		Calendar.newInstance();
	常用方法:
		get(int field):【记】
		set(int field,int value):【记】
		add(int field,int value):【记】
		setTime(Date date):
		
Math:
	abs(int i):
	ceil(double a):
	floor(double a):
	round(double a):【记】
	pow(int a,int b):
	
System:
	exit(int i) :【记】
	currentTimeMilles():【记】
	arraycopy(Object src,int soff,Object dest,int doff,int len):【记】

你可能感兴趣的:(java)