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); } }