Day_16_常用API

1. 包装类

1.1  包装类为什么存在、什么是包装类

        Java是面向对象的语言,但是java中的基本数据类型不是对象,而我们在实际应用中经常需要将基本数据类型转化为对象,所以就有了包装类,包装类的产生就是为了解决基本数据类型存在的这样一些问题,通过包装类可以让基本数据类型获取对象一样的特征,以便于我们操作。

1.2 基本使用

public class Integer_01 {

	public static void main(String[] args) {
		//基本类型
		byte b= 10;
		//转为了引用类型
		byte b1 = new Byte(b);
		Integer i1 = new Integer(11);
		Boolean b2 = new Boolean(false);
		//方法调用传递
		m1(b1);
	}
	//需求:声明一个方法,该方法可以接受所有类型的值
	//多态
public static void m1(Object obj) {
	//包装类都覆写了equals和toString
	System.out.println(obj);
}
}

1.3 Integer

1.3.1 基本使用

public static void main(String[] args) {
		//获得最大值和最小值
		System.out.println("int最大值为:"+Integer.MAX_VALUE);
		System.out.println("int最小值为:"+Integer.MIN_VALUE);
		System.out.println(Byte.MAX_VALUE);
		System.out.println(Long.MAX_VALUE);
		
		//创建Integer对象
		//int类型转换为Integer类型
		Integer i1 = new Integer(10);
		//可以直接把纯数字的字符串转为Integer类型
		Integer i2 = new Integer("10");
		System.out.println(i1);
		System.out.println(i2);
		System.out.println(i1 == i2);
		//true     覆写了equals
 		System.out.println(i1.equals(i2));
	}

1.3.2 常用方法

public static void main(String[] args) {
		//1.对象int ----> Integer
		Integer i1 = new Integer(10);
		//2.Integer ----> int
		int i2 = i1.intValue();
		System.out.println(i2);
		//3.static int parselnt(String s);  把纯数字字符串转换为int类
		//String ---->int 必须是纯数字字符串,小数也不行
		int i3 = Integer.parseInt("123");
		System.out.println(i3);
		//小数允许有一个小数点
		double d = Double.parseDouble("3.14");
		System.out.println(d);
		
		//将int类型的值,转换为二进制的字符串表示
		//static String toBinaryString(int value);
		String s1 = Integer.toBinaryString(11);
		System.out.println(s1);
		//转为16进制
		System.out.println(Integer.toHexString(11));
		//转为8进制
		System.out.println(Integer.toOctalString(11));
		//int ----> Integer
		Integer i4 = Integer.valueOf(11);
		//String ----> Integer
		Integer i5 = Integer.valueOf("11");
		System.out.println( i4 == i5 );
		
	    }

1.3.3 类型转换

public static void main(String[] args) {
		//1. int ---->Integer
		Integer i1 = Integer.valueOf(11);
		//2. Integer ---->int
		int i2 = i1.intValue();
		//3. String ---->Integer
		Integer i3 = Integer.valueOf("22");
		//4. Integer ---->String
		String s1 = i3.toString();
		//5. String ---->int
		int i4 = Integer.parseInt("1234");
		//6. int ---->String
		String s2 = 2 + "";
	}

1.3.4 自动装箱和自动拆箱

JDK1.5开始新特性:

        自动装箱:把基本类型自动转换为对应的包装类类型

        自动拆箱:把对应的包装类类型自动转换为基本类型

        自动装箱和自动拆箱是在编译阶段完成的

public static void main(String[] args) {
		//装箱和拆箱
		Integer i1 = Integer.valueOf(11);
		int i2 = i1.intValue();
		
		//自动装箱和拆箱
		Integer i3 = 2;
		int i4 = i3;
		//此时10是int类型,int类型是没办法转换为Object类型的
		//所以需要把int自动装箱为Integer类型,然后发生多态转换为Object类型
		m1(10);
	}
	public static void m1(Object obj){
		System.out.println(obj);
	}

