JAVASE第五章(API)


前言

本章主要介绍了JAVA一些常用的类,包括系统类、包装类、字符类、数组类等,熟悉各种常用类的使用对我们编写程序有很大的帮助


一、Java API概述

API(Application Programming Interface)应用程序编程接口:是对java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明。

在这里插入图片描述


二、基本数据类型包装类

JAVA在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类。
在这里插入图片描述
为什么要设计包装类?

1.Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便。
2.包装类包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
public class IntegerDemo {
    public static void main(String[] args) {
        //使用Integer包装一个整数,可以使用Integer类提供的方法
       /* 对于包装类来说,这些类的用途主要包含两种:
          1.作为和基本数据类型对应的类类型存在
          2.包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法*/
        Integer m = new Integer(10);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(m.byteValue());
        System.out.println(Integer.BYTES);
        Integer n = new Integer("12");   //会自动转换为数值类型;
        System.out.println(n.equals(m));
        System.out.println(n.compareTo(m));
        Integer.max(10,20);
        Integer.min(10,20); 
        System.out.println(Integer.toBinaryString(3));
        System.out.println(Integer.toHexString(17));
        System.out.println(Integer.toOctalString(9));

    }
}

那么在日常使用中,我们如何将包装类和基本类进行互相转换呢?使用装箱和拆箱。
装箱:将基本数据类型转换成包装类类型。以Integer为例,装箱的时候自动调用的是Integer的valueOf(int)方法。

//装箱的时候自动调用的是Integer的valueOf(int)方法
int x=1;
Integer m=x;   //装箱,把基本数据类型赋给引用类型;
//Integer m=Integer.valueOf(x);
  /*
   自动装箱问题    当范围在-128到127之间时,会从缓存数组中取出一个地址,超出范围会创建一个新的对象;
       public static Integer valueOf(int i) {
            if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
                return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
            return new Integer(i);
       }*/

拆箱:将包装类类型转换成基本数据类型。以Integer为例,拆箱的时候自动调用的是Integer的intValue方法。

//拆箱的时候自动调用的是Integer的intValue方法
Integer m=1;
int y=m;       //拆箱,把引用数据类型赋给基本数据类型
//int y=m.intValue();
/*   public int intValue() {
         return value;
}*/
             

三、Object类

1.什么是Object类

Object类是所有Java类的祖先(根基类)。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。

//如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
public class Person { ... }
//等价于:
public class Person extends Object {
... }

2.toString方法

Object类中定义有public String toString()方法,其返回值是 String类型,返回的是地址值。
大多数情况下我们都会选择重写toString()方法,返回我们需要的内容。

