初识-API全解

目录

什么是API?

常见API

String

创建对象封装字符串数据的方式

常用方法

使用时的注意事项

知识问答

ArrayList

Arrays

常见方法

sort若存储的是对象

自定义排序规则时,需要遵循的官方约定如下

Object

作用

Object类的常见方法

浅克隆

深克隆

Objects

作用

Objects类的常见方法

包装类

为什么要有包装类

包装类有哪些?

自动装箱,底层调用valueOf方法

自动拆箱,底层调用intValue方法

反编译

StringBuilder和StringBuffer

StringBuilder

StringBuffer

两者的比较

StringJoiner

StringJoiner是啥?

使用它有什么好处?

构造器

方法

Math

常见方法

System

常见方法

Runtime

常见方法

BigDecimal

作用

常见构造器

常用方法

传统日期时间(了解即可)

Date

SimpleDateFormat

Calendar

JDK8开始新增的日期时间

为什么要学JDK 8新增的时间?

 LocalDate

LocalTime

LocalDateTime

ZoneId

ZoneDateTime

Instant

DateTimeFormatter

Duration

Period


什么是API?

        API(Application Programming interface)  :应用程序编程接口,就是Java帮我们已经写好一些程序,如:类、方法等,我们直接拿过来用就可以解决一些问题,开发效率更高

常见API

String

创建对象封装字符串数据的方式

方式一: 直接使用双引号“...”
方式二: new String类,调用构造器初始化字符串对象

public String()   // 创建一个空白字符串对象,不含有任何内容
public String(String original)    //根据传入的字符串内容,来创建字符串对象
public String(char[] chars)    //根据字符数组的内容,来创建字符串对象
public String(byte[] bytes)    //根据字节数组的内容,来创建字符串对象

常用方法

         public int length​()    //获取字符串的长度返回(就是字符个数)
         public char charAt​(int index)    //获取某个索引位置处的字符返回
         public char[] toCharArray​()    //将当前字符串转换成字符数组返回
         public boolean equals(Object anObject)     //判断当前字符串与另一个字符串的内容一样,一样返回true
         public boolean equalsIgnoreCase(String anotherString)    //判断当前字符串与另一个字符串的内容是否一样(忽略大小写)
         public String substring(int beginIndex, int endIndex)     //根据开始和结束索引进行截取,得到新的字符串(包前不包后)
         public String substring(int beginIndex)     //从传入的索引处截取,截取到末尾,得到新的字符串返回
         public String replace(CharSequence target, CharSequence replacement)     //使用新值,将字符串中的旧值替换,得到新的字符串
         public boolean contains(CharSequence s)    //判断字符串中是否包含了某个字符串
         public boolean startsWith(String prefix)    //判断字符串是否以某个字符串内容开头,开头返回true,反之
         public String[] split(String regex)     //把字符串按照某个字符串内容分割,并返回字符串数组回来

使用时的注意事项

        第一点

        String对象的内容不可改变,被称为不可变字符串对象。

        第二点

        只要是以“...”方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份;

        但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中

        Java存在编译优化机制,程序在编译时: “a” + “b” + “c” 会直接转成 “abc”,以提高程序的执行性能,故在字符常量池里面

知识问答

        字符串的比较使用==比较好吗?为什么?什么时候使用==?

        不好,对于字符串对象的比较,==比较的是地址,容易出业务bug

        基本数据类型的变量或者值应该使用==比较。

         比较字符串推荐使用什么方式比较?

        使用String提供的equals方法,它只关心字符串内容一样就返回true。

        方法名

        equals

        equalsIgnoreCase

ArrayList

什么是集合?

        集合是一种容器,用来装数据的,类似于数组,但和数组不同的是长度可变

有数组,为啥还学习集合?

        数组定义完成并启动后,长度就固定了。

        集合大小可变,开发中用的更多

ArrayList<E>

        用的最多、最常见的一种集合。

构造器

         public ArrayList​()    创建一个空的集合对象

常用方法名