1.3.5 整型常量池

  深入理解自动装箱自动拆箱
        1.都是编译时进行的操作
        2.自动装箱的时候会把赋值的操作改编为Integer.valueOf(值)
  
  Integer.valueOf()   底层实现:
  
        public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
        }
 IntegerCache是Integer中的静态内部类,也就是我们说的整型常量池
        static final int low = -128;
        static final int high = 127;
        static final Integer cache[];
        在static语句块中,对cache数组进行初始化操作
                 cache = new Integer[(high)-(low)+1];        长度为256
                 初始化数组中的数据
                 cache[k] = new Integer(j++);
                 数组中数据为-128,-127,-126......127  共256个数字,下标为0~255
                 此时整型常量池初始化完成,在堆内存中创建了256个对象
         
         valueOf方法中这么写的
                       // 判断 要赋值的数据值 是否在-128到127之间
                       if (i >= IntegerCache.low && i <= IntegerCache.high)
                       // 如果在这个范围内的话,之间在case数组中把对应的对象的地址拿出来,返回回去
                       return IntegerCache.cache[i + (-IntegerCache.low)];
                       // 如果不再这个范围内的话,就new一个新的对象,保存这个数据
                       return new Integer(i);
         所以我们写Integer i1 = 123;     Integer i2 = 123;   使用==判断时他们两个是相等的,因为他们指向堆内存吗,反之,我们写Integer i3 = 128; 就等于 Integer i3 = new Integer(128),如果使用==判断,那么显然是不相等的,使用equals判断才可以

2. System

2.1 是什么

          System代表系统,系统中很多的控制方法和属性都在这个类中,位于java.lang包下
  longcurrentTime Millis(): 获取当前系统时间的毫秒数,从1970-1-1  0:0:0  000 开始,我们这个地区时间初始值为 1970.1.1  8:00:00 000

        void exit(int status): 退出虚拟机,参数为0代表正常退出,非0代表异常退出,常用于图形界面,实现退出功能

2.2 怎么用

public static void main(String[] args) {
		//计算时间差
		long startTime = System.currentTimeMillis();
		String[] strs = { "a", "b", "c", "d", "e", "f", "a", "b", "c", "d" };
		String temp = "";
		// for (int i = 0; i < strs.length; i++) {
		// temp += strs[i] + ",";
		// }
		//数据量小的时候观察不出来二者的时间差
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < strs.length; i++) {
			sb.append(strs[i] + ",");
		}
		temp = sb.toString();
		System.out.println(temp);
		long endTime = System.currentTimeMillis();
		// 关闭JVM , 0 正常退出, 非0 异常退出, 一般用于关闭图形界面
		System.exit(0);
		System.out.println("耗时 : " + (endTime - startTime) + "毫秒");
	}

3. Date

3.1 是什么

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

3.2 构造方法

//获取当前系统时间
		Date d1 = new Date();
		//获取时间原点到指定毫秒数的时间
		d1 = new Date(1000000000);
		System.out.println(d1);

3.3 时间格式化

Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat

类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

//年 y , 月 M , 日 d , 小时 H , 分 m , 秒 s , 毫秒 S
		//创建格式化对象,并指定格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");
		//对时间进行格式化,返回字符串类型
		String strDate = sdf.format(d1);
		// 1970年01月01日 08:00:01 000
		System.out.println(strDate);
		
		// 解析 , 字符串格式 必须和解析格式一致
		Date d2 = sdf.parse(strDate);
		System.out.println(d2);
public static void main(String[] args) {
		//获取当前时间的毫秒数
		long time = System.currentTimeMillis();
		//减去十分钟的毫秒数
		time -= 10*60*1000;
		Date d= new Date(time);
		
		//格式化
		SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 	SSS");
		System.out.println(sdf.format(d));
	
		}

4. Calendar

4.1 是什么

Calendar是一个抽象基类(日历类),主用用于完成日期字段之间相互操作的功能

4.2 方法

获取Calendar实例的方法

使用Calendar.getInstance()方法

调用它的子类GregorianCalendar的构造器。

3、一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想 要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、 MINUTE、SECOND

public void set(int field,int value)

public void add(int field,int amount)

public final Date getTime()

public final void setTime(Date date)

4、注意:

获取月份时:一月是0,二月是1,以此类推,12月是11

获取星期时:周日是1,周一是2.........周六是7

public class Calendar_01 {