public class Person {
    private int age;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {         //重写了Object里面的toString方法
        return "age=" + age +
                " name='" + name ;
    }
    @Override
    public boolean equals(Object o) {           //重写Object里面的equals方法
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                name.equals(person.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
}


public class ObjectToString extends Object{
    public static void main(String[] args) {
      Person p1=new Person();
      Person p2=new Person();
      p1.setName("张三");
      p1.setAge(20);
      p2.setName("张三");
      p2.setAge(20);
        //如果不在Person类里面重写toString方法则调用的是父类Object里面的toString方法
        /*  public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());*/

      System.out.println(p1);   //调用的是重写的toString方法
    }
}
import java.util.Arrays;
public class ArraysToString {
    public static void main(String[] args) {
        int []a={1,2,3};
        int []b={1,2,3,4,5};
        System.out.println(a);    //调用的是Object类里面的toString方法;
        System.out.println(Arrays.toString(a));    //调用的是Arrays里面的toString方法,返回指定数组内容的字符串表示形式
        /*  public static String toString(int[] a) {
            if (a == null)
                return "null";
            int iMax = a.length - 1;
            if (iMax == -1)
                return "[]";

            StringBuilder b = new StringBuilder();
            b.append('[');
            for (int i = 0; ; i++) {
                b.append(a[i]);
                if (i == iMax)
                    return b.append(']').toString();
                b.append(", ");
            }
        }*/

    }
}

3.equals方法

x.equals ( y ) :当 x 和 y是同一个对象的引用时返回 true 否则返回 false

JDK提供的一些类,如String,Date等,重写了Object的equals方法
调用这些类的equals方法, 比较的是内容是否相同。
大多数情况下都需要重写equals方法,equals方法往往和hashcode方法同时重写。
public class ObjectEquals {
    public static void main(String[] args) {
        Person p1=new Person();
        Person p2=new Person();
        p1.setAge(10);
        p1.setName("李四");
        p2.setAge(10);
        p2.setName("李四");
        System.out.println(p1==p2);
        //System.out.println(p1.equals(p2));   没有重写equals方法,调用的是Object里面的equals方法,
        /*Object 的 equals 方法 定义为:x.equals ( y ) ,当 x 和 y是同一
        个对象的引用时返回 true 否则返回 false*/
        System.out.println(p1.equals(p2));//在Person里面重写了equals方法后,调用重写的方法;
        String a=new String("张三");
        String b=new String("张三");
        System.out.println(a==b); //== 当基本类型比较时比较的是值,引用类型比较的是地址;

        System.out.println(a.equals(b));        //调用的是String类重写的equals方法,比较的是值
              /*  public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String)anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                            return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }*/
    }
}
public class ArraysEquals {
    public static void main(String[] args) {
        int a[]={1,2};
        int b[]={1,2};
        System.out.println(a.equals(b));   //数组本身的equals判断另一个数组是否它本身
     /*   public boolean equals(Object obj) {
            return (this == obj);
        }*/
        System.out.println(Arrays.equals(a,b)); //调用Arrays类中重写的equals方法;
         /*       public static boolean equals(int[] a, int[] a2) {
            if (a==a2)
                return true;
            if (a==null || a2==null)
                return false;

            int length = a.length;
            if (a2.length != length)
                return false;

            for (int i=0; i<length; i++)
                if (a[i] != a2[i])
                    return false;

            return true;
        }*/



    }
}

四、Arrays类

排序方法:

1.用于数组的所有元素排序
public static void sort(type[] a)

2.用于数组指定范围内的元素排序
public static void sort(type[] a, int fromIndex(包括), int toIndex(不包括))

3.自定义对象排序
  1.自定义类实现Comparable接口
  2.重写compareTo方法
public class Student implements Comparable<Student> {
    String name;
    int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    //自定义类实现Comparable接口
    //重写compareTo方法自定义类实现Comparable接口
    //sort内部会调用compareTo方法

    public int compareTo(Student o) {
        return this.age-o.age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

import java.util.Arrays;
public class ArraysSort {
    public static void main(String[] args) {
        int []a={5,4,3,2,1};
      /*  public static void sort(int[] a) {
            DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
        }*/
       //Arrays.sort(a);    //利用Arrays类里面的sort方法进行排序
        Arrays.sort(a,0,3);   // 排序的元素下标为0 1 2
        System.out.println(Arrays.toString(a));
        Student []p=new Student[5];
        Student s1=new Student("张三1",20);
        Student s2=new Student("张三2",21);
        Student s3=new Student("张三3",22);
        Student s4=new Student("张三4",23);
        Student s5=new Student("张三5",24);
        p[0]=s1;
        p[1]=s5;
        p[2]=s4;
        p[3]=s3;
        p[4]=s2;
       /* Arrays.sort(p);
        报错:com.ffyc.api.day2.Student cannot be cast to java.lang.Comparable,因为Student类没有实现Comparable接口;*/
        //当实现Comparable接口并且重写了compareTo方法后:
        Arrays.sort(p);
        System.out.println(Arrays.toString(p));
    }
}

binarySearch -使用二分搜索算法搜索指定数组

import java.util.Arrays;
public class ArraysBinarySearch {
    public static void main(String[] args) {
        int []a={1,3,4,2,5};
        //在查找之前一定要把数组进行排序,不然可能出现找不到数组元素的情况;
        //System.out.println(Arrays.binarySearch(a,2));
        /*private static int binarySearch0(int[] a, int fromIndex, int toIndex,
        int key) {
            int low = fromIndex;
            int high = toIndex - 1;

            while (low <= high) {
                int mid = (low + high) >>> 1;
                int midVal = a[mid];

                if (midVal < key)
                    low = mid + 1;
                else if (midVal > key)
                    high = mid - 1;
                else
                    return mid; // key found
            }
            return -(low + 1);  // key not found.
        }*/
        Arrays.sort(a);
        // 1 2 3 4 5
        System.out.println( Arrays.binarySearch(a,2));
    }
}

copyOf方法:复制指定的数组。

import java.util.Arrays;
public class ArraysCopyOf {
    public static void main(String[] args) {
        int []a={1,2,3,4,5};
        //复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。
         int  []c= Arrays.copyOf(a,10);
        System.out.println(Arrays.toString(c));
    }
}


五、String类

1.String类概述

String类:由多个字符组成的字符串常量,内部使用private final char value[]的数组实现,长度不可变。
两种创建方式:
1.String str1 = new String(“abc”)
2.String str2 = “abc”

两个语句都会去字符串常量池中检查是否已经存在 “abc”,如果有则直接使用,如果没有则会在常量池中创建 “abc” 对象。String str1 = new String(“abc”) 还会通过 new String() 在堆里创建一个 “abc” 字符串对象实例。
在这里插入图片描述
提问:String s = new String(“abc”)创建了几个对象?
答:一个或两个。如果字符串常量池已经有“abc”,则是一个;否则,两个。

当字符创常量池没有 “abc”,此时会创建如下两个对象:
一个是字符串字面量 "abc" 所对应的、字符串常量池中的实例
另一个是通过 new String() 创建并初始化的,内容与"abc"相同的实例,在堆中。
public class StringDemo {
    public static void main(String[] args) {
        String sb="abc";   //字符串底层用一个final修饰的char数组进行存储,值一旦确定不能修改;
        sb+="efg";  //会创建一个新的对象(abcefg)然后让sb指向它,并没有修改原来sb对象的值;
        System.out.println(sb);
        String s1="abc";
        String s2="abc";
        /*先在栈中创建一个对String类的对象引用变量s,然后去字符串常量池中查找
        有没有"abc", 如果没有则在常量池中添加”abc”, s引用变量指向常量池中
        的”abc”,如果常量池中有,则直接指向改地址即可,不用重新创建.*/
        System.out.println(s1==s2);
        System.out.println(s1.equals(s2));
        String s3=new String("abc");   //一概在堆中创建新对象,值存储在堆内存的对象中。
        String s4=new String("abc");
        System.out.println(s3==s4);
        System.out.println(s3.equals(s4));
    }
}

2.String类里面的方法和功能

构造方法:用来初始化一个字符串对象。常用的构造方法有以下三种

public String(String str)
public String(byte[] bytes)
public String(char[] value)
public class StringDemo1 {
   public static void main(String[] args)throws UnsupportedEncodingException {
      /* public String(String original) {
           this.value = original.value;
           this.hash = original.hash;
       }*/
       String s1=new String("abc");  //调用构造方法
       System.out.println(s1);

       String s2="中文";
       byte[]array=s2.getBytes();   //编码    utf-8
       System.out.println(Arrays.toString(array));
       String s3=new String(array);  //解码
       System.out.println(s3);

       String s = "中文";
       byte [] b = s.getBytes("GBK");//编码显性的用GBK格式  默认(utf-8)
       System.out.println(Arrays.toString(b));

       String s4 = new String(b,"GBK");//解码显性的用GBK格式 (默认utf-8)    乱码问题:编码和解码两边使用的编码格式不统一
       System.out.println(s4);

       /*String s5 = new String(b,2,2,"GBK");
       System.out.println(s2);*/

       char[]array2=s2.toCharArray();
       String s6=new String(array2);
       System.out.println(array2);  //printfln方法为char数组提供了一个方法可以直接打印数组的值,其他类型的数组当做object处理
     //  调用的是object类型的tostring方法打印的是地址
       System.out.println(s6);
   }
}

判断功能:判断字符串的内容是否相等或者以指定字符串开头等。

boolean equals(Object obj)   判断内容是否相同,区分大小写
boolean equalsIgnoreCase(String str)  判断内容是否相同,不区分大小写
boolean contains(String str)     判断是否包含指定字符串
boolean isEmpty()    判断是否为空("")  为空返回true
startsWith(String prefix)    判断是否以指定的字符串开头
boolean endsWith(String suffix)  判断是否以指定的字符串结尾      

System.out.println(s1.equals(s2));
System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.contains("ab"));
System.out.println(s1.isEmpty());
System.out.println(s1.startsWith("a"));
System.out.println(s1.endsWith("c"));

获取功能:获取字符串的长度,第几个位置的元素,以及指定区间的字符串等。

 int length()
 char charAt(int index)
 int indexOf(String str)
 int indexOf(String str,int fromIndex)
 String substring(int start)
 String substring(int start,int end)

 System.out.println(s1.length());   //放回字符串的长度
 System.out.println(s1.charAt(1)); //返回指定索引的字符
 System.out.println(s1.indexOf("a"));   //获取指定字符串首次出现的位置 从前向后找
 System.out.println(s1.indexOf("a",1));
 String s3=new String("abcdefg");         //0123456                   
 System.out.println(s3.substring(2));  
 //从s中截取指定区间的字符串:从指定位置开始到结束   输出:cdefg
 System.out.println(s3.substring(2,4));  
 //指定区间截取:开始位置-结束位置(不包含结束)    输出:cd

转换功能:把字符串转换成数组,把数组转换成字符串以及转换成大小写等。

char[] toCharArray()
static String valueOf(char[] chs)
String toLowerCase()
String toUpperCase()
String concat(String str)
Stirng[] split(分割符);

String s4="JAVa";
char []charArray=s4.toCharArray();
System.out.println(String.valueOf(12));  //将int的值转换为String类型之后的结果;
System.out.println(s4.toLowerCase());    //将字符串转换为小写
System.out.println(s4.toUpperCase());       //将字符串转换为大写
System.out.println(s4);
String s5="SE";
String s6=s4.concat(s5);          //两个字符串拼接 并返回新的字符串对象
System.out.println(s6);
String s7="JAVA-SE";
String[]s7Array=s7.split("-");
//根据参数regex(regex是一个正则表达式,用来限定分隔规则)将字符串分隔为若干个子字符串
System.out.println(Arrays.toString(s7Array));

替换功能:将字符串中的一些内容替换掉

public class StringDemo3 {
    public static void main(String[] args) {
        /**
         * 替换功能
         * String replace(char old,char new)
         * String replace(String old,String new)
         * replaceAll(String regex, String replacement)
         * replaceFirst(String regex, String replacement)
         * 去除字符串两空格
         * String trim()
         */
        String s1="abcde";
        System.out.println(s1.replace("a","t"));  //用t来代替a
        String s2="a1b1c";
        System.out.println(s2.replaceAll("\\d","a")); //正则表达式,用a代替所有的数字
        System.out.println(s2.replaceFirst("\\d","a")); //用a代替第一个出现的数字
        String s3=" abcdf ";
        System.out.println(s3);
        System.out.println(s3.trim());  //只能修剪两端的空格
    }
}

六、正则表达式

正则表达式是一种字符串模式匹配语言,是一种规则。可以用来判断格式是否满足要求。

package com.ffyc.api.day3;
public class StringDemo2 {
    public static void main(String[] args) {
        /**
         *  . 任何字符(与行结束符可能匹配也可能不匹配)
         * \d 数字:[0-9]
         * \D 非数字: [^0-9]
         * \s 空白字符:[ \t\n\x0B\f\r]
         * \S 非空白字符:[^\s]
         * \w 单词字符:[a-zA-Z_0-9]
         * \W 非单词字符:[^\w]
         *
         * X? X,一次或一次也没有
         * X* X,零次或多次
         * X+ X,一次或多次
         * X{n} X,恰好 n 次
         * X{n,} X,至少 n 次
         * X{n,m} X,至少 n 次,但是不超过 m 次
         *
         * X|Y X 或 Y
         */
        //以判断一个电话号码格式是否正确为例
        String s1="1";
        System.out.println(s1.matches("\\d"));  //是数字(只有一个)而且不能为空时返回true
        String s2="12345678910";
        System.out.println(s2.matches("\\d?"));  //一次或者一次都没有
        System.out.println(s2.matches("\\d*"));  //零次或多次(可以为空)
        System.out.println(s2.matches("\\d+"));   //一次或多次
        System.out.println(s2.matches("\\d{11}"));  //恰好11次;
        System.out.println(s2.matches("\\d{1,11}"));  //最少一次,但是不超过11次;
       //手机号匹配规则
        String s3="13057900521";
        System.out.println(s3.matches("1[35]\\d{9}")); //第一位是1第二位是3或者5加上9位构成11位电话号码
        System.out.println("17057900521".matches("1[35]\\d{9}")); //第二位不符合规则为false
        System.out.println("1".matches("1|2"));  //1或2时返回true
        //邮箱匹配模规则
        //1971812605Jzh@qq.com或者1971812605Jzh@qq.com.cn

        String s4="1971812605Jzh@qq.com.cn";
        System.out.println(s4.matches("\\w{6,16}@\\w{2,5}\\.(com|com\\.cn)"));

    }
}


七、StringBuffer类

字符串每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。StringBuffer就可以解决这个问题,StringBuffer是线程安全的可变字符序列。

构造方法:用来初始化StringBuffer类。

public StringBuffer()
public StringBuffer(String str)
 StringBuffer s1=new StringBuffer();  //StringBuffer内部采用char数组实现,无参默认为16大小
 /*  public StringBuffer() {
     super(16);
 }*/
 StringBuffer s2=new StringBuffer("abcde");
 /*public StringBuffer(String str) {
     super(str.length() + 16);   //16+5=21
     append(str);
 }*/

添加功能:往StringBuffer中增加字符串。

public StringBuffer append(String str)
public StringBuffer insert(int offset,String str)
s2.append("1111111111");  //更改对象里面的char数组,对象本身没有改变
s2.append("1111111111");  //当长度超过时,会自动增加数组长度,更改数组的地址,对象本身地址不改变
/* private void ensureCapacityInternal(int minimumCapacity) {
     // overflow-conscious code
     if (minimumCapacity - value.length > 0) {
         value = Arrays.copyOf(value,
                 newCapacity(minimumCapacity));
     }
 }*/
s2.insert(2,"xxx");   //在指定位置插入

删除功能:删除指定位置的字符串。

public StringBuffer deleteCharAt(int index)
ublic StringBuffer delete(int start,int end)
s2.deleteCharAt(1);
System.out.println(s2);
s2.delete(1,5);  //删除指定区间的字符串,包含开始,不包含结尾
System.out.println(s2);

替换功能:替换指定位置的字符串。

 public StringBuffer replace(int start,int end,String str)

反转功能:反转StringBuffer里面的字符串。

public StringBuffer reverse()

截取功能:截取部分字符串,本身不发生改变。

public String substring(int start)
public String substring(int start,int end)

String类和StringBuffer类和StringBuilder区别?

String:String 的值被创建后不能修改,任何对 String 的修改都会引发新的 String 对象的生成。
StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全。
StringBuilder:StringBuffer 的非线程安全版本,性能上更高一些。
StringBuffer  添加synchronized 同步锁  多线程安全
public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);调用父类
        return this;
 }
StringBuilder  没有添加同步锁  多线程不安全
public StringBuilder append(String str) {
        super.append(str);  调用父类
        return this;
}

八、Math类

java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。

ublic class MathDemo {
    public static void main(String[] args) {
       /* abs 绝对值
        sqrt 平方根
        pow(double a, double b) a的b次幂
        max(double a, double b)
        min(double a, double b)
        random() 返回 0.0 到 1.0 的随机数
        long round(double a) double型的数据a转换为long型(四舍五入)*/
        System.out.println(Math.abs(-5));  //绝对值
        System.out.println(Math.sqrt(9));  //平方根
        System.out.println(Math.pow(2,3));  //幂运算
        System.out.println(Math.max(10,24)); //求最大值
        System.out.println(Math.min(5,10));  //求最小值
        System.out.println(Math.random());   //返回 0.0 到 1.0 的随机数
        System.out.println(Math.floor(9.9));  //向下取整
        System.out.println(Math.ceil(9.1));  //向上取整
        System.out.println(Math.round(9.8));//double型的数据a转换为long型(四舍五入)
    }
}

九、Random类

Random类:此类用于产生随机数,需要随机数的场合可以使用该类。

public class RandomDemo {
    public static void main(String[] args) {
        /**
         * 构造方法
         * public Random()
         * 成员方法
         * public int nextInt()
         * public int nextInt(int n)
         */
        Random d=new Random();
        System.out.println(d.nextInt());
        System.out.println(d.nextInt(33));  //返回0-32直接的一个数;
        System.out.println(d.nextBoolean());
    }
}

十、System类

System 类:位于 java.lang 包,代表当前Java程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。

注意:由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。

System 类中提供了一些系统级的操作方法,常用的方法有 arraycopy()、currentTimeMillis()、exit()、gc() 和 getProperty()。

package com.ffyc.api.day4;
import java.util.Arrays;
public class SystemDemo1 {
    public static void main(String[] args) {
        long time1=System.currentTimeMillis(); //返回当前时间(以毫秒为单位) 从1970-1-1  0:0:0
        System.out.println(time1);
        for (int i = 0; i <10000 ; i++) {
            System.out.println(i);
        }
        long time2=System.currentTimeMillis();
        System.out.println(time2-time1);
        System.out.println(System.getenv());    //返回当前系统环境的不可修改的字符串映射视图。
        System.out.println(System.getenv("path"));  //获取指定环境变量的值。
        System.out.println(System.getProperties());   //getProperties() 确定当前的系统属性。
      //  System.exit(0); //终止当前运行的Java虚拟机。
        /*src - 源数组。
        srcPos - 源数组中的起始位置。
        dest - 目标数组。
        destPos - 目的地数据中的起始位置。
        length - 要复制的数组元素的数量。*/
        int []a=new int[]{1,2,3,4,5};
        int []b=new int[10];
        System.arraycopy(a,0,b,0,5);
        System.out.println(Arrays.toString(b));
    }
}

十一、Date类和Calendar类

Date:代表当前系统时间,由于Date类不便于实现国际化,Date的一些方法都过时了,系统推荐使用Calendar类。

Calendar:是一个抽象类,需要使用getInstance方法创建即可。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

import java.util.Date;
public class DateDemo1 {
    public static void main(String[] args) {
        Date d=new Date();
        System.out.println(d.getTime());
        System.out.println(d.getYear()+1900);
        System.out.println(d.getDate());
        System.out.println(d.getHours());
        System.out.println(d.getMinutes());
        System.out.println(d.getSeconds());
        System.out.println(d.toLocaleString()); //将此 Date对象转换为 LocalDate
        Date d2=new Date(1621740628485L);   //使用给定的毫秒时间值构造一个 Date对象。
        System.out.println(d2.getYear()+1900);
        System.out.println(d2.getMinutes());
        System.out.println(d2.getSeconds());
    }
}


import java.util.Calendar;
import java.util.Locale;
public class CalendarDemo1 {
    public static void main(String[] args) {
       /* Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建
        对象的过程对程序员来说是透明的,只需要使用getInstance方法创建
        即可。*/
        Calendar c1=Calendar.getInstance(Locale.CHINA);
        System.out.println(c1.get(Calendar.DAY_OF_MONTH));
        System.out.println(c1.get(Calendar.DAY_OF_WEEK_IN_MONTH));
        System.out.println(c1.get(Calendar.DAY_OF_WEEK));
        System.out.println(c1.get(Calendar.DAY_OF_YEAR));
        System.out.println(c1.getTime());

    }
}

SimpleDateFormat:日期格式化类,用来将日期格式化成我们需要的样子。

package com.ffyc.api.day4;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo1 {
    public static void main(String[] args) throws ParseException {
        Date d1=new Date();
        SimpleDateFormat myformat=new SimpleDateFormat("yyyy-MM-dd");
        String str=myformat.format(d1);    //日期转字符串
        System.out.println(str);
        String str2="2021-06-21";
        d1=myformat.parse(str2);      //字符串转日期
        System.out.println(d1);
        System.out.println(d1.getYear()+1900);  //获得年
        System.out.println(d1.getMonth()+1);  //获得月
        System.out.println(d1.getDate());  //获得天
    }
}


十二、BigIntege和BigDecima

BigIntege类:基于Integer的局限性,最大值为2^31-1,若需要更大的整数数据,就可以使用BigIntege。

import java.math.BigInteger;
public class BigIntegeDemo1 {
    public static void main(String[] args) {
        //BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支
        //持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何
        //大小的整数值而不会丢失任何信息。
            BigInteger a=new BigInteger("11111111111112222");
            BigInteger b=new BigInteger("1111122121212111111111111");
            System.out.println(a.add(b));
    }
}

BigDecima:不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去
一定的精确度。BigDecima类可以帮助我们解决这个问题。

根本原因是:十进制值通常没有完全相同的二进制表示形式;
十进制数的二进制表示形式可能不精确,只能无限接近于那个值。
import java.math.BigDecimal;
import java.math.BigInteger;
public class BigDecimalDemo1 {
    public static void main(String[] args) {
        /*
        double b = 0.8-0.7;
        System.out.println(b);   //输出0.10000000000000009
        BigDecimal b1=new BigDecimal("0.8");
        BigDecimal b2=new BigDecimal("0.7");
        System.out.println(b1.subtract(b2));   //输出0.1
    }
}

总结

API是JAVA程序员必备的文档。在平时编代码的过程中,当我们遇到问题或者对类和方法的使用不清楚的情况下,我们可以通过API快速的查找相关的知识。学习JAVA的常用类一定要通过自己编写程序来熟悉它的语法以及使用场景。要不断的练习,加深印象,直到牢固记忆为止。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JinziH Never Give Up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值