public boolean add(E e)    //将指定的元素添加到此集合的末尾
public void add(int index,E element)    //在此集合中的指定位置插入指定的元素
public E get(int index)    //返回指定索引处的元素
public int size()    //返回集合中的元素的个数
public E remove(int index)    //删除指定索引处的元素,返回被删除的元素
public boolean remove(Object o)   // 删除指定的元素,返回删除是否成功
public E set(int index,E element)    //修改指定索引处的元素,返回被修改的元素

知识问答

        方式一:每次删除一个数据后,索引-1。

        方式二:从集合后面遍历然后删除,可以避免漏掉元素。

Arrays

        用来操作数组的一个工具类。可以用内容.split("分隔符");

常见方法

public static String toString​(类型[] arr)  //返回数组的内容
public static int[] copyOfRange​(类型[] arr, 起始索引, 结束索引) //拷贝数组(指定范围)
public static copyOf​(类型[] arr, int newLength)//拷贝数组
public static setAll​(double[] array, IntToDoubleFunction generator)//把数组中的原数据改为新数据
public static void sort​(类型[] arr)//对数组进行排序(默认是升序排序)

sort若存储的是对象

        方法1.让该对象的类实现Comparable(比较规则)接口,然后重写compareTo方法,自己在方法中制定比较规则。
        比较对象中带字符串的比较方式this.name.compareTo(s.name);忽略大小写比较 o1.compareToIgnoreCase(o2)

        方法2.创建Comparator比较器接口的匿名内部类对象,写在生成的对象(数组,集合)构造中然后自己制定比较规则。  使用这个sort方法, public static <T> void sort(T[] arr,new Comparator<? super T> c) 

自定义排序规则时,需要遵循的官方约定如下

return this.属性名-容器中已经存在的对象.属性名

如果认为左边对象大于右边对象返回正整数

如果认为左边对象小于右边对象返回负整数

如果认为左边对象等于右边对象返回0整数

       eg:排身高可用Double
 return Double.compare(值1,值2);

Object

作用

        Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法。

Object类的常见方法

public String toString()//返回对象的字符串表示形式。
 //存在的意义就是为了被子类重写,以便返回对象具体的内容。

public boolean equals(Object o)//判断两个对象是否相等。
 //直接比较两个对象的地址是否相同完全可以用“==”替代equals,为了被子类重写,以便子类自己来定制比较规则(比如比较对象内容,如果两个都是null,则会报错,空指针异常)
protected Object clone​()//对象克隆,复制一个一模一样的新对象返回。


浅克隆

        拷贝出的新对象,与原对象中的数据一模一样(引用类型拷贝的只是地址)
         super.clone();

深克隆

        对象中基本类型的数据直接拷贝。
        对象中的字符串数据拷贝的还是地址。
        对象中包含的其他对象,不会拷贝地址,会创建新对象。

用法

        1.子类需要重写clone方法;
        2.子类需要实现Cloneable(标记)接口
        3.默认super.clone()是浅拷贝,深拷贝需要自己手动拷贝引用类型
        //深拷贝自己手动拷贝引用类型

  Student stu = (Student) super.clone();
  stu.score  =  stu.score.clone();  
  return  stu;

Objects

作用

        是一个工具类,提供了很多操作对象的静态方法给我们使用。

Objects类的常见方法

public static boolean equals(Object a, Object b)
//先做非空判断,再比较两个对象更安全

public static boolean isNull(Object obj) 
//判断对象是否为null,为null返回true ,反之

public static boolean nonNull(Object obj) 
 //判断对象是否不为null,不为null则返回true, 反之

包装类

为什么要有包装类

        为了万物皆对象,并且泛型和集合都不支持基本类型,支持包装类

包装类有哪些?

        8种,int -> Integer ,   char -> Character,其他的都是首字母大写

//Integer构造方法(过时)                     
Integer i1=new Integer("200"或100); 

//静态方法(代替构造)                       
Interger i2=Integer.valueOf("200"或100);

//将字符串转换成int数值
String age="19";
int intage= Integer.parseInt(age);

//将Integer对象封装成数值转为String类型   
String s=i2.toString();

自动装箱,底层调用valueOf方法

        基本数据类型可以自动转换为包装类型

        把基本类型的数据转换成对应的包装类(字符串类型)。