	public static void main(String[] args) {
		//获取日历对象
		Calendar c = Calendar.getInstance();
		//获取当前是本周的第几天,第一天为周日,最后一天为周六
		int i = c.get(Calendar.DAY_OF_WEEK);
		System.out.println(i);
		//获取年
		int year = c.get(Calendar.YEAR);
		//获取月,从0开始,所以要加一
		int month = c.get(Calendar.MONTH)+1;
		//获取日
		int day = c.get(Calendar.DAY_OF_MONTH);
		//时
//		int hour = c.get(Calendar.HOUR);
		//24小时制
		int hour = c.get(Calendar.HOUR_OF_DAY);
		//分
		int minute = c.get(Calendar.MINUTE);
		//秒
		int second = c.get(Calendar.SECOND);
		//获取星期
		int weekday = c.get(Calendar.DAY_OF_WEEK);
		String weekdayStr = getWeekday(weekday);
		System.out.println(year + "年" + month + "月" + day + "日 " + hour + ":"
				+ minute + ":" + second + " " + weekdayStr);
			
	}
	public static String getWeekday(int weekday) {
		String weekdayStr ="";
		switch (weekday) {
		case 1:
			weekdayStr = "星期日";
			break;
		case 2:
			weekdayStr = "星期一";
			break;
		case 3:
			weekdayStr = "星期二";
			break;
		case 4:
			weekdayStr = "星期三";
			break;
		case 5:
			weekdayStr = "星期四";
			break;
		case 6:
			weekdayStr = "星期五";
			break;
		case 7:
			weekdayStr = "星期六";
			break;
		default:
			break;
		}
		return weekdayStr;
		}
}

5. Math

5.1 是什么

提供科学计算和基本的数字操作,常用方法都为静态,都可以直接调用

都在java.lang下,使用不需要导包

public class Math_01 {

	public static void main(String[] args) {
		// abs 绝对值
		System.out.println(Math.abs(-1.2));
		// ceil : 向上取整
		System.out.println(Math.ceil(1.0001));
		// floor : 向下取整
		System.out.println(Math.floor(2.999999));
		// max : 比较谁大
		System.out.println(Math.max(2.3, 2.2));
		// min : 比较谁小
		System.out.println(Math.min(2.3, 2.2));
		// 平方根  开平方
		System.out.println(Math.sqrt(16));
		// 立方根  开立方
		System.out.println(Math.cbrt(8));
		// 随机数 : 获取一个大于等于0 且 小于1 的数
		System.out.println(Math.random());
		// 向下取整( 随机数*(最大-最小 +1) + 最小)
		System.out.println(Math.random()*10 + 10);
		// 四舍五入 : 四舍六入五留双, 小数大于0.5 就进位,小于0.5就舍弃,如果是0.5整 , 取偶数
		// 2.50001 : 3  , 3.50000 : 4 , 2.50000 : 2
		System.out.println(Math.rint(2.5001));
		// 2的3次方
		System.out.println(Math.pow(2, 3));
			}
		}

6. BigInteger

6.1 是什么

1、Integer类作为int的包装类,能存储的最大整型值为231-1,Long类也是有限的,最大为263-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。

2、java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供

所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、 位操作以及一些其他操作。

6.2 常用方法

public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。

BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger

BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger

BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger

BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数 相除只保留整数部分。

BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。

BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。

BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。

6.3 使用

package BigInteger_01;

import java.math.BigDecimal;
import java.math.BigInteger;

public class BigInteger_01 {

	public static void main(String[] args) {
		//参数时字符串
		BigInteger v0 = new BigInteger("11");
		//参数是数值
		BigDecimal  v1 = new BigDecimal("20");
		BigDecimal  v2 = new BigDecimal("10");
		
		//+
		BigDecimal v3 = v1.add(v2);
		// -
		v3 = v1.subtract(v2);
		// *
		v3 = v1.multiply(v2);
		// /
		v3 = v1.divide(v2);
		// %	
		v3 = v1.remainder(v2);
		System.out.println(v3);
		System.out.println(Long.MAX_VALUE);
		BigDecimal sum = new BigDecimal(1);
		for (int i = 1; i <=100; i++) {
			sum = sum.multiply(new BigDecimal(i));
		}
		System.out.println(sum);
	}

}

7. Random

package Random_01;

import java.util.Random;

public class Random_01 {

	public static void main(String[] args) {
		//random随机数生成器    默认大于0小于1
		Random r = new Random();
		//大于等于=且小于10的整数
		int result = r.nextInt(10);
		System.out.println(result);
		
		//生成10~20
		//nextln(最大值-最小值+1)+最小值
		result = r.nextInt(11)+10;
		System.out.println(result);
		
		//生成a~z
		result  = r.nextInt(26);
		char c = (char) (result + 97);
		System.out.println(c);
		
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值