Java教程

java-day-16

本文主要是介绍java-day-16,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

2021.10.19 晴

包装类:

package study.wrapperClass;
/**
 * 包装类:java并不是纯面向对象的语言——java语言面向对象,但java的基本数据类型不是面向对象的,
 * 
 * 所以我们在实际中经常将基本数据类型转换成对象的形式,这就是包装类的出现
 * 
 * byte——>Byte
 * boolean——>Boolean
 * short——>Short
 * char——>Character
 * int——>Integer
 * long——>Long
 * float——>Float
 * double——>Double
 * 
 * Byte、Integer、Short、Float、Double、Long 继承Number
 * Character、Boolean、Number  继承Object
 * @author 落华见樱
 *
 */
public class Part01 {
	public static void main(String[] args) {
		//基本类型
		byte b1=12;
		//转换为引用类型
		Byte b2=new Byte(b1);
		Integer i1=new Integer(123);
		Boolean b3=new Boolean(false);
		//方法调用
		
		
		//包装类都覆写了equals和toString
	}
	//多态
	public static void m1(Object obj){
		System.out.println(obj);
	}
}
package study.wrapperClass;
/**
 * 以Integer为例讲解八种包装类
 * @author 落华见樱
 *
 */
public class Part02 {
	public static void main(String[] args) {
		//获取最大值和最小值
		System.out.println(Integer.MAX_VALUE);
		System.out.println(Integer.MIN_VALUE);
//		System.out.println(Byte.MAX_VALUE);
//		System.out.println(Long.MAX_VALUE);
		
		//创建Integer对象
		//int类型转换为Integer类型
		Integer i1=new Integer(123);
		//可以直接把纯数字的字符串转换为Integer类型
		Integer i2=new Integer("344");
		System.out.println(i1);
		System.out.println(i2);
		
		System.out.println(i1==i2);
		//false
		System.out.println(i1.equals(i2));
		//true
	}
}
package study.wrapperClass;
/**
 * int 、Integer、String 之间相互转换
 * @author 落华见樱
 *
 */
public class Part03 {
	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("123");
				// 6 int --> String
				String s2 = 2 + "";
	}
}
package study.wrapperClass;
/**
 * 常用方法
 * @author 落华见樱
 *
 */
public class Part04 {
	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 parseInt(String s); : 把纯数字字符串转换为int类型
				// String --> int   必须是纯数字字符串,小数点也不行
				int i3 = Integer.parseInt("123");
				System.out.println(i3);
				// 小数允许有一个小数点
				double d = Double.parseDouble("3.2");
				System.out.println(d);
				
				// 将int类型的值,转换为二进制的字符串表示形式
				// static String toBinaryString(int value);
				String s1 = Integer.toBinaryString(12);
				System.out.println(s1);
				// 转换为十六进制
				System.out.println(Integer.toHexString(10));
				// 转换为八进制
				System.out.println(Integer.toOctalString(10));
				// int --> Integer
				Integer i4 = Integer.valueOf(10);
				// String --> Integer
				Integer i5 = Integer.valueOf("10");
				System.out.println(i4 == i5);
			}
	}

自动装箱和自动拆箱: 

package study.wrapperClass;
/**
 * JDK1.5开始 新特性
 * 		自动装箱
 * 			把 基本类型 自动转换为 对应的包装类类型
 * 		自动拆箱
 * 			把 对应的包装类类型 自动转换为 基本类型
 * 
 * 并且 自动装箱和自动拆箱是在编译阶段完成的
 * @author 落华见樱
 *
 */
public class Part05 {
	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);
	}
}
package study.wrapperClass;
/**
 * 深入理解自动装箱和自动拆箱
 * 
 * 		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才可以
 * @author 落华见樱
 *
 */
public class Part06 {
	public static void main(String[] args) {
		// 自动装箱 = Integer.valueOf(123);
		// 整型常量池的范围 : -128~127之间
		Integer i1 = 123;
		Integer i2 = 123;
		// true
		System.out.println(i1 == i2);
		i1 = new Integer(123);
		i2 = new Integer(123);
		// false
		System.out.println(i1 == i2);

		// 这些写法 就等于 new Integer(128);
		i1 = 128;
		i2 = 128;
		// false
		System.out.println(i1 == i2);

		String s1 = "abc";
		String s2 = "abc";
		System.out.println(s1 == s2);
		s1 = new String("abc");
		s2 = new String("abc");
		System.out.println(s1 == s2);
	}
}

System类应用: 

package study.time;
/**
 * System代表系统,系统很多的属性和控制方法都在这个类中,位与java.lang包下
 * 
 * long currentTimeMillis() : 获取当前系统时间的毫秒数 , 从1970-1-1 0:0:0 000开始 到现在的时间毫秒数
 * 
 * 我们这个地区 时间为 1970.1.1 8:00:00 000
 * 
 * void exit(int status) : 退出虚拟机, 参数为0 表示正常退出 非0 表示异常退出,常用于图形界面,实现退出功能
 * 
 * @author 落华见樱
 *
 */
public class Part01 {
	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) + "毫秒");
	}
}

 Math类应用:

package study;
/**
 *  Math 提供科学计算和基本的数字操作,常用方法都是静态的,使用类名直接调用即可
 * 
 * 在java.lang下面,使用不需要导包
 * @author 落华见樱
 *
 */
public class Maths {
	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));
	}
}

Date类的应用:

package study.time;
/**
 * Date():使用无参构造器创建的对象可以获取本地当前时间。
 * Date(long date)
 * 
 * Date类的API不易于国际化,大部分被废弃了,
 * java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
 * 它允许进行格式化
 */
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Part02 {
	public static void main(String[] args) throws ParseException {
		// 获取当前系统时间
				Date d1 = new Date();
				// 获取时间原点到指定毫秒数的时间
				d1 = new Date(1000);
				System.out.println(d1);
				
				/**
				 * 年 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);
			}
	}

package study.time;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 获取当前时间十分钟之前的时间
 * @author 落华见樱
 *
 */
public class Part03 {
	public static void main(String[] args) {
		// 获取当前时间的毫秒数
		long time = System.currentTimeMillis();
		// 减去十分钟的毫秒数
		time -= 10*60*1000;
		// 转换为Date
		Date d = new Date(time);
		
		// 格式化
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
		System.out.println(sdf.format(d));
	}
}

日历类(Calendar)的应用:

package study.time;

import java.util.Calendar;

/**
 * 日历类
 * 
 * @author 落华见樱
 *
 */
public class Part04 {
	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开始,所以结果要加1
		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;
	}
}

Bighteger和BigDecimal:

package study;

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

/**
 * 极高精度的Bighteger和BigDecimal
 * 
 * 一个是整数,一个是小数
 * @author 落华见樱
 *
 */
public class Part02 {
	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);
	}
}

 Random类:

package study;

import java.util.Random;

/**
 * Random 随机类
 * @author 落华见樱
 *
 */
public class Part03 {
	public static void main(String[] args) {
		// 创建随机数生成器
		Random r = new Random();
		// 大于等于0 且小于10的整数
		int result = r.nextInt(10);
		System.out.println(result);

		// 生成 10~20
		// nextInt(最大值 - 最小值 +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);
	}
}

这篇关于java-day-16的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!