public static String toString(double d) 
public String toString()

                eg:Integer in=100;底层调用valueOf方法
                等同于Integer in=Integer.valueOf(100);

自动拆箱,底层调用intValue方法

        包装类型可以自动转换为基本数据类型。

        可以把字符串类型的数值转换成数值本身对应的数据类型。

public static int parseInt(String s) 
public static Integer valueOf(String s)

                eg:int num=in;底层调用intValue方法
                等同于int num=in.intValue方法;

反编译

        通过javac-p 字节码文件名,查看底层对应的valueof和intValue方法

StringBuilder和StringBuffer

StringBuilder

        可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的。

与String的比较

StringBuilder比String更适合做字符串的修改(频繁的拼接、修改)操作,效率会更高,代码也会更简洁。

String不可变字符串、频繁操作字符串会产生很多无用对象,性能差。

注意:如果操作字符串较少,或者不需要操作,以及定义字符串变量,还是建议用String。

构造器
 

public StringBuilder()//创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str)//创建一个指定字符串内容的可变字符串对象

方法

public StringBuilder append(任意类型)//添加数据并返回StringBuilder对象本身
public StringBuilder reverse()//将对象的内容反转
public int length()//返回对象内容长度
public String toString()//通过toString()就可以实现把StringBuilder转换为String

StringBuffer

        StringBuffer的用法与StringBuilder是一模一样的

两者的比较

        StringBuilder是线程不安全的

        StringBuffer是线程安全的

StringJoiner

StringJoiner是啥?

        JDK8出现的一个可变的、操作字符串的容器。

使用它有什么好处?

        使用它拼接字符串的时候,不仅高效,而且代码的编写更加的方便。

构造器

public StringJoiner (间隔符号)
//创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner (间隔符号,开始符号,结束符号)
//创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号

方法

public StringJoiner add (添加的内容)
//添加数据,并返回对象本身 数组内容遍历 SJ.add(ARR[i]+"");
public int length​()
//返回长度 ( 字符出现的个数)
public String toString​()
//返回一个字符串(该字符串就是拼接之后的结果)

Math

        代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法

常见方法

public static int abs​(int a) //获取参数绝对值
public static double ceil​(double a)//向上取整
public static double floor​(double a)//向下取整
public static int round​(float a)//四舍五入
public static int max​(int a,int b)//获取两个int值中的较大值
public static double pow​(double a,double b)//返回a的b次幂的值
public static double random​()//返回值为double的随机值,范围[0.0,1.0)

System

        System代表程序所在的系统,也是一个工具类。

常见方法

public static void exit​(int status)//终止当前运行的Java虚拟机。 
public static long currentTimeMillis​()//返回当前系统的时间毫秒值形式
//指的是从1970年1月1日(算C语言的生日)    00:00:00走到此刻的总的毫秒数,应该是很大的。1s=1000ms。
public static void arraycopy()拷贝数组元素//arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)

Runtime

        Runtime是一个单例类。代表程序所在的运行环境。

常见方法

public static Runtime getRuntime()//返回与当前Java应用程序关联的运行时对象
public void exit​(int status)//终止当前运行的虚拟机
public int availableProcessors()// 返回Java虚拟机可用的处理器数。
public long totalMemory()//返回Java虚拟机中的内存总量 
public long freeMemory()//返回Java虚拟机中的可用内存
public Process exec​(String command)//启动某个程序,并返回代表该程序的对象

BigDecimal

作用

        用于解决浮点型运算时,出现结果失真的问题。

常见构造器

public BigDecimal(double val)  //注意:不推荐使用这个将 double转换为 BigDecimal 
public BigDecimal(String val)  //把String转成BigDecimal

常用方法

public static BigDecimal valueOf(double val)//转换一个 double成 BigDecimal               //eg:BigDecimal b1 = BigDecimal.valueOf(0.1)
public BigDecimal add(BigDecimal b)//加法
public BigDecimal subtract(BigDecimal b)//减法
public BigDecimal multiply(BigDecimal b)//乘法
public BigDecimal divide(BigDecimal b)//除法
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) //除法、可以控制精确到小数几位
       RoundingMode.HALF_UP//四舍五入
       RoundingMode.UP//进一法
       RoundingMode.FLOOP//去尾法
public double doubleValue()//将BigDecimal转换为double

传统日期时间(了解即可)

Date

        代表的是日期和时间。

构造器

 public Date()//创建一个Date对象,代表的是系统当前此刻日期时间。
 public Date(long time)//把时间毫秒值转换成Date日期对象。

常见方法

public long getTime()//返回从1970年1月1日    00:00:00走到此刻的总的毫秒数
public void setTime(long time)//设置日期对象的时间为当前时间毫秒值对应的时间

SimpleDateFormat

        代表简单日期格式化,可以用来把日期对象、时间毫秒值格式化成我们想要的形式。

常见构造器

public SimpleDateFormat​(String pattern)//创建简单日期格式化对象,并封装时间的格式

格式化时间的方法

public final String format(Date date)//将日期格式化成日期/时间字符串
public final String format(Object time)//将时间毫秒值式化成日期/时间字符串

时间格式的常见符号:

yyyy-MM-dd HH:mm:ss  
yyyy年MM月dd日 HH:mm:ss  

把字符串时间解析成日期对象解析方法

public Date parse​(String source)

Calendar

        代表的是系统此刻时间对应的日历,通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。

        注意:calendar是可变对象,一旦修改后其对象本身表示的时间将产生变化。

常见方法

public static Calendar getInstance()//获取当前日历对象
public int get(int field)//获取日历中的某个信息。
public final Date getTime()//获取日期对象。
public long getTimeInMillis()//获取时间毫秒值
public void set(int field,int value)//修改日历的某个信息。
public void add(int field,int amount)//为某个信息增加/减少指定的值

JDK8开始新增的日期时间

为什么要学JDK 8新增的时间?

传统时间

        1、设计不合理,使用不方便,很多都被淘汰了。
        2、都是可变对象,修改后会丢失最开始的时间信息。
        3、线程不安全。
        4、只能精确到毫秒。

新时间(推荐使用)

        1、设计更合理,功能丰富,使用更方便。
        2、都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间。
        3、线程安全。
        4、能精确到毫秒、纳秒。

小Tip

        1秒=1000毫秒;
        1毫秒=1000微秒;
        1微秒=1000纳秒;

 LocalDate

本地日期(年、月、日、星期)

public static Xxxx now()//获取系统当前时间对应的该对象
       LocaDate ld = LocalDate.now();
public static Xxxx of(…)//获取指定时间的对象
       LocalDate localDate1 = LocalDate.of(2099 , 11,11);

方法

public int geYear()//获取年
public int getMonthValue()//获取月份(1-12)
public int getDayOfMonth()//获取日
public int getDayOfYear()//获取当前是一年中的第几天
Public DayOfWeek getDayOfWeek()//获取星期几:ld.getDayOfWeek().getValue()
withYear、withMonth、withDayOfMonth、withDayOfYear//直接修改某个信息,返回新日期对象
plusYears、plusMonths、plusDays、plusWeeks//把某个信息加多少,返回新日期对象
minusYears、minusMonths、minusDays,minusWeeks//把某个信息减多少,返回新日期对象
equals isBefore isAfter//判断两个日期对象,是否相等,在前还是在后

LocalTime

本地时间(时、分、秒、纳秒)

public static Xxxx now()//获取系统当前时间对应的该对象
           LocalTime lt = LocalTime.now();
public static Xxxx of(…)//获取指定时间的对象
           LocalTime localTime1 = LocalTime.of(9,  8, 59);

方法

public int getHour()//获取小时
public int getMinute()//获取分
public int getSecond()//获取秒
public int getNano()//获取纳秒
withHour、withMinute、withSecond、withNano//修改时间,返回新时间对象
plusHours、plusMinutes、plusSeconds、plusNanos//把某个信息加多少,返回新时间对象
minusHours、minusMinutes、minusSeconds、minusNanos//把某个信息减多少,返回新时间对象
equals isBefore isAfter//判断2个时间对象,是否相等,在前还是在后

LocalDateTime

本地日期、时间(年、月、日、星期、时、分、秒、纳秒)

public static Xxxx now()//获取系统当前时间对应的该对象
          LocalDateTime ldt = LocalDateTime.now();
public static Xxxx of(…)//获取指定时间的对象
          LocalDateTime localDateTime1 = LocalDateTime.of(2025, 11, 16, 14, 30, 01);

方法

getYear、getMonthValue、getDayOfMonth、getDayOfYear,getDayOfWeek、getHour、getMinute、getSecond、getNano
//获取年月日、时分秒、纳秒等
withYear、withMonth、withDayOfMonth、withDayOfYear,withHour、withMinute、withSecond、withNano
//修改某个信息,返回新日期时间对象
plusYears、plusMonths、plusDays、plusWeeks,plusHours、plusMinutes、plusSeconds、plusNanos
//把某个信息加多少,返回新日期时间对象
minusYears、minusMonths、minusDays、minusWeeks,minusHours、minusMinutes、minusSeconds、minusNanos
//把某个信息减多少,返回新日期时间对象
equals isBefore isAfter
//判断2个时间对象,是否相等,在前还是在后

转换相关的API

LocalDate

public LocalDate toLocalDate()//转换成一个LocalDate对象

LocalTime

public LocalTime toLocalTime()//转换成一个LocalTime对象

ZoneId

时区Id

        中国标准时间: 世界标准时间(UTC) + 8小时

常见方法

public static Set<String> getAvailableZoneIds​()// 获取Java中支持的所有时区
public static ZoneId systemDefault​()//获取系统默认时区
public static ZoneId of​(String zoneId)//获取一个指定时区

ZoneDateTime

时区时间

public static ZonedDateTime now​() //获取当前时区的ZonedDateTime对象
public static ZonedDateTime now​(ZoneId zone) //获取指定时区的ZonedDateTime对象
getYear、getMonthValue、getDayOfMonth、getDayOfYeargetDayOfWeek、getHour、getMinute、getSecond、getNano
//获取年月日、时分秒、纳秒等
public ZonedDateTime withXxx(时间) //修改时间系列的方法
public ZonedDateTime minusXxx​(时间) //减少时间系列的方法
public ZonedDateTime plusXxx​(时间) //增加时间系列的方法

Instant

        时间线上的某个时刻/时间戳,通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00 开始走到此刻的总秒数 + 不够1秒的纳秒数

方法

public static Instant now​() //获取当前时间的Instant对象(标准时间)
public long getEpochSecond()//获取从1970-01-01T00:00:00开始记录的秒数。 
public int getNano()//从时间线开始,获取从第二个开始的纳秒数 
plusMillis plusSeconds plusNanos//增加时间系列的方法
minusMillis minusSeconds minusNanos//减少时间系列的方法
equals、isBefore、isAfter//判断系列的方法

作用

        可以用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。

优点

        可以精确到纳秒,并且是不可变对象,推荐用Instant代替Date。

DateTimeFormatter

        格式化器,用于时间的格式化、解析

方法

DateTimeFormatter

public static DateTimeFormatter ofPattern(时间格式) //获取格式化器对象
public String format(时间对象) //格式化时间

LocalDateTime

public String format(DateTimeFormatter formatter)//格式化时间
public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter) //解析时间

Duration

        可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持LocalTime、LocalDateTime、Instant等时间。

方法

public static Duration between(开始时间对象1,截止时间对象2) //传入2个时间对象,得到Duration对象
public long toDays()//计算隔多少天,并返回
public long toHours()//计算隔多少小时,并返回
public long toMinutes()//计算隔多少分,并返回
public long toSeconds()//计算隔多少秒,并返回
public long toMillis()//计算隔多少毫秒,并返回
public long toNanos()//计算隔多少纳秒,并返回

Period

        用于计算两个 LocalDate对象 相差的年数、月数、天

方法

public static Period between(LocalDate start, LocalDate end)//传入2个日期对象,得到Period对象
public int getYears()//计算隔几年,并返回
public int getMonths()//计算隔几个月,年返回
public int getDays()//计算隔多少天,并返回

点击这里查看更多知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值