-
基本数据类型的包装类
包装类是将基本类型封装到一个类中
包含属性和方法,方便对象操作
包装类位于java.lang包中
- 包装类和基本类型
- 自动装箱和自动拆箱 (auto-boxing & unboxing)
自动装箱
– 基本类型就自动地封装到与它相同类型的包装中
如:Integer i = 100。本质上是编译器编译时为我们添加了: Integer i = Integer.valueOf(100)。
自动拆箱
– 包装类对象自动转换成基本类型数据
如: – int a = new Integer(100)。本质上,编译器编译时为我们添加了:int a = new Integer(100).intValue()。
- 包装类和基本类型
-
字符串相关类
String:不可变字符序列
StringBuilder:可变字符序列、效率高、线程不安全
StringBuffer:可变字符序列、效率低、线程安全-
不可变字符序列:String
String类的常用方法
字符串常用提取方法
-
可变字符序列:StringBuffer、StringBuilder
StringBuffer:String增强版、 字符串缓冲区,是一个容器
-
-
时间处理相关类
Date
DateFormat、SimpleDateFormat
Calender -
Math类
-
File类
-
枚举类:Jdk1.5
枚举指由一组固定的常量组成的类型
包装类与基本数据类型
package com.petrel;
/**
* @author Petrel
* @data 2020/6/22 10:46
*/
/**
* 包装类与基本数据类型
* 包装类是将基本数据类型封装成一个类,包含属性和方法
* 使用:
* 在使用过程中,会涉及到自动装箱和自动拆箱
* 装箱:将基本数据类型转换成包装类
* 拆箱:将包装类转换成基本数据类型
*
* int a = 10;
* Integer i = new Integer(10);
* System.out.println(a == i);
* 运行结果:true
*
* Integer i1 = 100;
* Integer i2 = 100;
* Integer i3 = 200;
* Integer i4 = 200;
* System.out.println(i1==i2);
* System.out.println(i3==i4);
* 运行结果:
* true
* false
* 原因:
* public static Integer valueOf(int i) {
* if (i >= IntegerCache.low && i <= IntegerCache.high)
* return IntegerCache.cache[i + (-IntegerCache.low)];
* return new Integer(i);
* }中static final int low = -128; 这样做的目的是减少内存的使用 优化
*
* Double d1 = 1.0;
* Double d2 = 1.0;
* Double d3 = 2.0;
* Double d4 = 2.0;
* System.out.println(d1==d2);
* System.out.println(d3==d4);
* 运行结果:
* false
* false
* 原因:
* 看Double中的valueOf
*
*
* Integer i = 10;
* int a = i;
* System.out.println(a==i);
* 运行结果:
* true
* 原因:
* 每次运行的时候会把Integer类型进行自动拆箱,把包装类变成基本类型
*
*
*
*/
public class IntegerDemo {
public static void main(String[] args) {
int a = 10;
Integer i = new Integer(10);
// //通过方法进行类型的转换
// Integer i2 = Integer.valueOf(a);
// int i3 = i.intValue();
System.out.println(a == i);
// Float f1 = new Float(3.14);
// Double d1 = new Double(3.14);
// int i =100;
// Integer i1 = 100;
// Integer i2 = 100;
// Integer i3 = 200;
// Integer i4 = 200;
// System.out.println(i1==i2);
// System.out.println(i3==i4);
// Double d1 = 1.0;
// Double d2 = 1.0;
// Double d3 = 2.0;
// Double d4 = 2.0;
// System.out.println(d1==d2);
// System.out.println(d3==d4);
/* Integer i = 10;
int a = i;
System.out.println(a==i);*/
}
}
字符串String
package com.petrel;
/**
* @author Petrel
* @data 2020/6/22 11:25
*/
/**
* 注意:常量池在1.7之后放置在了堆空间之中
* 字符串的使用:
* 1、创建
* String str = "abc";
* String str2 = new String("abc");
* 两种方式都可以用,只不过第一种使用比较多
* 2、字符串的本质
* 字符串的本质是字符数组或者叫做字符序列
* String类使用final修饰,不可以被继承
* 使用equals方法比较的是字符数组的每一个位置的值
* String是一个不可变对象
*
*
* String str = "abc";
* String str2 = new String("abc");
* System.out.println(str==str2);
* System.out.println(str.equals(str2));
* 运行结果:
* false
* true
* 原因:两个地址的空间不一样
*
* String str = "abc";
* String str2 = new String("abc");
* str2 = str2.intern();
* System.out.println(str==str2);
* System.out.println(str.equals(str2));
* 运行结果:
* true
* true
* 原因:加了str2 = str2.intern();
*
* System.out.println(str.charAt(0));
* 运行结果:a
*
* //数组的复制过程
* System.out.println(str.concat("cde"));
* 运行结果:abccde
*
* //返回指定下标的元素
* System.out.println(str.indexOf("a"));
* 运行结果:0
*
* String s = "abcdefghijklmn";
* System.out.println(s.substring(3));
* //在截取字符串的时候,需要注意是左闭右开区间,不包含最右边的值
* System.out.println(s.substring(3,5));
* 运行结果:
* efghijklmn
* de
*
* String a = "abc";
* String b = "def";
* String c = "abcdef";
* String c = a+b;
* String e = "abc"+"def";
* System.out.println(c==d);
* System.out.println(c==e);
* 运行结果:
* false
* true
*
*
*/
public class StringDemo {
public static void main(String[] args) {
String str = "abc";
String str2 = new String("abc");
// str2 = str2.intern();
System.out.println(str==str2);
System.out.println(str.equals(str2));
System.out.println(str.charAt(0));
//数组的复制过程
System.out.println(str.concat("cde"));
//返回指定下标的元素
System.out.println(str.indexOf("a"));
String s = "abcdefghijklmn";
System.out.println(s.substring(3));
//在截取字符串的时候,需要注意是左闭右开区间
System.out.println(s.substring(3,5));
System.out.println(s.length());
System.out.println("-----------------");
// String a = "abc";
// String b = new String("abc");
// b = b.intern();
// System.out.println(a==b);
String a = "abc";
String b = "def";
String c = "abcdef";
String d = (a+b).intern();
String e = "abc"+"def";
System.out.println(c==d);
System.out.println(c==e);
String f = "a" + "b" +"c";
String a1 = "a";
String a2 = "b";
String a3 = "c";
String f1 = a1+a2+a3;
}
}
运行结果:
StringBuffer
package com.petrel;
/**
* @author Petrel
* @data 2020/6/22 14:30
*/
/**
*
*
* 字符串需要拼接的时候一般使用StringBuffer
*
* StringBuffer有synchronized关键字修饰,所以StringBuffer是线程安全的,但是stringBuilder没有
* * 可变字符串
* * StringBuffer:线程安全,效率低
* * StringBuilder:线程不安全,效率高
*
* StringBuffer stringBuffer = new StringBuffer();
* stringBuffer.append(1).append(1.234).append("abc").append(true);
* System.out.println(stringBuffer);
* System.out.println(stringBuffer.length());
* System.out.println(stringBuffer.capacity());
* 运行结果:
* 11.234abctrue
* 13 (当前放置在数组里面整体占用的大小)
* 16 (初始化的时候创建了16个长度)
*
* StringBuilder stringBuilder = new StringBuilder();
* stringBuilder.append("123").append(1).append(false);
* System.out.println(stringBuilder);
* 运行结果:1231false (为什么要有stringBuffer和stringBuilder,因为线程安全)
*
*
*/
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(1).append(1.234).append("abc").append(true);
System.out.println(stringBuffer);
System.out.println(stringBuffer.length());
System.out.println(stringBuffer.capacity());
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("123").append(1).append(false);
System.out.println(stringBuilder);
}
}
运行结果:
Date、Calendar
package com.petrel;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author Petrel
* @data 2020/6/22 14:47
*/
/**
*
* Date date = new Date();
* System.out.println(date);
* System.out.println(date.getTime());
* 运行结果:
* Mon Jun 22 14:48:55 CST 2020
* 1592808535375 (当前data的毫秒值)
*
* DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
* //将Date类按照规范转换为字符串格式
* String str = dateFormat.format(date);
* System.out.println(str);
* //将字符串转换成对应的日期类
* Date d1 = dateFormat.parse("2019-10-10 20:20:20");
* System.out.println(d1);
* 运行结果:
* 2020-06-22 15:05:35 (format 日期类->字符串)
* Thu Oct 10 20:20:20 CST 2019 (parse 字符串->日期类)
*
*
*
*/
public class DateDemo {
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println(date);
System.out.println(date.getTime());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将Date类按照规范转换为字符串格式
String str = dateFormat.format(date);
System.out.println(str);
//将字符串转换成对应的日期类
Date d1 = dateFormat.parse("2019-10-10 20:20:20");
System.out.println(d1);
//获取的是当前系统的时间
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
//设置指定时间的日历类
calendar.setTime(d1); //设置成2019-10-10 20:20:20
System.out.println(calendar);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
}
}
运行结果:
Math类
package com.petrel;
/**
* @author Petrel
* @data 2020/6/22 15:21
*/
public class MathDemo {
public static void main(String[] args) {
System.out.println(Math.abs(-1)); //1 取绝对值
System.out.println(Math.sqrt(2)); //1.4142135623730951 开方
System.out.println(Math.ceil(3.14)); //4.0 向上取整
System.out.println(Math.ceil(-3.14)); //-3.0 向上取整
System.out.println(Math.floor(3.14)); //3.0 向下取整
System.out.println(Math.floor(-3.14)); //-4.0 向下取整
System.out.println(Math.pow(2,3)); //8.0 2的3次方
}
}
运行结果:
枚举类
package com.petrel.enumpack;
/**
* @author Petrel
* @data 2020/6/22 15:28
*/
public enum Gender {
男,女
//不可以写主函数
}
------------
package com.petrel.enumpack;
/**
* @author Petrel
* @data 2020/6/22 15:32
*/
/**
* 强烈建议定义一组常量时,使用枚举类型
* 比如男和女 使用的时候都是同一空间
*/
public enum EventEnum {
LAUNCH("launch"),PAGEVIEW("pageview"),EVENT("event");
//如果不写下面的 上面的这行代码会报错,必须要有一个对应的构造方法参数与上面的有匹配功能
EventEnum(String name){
this.name = name;
}
private String name;
public void show(){
System.out.println(this.name);
EventEnum[] ee = values();
for(int i = 0;i<ee.length;i++){
System.out.println(ee[i]);
}
}
}
------------
package com.petrel.enumpack;
/**
* @author Petrel
* @data 2020/6/22 15:29
*/
public class Test {
Gender gender = Gender.女;
Gender gender2 = Gender.男;
public static void main(String[] args) {
EventEnum ee = EventEnum.LAUNCH;
ee.show();
String name = EventEnum.PAGEVIEW.name();
System.out.println(name); //运行结果:PAGEVIEW
}
}
运行结果: