Java基础第10天

API

Array

Arrays概述

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。

常用方法

获取集合

Arrays.asList() 方法返回的是一个固定大小的数组 , 也就是说不可以进行add 和 remove 操作.否则会产生如下错误

Exceptioninthread “main” java.lang.UnsupportedOperationException
At
java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.wsj.utils.ArraysTest.main(ArraysTest.java:19)

示例代码
// 方法原型 
public static <T> List<T> asList(T... a) 
使用

List

数组排序

对指定的char型数组按数字升序进行排序。该排序算法是一个经过调优的快速排序法

示例代码
// 对数组内所有元素进行排序. 
public static void sort(char[] a); 
// 对指定范围内的数据进行排序. 包括fromIndex 不包括 toIndex 
public static void sort(char[] a,int fromIndex,int toIndex); 
// 其他的类型的... 
使用

// 1. 排序所有元素,结果 : [1, 2, 3, 6, 7, 8, 9, 10]
byte[] testArray = {2,1,9,8,3,7,6,10};
Arrays.sort(testArray);
System.out.println(Arrays.toString(testArray));
// 2. 排序 [2-5), 结果 : [2, 1, 3, 8, 9, 7, 6, 10]
byte[] testArray = {2,1,9,8,3,7,6,10};
Arrays.sort(testArray,2,5);
System.out.println(Arrays.toString(testArray));

二分查找

使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort(byte[]方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。

示例代码
// 在所有元素中查找 
public static int binarySearch(byte[] a,byte key); 
// 在 [fromIndex , toIndex) 区间内查找. 
public static int binarySearch(byte[] a, int fromIndex,int 
toIndex,byte key); 

数组比较

如果两个指定的 boolean 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则认为它们是相等的。

函数原型
public static boolean equals(boolean[] a,boolean[] a2) 

转换字符串

返回指定数组内容的字符串表示形式。字符串表示形式由数组的元素列表组成,括在方括号(”[]”)中。相邻元素用字符 “, “(逗号加空格)分隔。这些元素通过 String.valueOf(double) 转换为字符串。如果 a 为 null,则返回 “null”。

函数原型

// 转换成字符串
public static String toString(double[] a)

示例代码
// 输出结果 : [2, 1, 9, 8, 3, 7, 6, 10]byte[] testArray = 
{2,1,9,8,3,7,6,10}; 
System.out.println(Arrays.toString(testArray)); 

包装类

基本类型包装类概述

将基本数据类型封装成对象类型的类,就叫包装类。好处在于可以提供更多的操作基本数值的功能。
Java提供了8种基本类型对应的包装类:

byte–>Byte
short–>Short
int–>Integer
long–>Long
char–>Character
boolean–>Boolean
float–>Float
double–>Double

其中需要注意 int 对应的是 Integer,char 对应的 Character,其他 6 个都是基本类型首字母大写即可。

  • 将字符串转成基本类型:
    parseXXX(String s);其中XXX 表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题 NumberFormatException

    System.out.println(Integer.parseInt(“123”) + 2);
    //打印结果为 125


将基本数值转成字符串有 3种方式:
  • 基本类型直接与””,相连接即可;34+””
  • 调用 String的 valueOf 方法;String.valueOf(34) ;
  • 调用包装类中的 toString 方法;Integer.toString(34);

基本类型和对象转换

使用int类型与 Integer对象转换进行演示,其他基本类型转换方式相同。

  • 基本数值—->包装对象

    Integer i = new Integer(4);//使用构造函数函数
    Integer ii = new Integer(“4”);//构造函数中可以传递一个数字字符串

  • 包装对象—->基本数值

    int num = i.intValue();

JDK5特性:自动装箱拆箱

在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型
时,可以传入基本数据类型。
比如:
基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为
引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的
转换。
相对应的,引用数据类型变量的值必须是 new 出来的内存空间地址值,而我们可以将
一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于 Java 又”偷偷地”自动地
进行了基本数据类型向对象的转换。

  • 自动拆箱:对象转成基本数值
  • 自动装箱:基本数值转成对象

    Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
    i = i + 5;//等号右边:将 i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完
    成后,再次装箱,把基本数值转成对象。

  • 自动装箱(byte 常量池)细节的演示 当数值在 byte 范围之内时,进行自动装箱,不会新创建对象空间而是使用医来已有的空间。

示例代码
Integer a = new Integer(3); 
Integer b = new Integer(3); 
System.out.println(a==b);//false 

System.out.println(a.equals(b));//true 

System.out.println("---------------------"); 
Integer x = 127; 
Integer y = 127; 
//在jdk1.5自动装箱时,如果数值在byte范围之内,不会新创建对象空间而是使用原来已有的空
间。 
System.out.println(x==y); //true 
System.out.println(x.equals(y)); //true  

常用类

Date类概述

类 Date 表示特定的瞬间,精确到毫秒。

Date类使用
  • 构造函数
    Date()分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)
    Date()分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数

    //创建日期对象,把当前的毫秒值转成日期对象
    Date date = new Date(System.currentTimeMillis());
    System.out.println(date);
    //打印结果:Fri Dec 08 16:28:26 CST 2017

  • 将时间打印成本地格式
    String toString()把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

  • 获取时间戳
    getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
    把日期对象转换成对应的时间毫秒值
    DateFormat
时间戳
时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面。

DateFormat 类概述

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
日期格式
要格式化一个当前语言环境下的日期,需要通过下面的方法来完成。DateFormat 是抽象类,我们需要使用其子类 SimpleDateFormat 来创建对象。 SimpleDateFormat 可以将一个 Date 对象转换为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转为一个 Date 对象。 构造方法 SimpleDateFormatter() 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat DateFormat类方法 String format(Date date) 将一个Date格式化为日期/时间字符串
代码示例
//创建日期格式化对象,在获取格式化对象时可以指定风格 
DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//对日期进行格式化 
Date date = new 
Date(System.currentTimeMillis());//System.currentTimeMillis():获取时
间戳 
String str_time = df.format(date); 
System.out.println(str_time);//2017-12-08 
上边的yyyy-MM-dd为指定格式,指定格式的具体规则我们可参照 SimpleDateFormat类的说明,该规则是在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样 输出:
  • 当出现 y时,会将 y替换成年
  • 当出现 M时,会将 M替换成月
  • 当出现d时,会将 d替换成日
  • 当出现 H时,会将 H替换成时
  • 当出现 m时,会将 m替换成分
  • 当出现 s时,会将 s替换成秒

DateFormat类常用方法

format 方法,用来将Date 对象转换成 String
parse 方法,用来将 String转换成 Date(转换时,该String 要符合指定格式,否则不能转换)。

示例代码
 //一:把 Date 对象转换成 String 
Date date = new Date(System.currentTimeMillis());//Fri Dec 11 
00:00:00 CST 2020 
DateFormat df = new SimpleDateFormat("yyyy 年MM 月 dd 日"); 
String str = df.format(date); 
System.out.println(str);//内容为 2020 年 12 月11 日 

//二:把 String 转换成 Date 对象 
String str = "2018 年12 月08 日"; 
DateFormat df = new SimpleDateFormat("yyyy 年MM 月 dd 日"); 
Date date = df.parse( str ); 
System.out.println(date);//Sat Dec 08 00:00:00 CST 2018Calendar 

Calendar 类概述

Calendar是日历类,该类将所有可能用到的时间信息封装为静态成员变量,方便获取。 Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下:

  • Calendar 类静态方法

    static Calendar
    getInstance()
    使用默认时区和语言环境获得一个日历


Calendar c = Calendar.getInstance(); //返回当前时间
Calendar类常用方法
  • public static Calendar getInstance() //获取日期对象
    public int get(int field) //获取时间字段值,字段参见帮助文档

  • YEAR 年

  • MONTH 月,从 0开始算起,最大 11;0代表1 月,11代表 12月。
  • DATE 天
  • HOUR 时
  • MINUTE分
  • SECOND秒
代码示例
Calendar c = Calendar.getInstance(); 
int year = c.get(Calendar.YEAR);//获取年份 
System.out.println(year); 

public void add(int field,int amount) //指定字段增加某值

代码示例
Calendar c = Calendar.getInstance(); 
//修改当前时间为 3 天后 
c.add(Calendar.DATE, 3); 
//修改当前时间为 5 小时后 
c.add(Calendar.HOUR, 5); 
//格式化输出 
Date date = new Date(c.getTime().getTime()); 
DateFormat df = new SimpleDateFormat("yyyy 年MM 月dd 日 hh:ss:mm"); 
String str = df.format(date); 
System.out.println(str); 
  • public final void set(int field,int value)//设置指定字段的值
代码示例
Calendar c = Calendar.getInstance(); 
//设置时间为 2019 年4月1 日 
c.set(Calendar.YEAR, 2019); 
c.set(Calendar.MONTH, 3); 
c.set(Calendar.DATE, 1); 
//格式化输出 
Date date = new Date(c.getTime().getTime()); 
DateFormat df = new SimpleDateFormat("yyyy 年MM 月dd 日 hh:ss:mm"); 
String str = df.format(date); 
System.out.println(str); 
  • public final Date getTime() //获取该日历对象转成的日期对象
代码示例
Calendar c = Calendar.getInstance(); 
Date d = c.getTime(); 
注意事项

西方星期的开始为周日,中国为周一。
在 Calendar类中,月份的表示是以 0-11代表 1-12月。

BigInteger

BigInteger 可以用来解决数据的溢出问题,可以让超过 Integer范围内的数据进行运算

  • 构造方法
    public BigInteger(String val)

  • 成员方法
    public BigInteger add(BigInteger val) 加
    public BigInteger subtract(BigInteger val) 减
    public BigInteger multiply(BigInteger val) 乘
    public BigInteger divide(BigInteger val) 除
    public BigInteger[] divideAndRemainder(BigInteger val)先除后取余,结果分别存在数组中

示例代码
public static void main(String[] args) { 
  //System.out.println(Integer.MAX_VALUE); 
  //可以接收最大值 
  Integer i = new Integer(2147483647); 
  Integer i2 = new Integer(2147483640); 
  Integer i3 = i + i2; 
  System.out.println(i3);//超出范围了 


  BigInteger bi1 = new BigInteger("110"); 
  BigInteger bi2 = new BigInteger("50"); 

  System.out.println(bi1.add(bi2));//加法 
  System.out.println(bi1.subtract(bi2));// 
  System.out.println(bi1.multiply(bi2)); 
  System.out.println(bi1.divide(bi2));//除法,得到的结果是商 
  BigInteger[] b = bi1.divideAndRemainder(bi2); 
  //做除法,用数组存放商和余数,第一个存商,第二个存余数 
  System.out.println(b[0]); 
  System.out.println(b[1]);  
} 

BigDecimal

如下代码,运算是否有问题

System.out.println(0.09 + 0.01);
System.out.println(1.0 - 0.32);
System.out.println(1.015 * 100);
System.out.println(1.301 / 100);

由于在运算的时候, float 类型和 double 很容易丢失精度 所以,为了能精确的表示、计算浮点数,Java提供了 BigDecimal

  • 构造方法

public BigDecimal(String val)


  • 成员方法

public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor)
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
示例代码
public static void main(String[] args) { 
  // System.out.println(0.09 + 0.01);//0.10 0.1 
  // System.out.println(1.0 - 0.32); //0.68 
  // System.out.println(1.015 * 100);//101.5 
  // System.out.println(1.301 / 100);//0.01301 

  BigDecimal bd1 = new BigDecimal("0.09"); 
  BigDecimal bd2 = new BigDecimal("0.01"); 
  System.out.println(bd1.add(bd2)); 
  BigDecimal bd3 = new BigDecimal("1.0"); 
  BigDecimal bd4 = new BigDecimal("0.32"); 
  System.out.println(bd3.subtract(bd4)); 

  BigDecimal bd5 = new BigDecimal("1.015"); 
  BigDecimal bd6 = new BigDecimal("100"); 
  System.out.println(bd5.multiply(bd6)); 

  BigDecimal bd7 = new BigDecimal("1.991"); 
  BigDecimal bd8 = new BigDecimal("100"); 
  System.out.println(bd7.divide(bd8)); 

  // 1.301 100 2 
  System.out.println(bd7.divide(bd8, 2,   BigDecimal.ROUND_HALF_UP)); 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值