包装类的分类
针对八种基本定义相应的引用类型—包装类
有了类的特点,就可以调用类中的方法
基本数据类型 | 包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
包装类的继承关系
Boolean
和Character
继承Object
、实现Serializable
和Comparable
。Byte
、Short
、Integer
、Long
、Float
、Double
继承Number
,实现Comparable
;Number
继承Object
,实现Serializable
包装类和基本数据类型的转换
jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,拆箱反之
//基本类型->包装类型【手动装箱】
int i= 10;
Integer i1 = new Integer();
Integer i2 =Integer.valueOf(i);
//包装类型->基本类型【手动拆箱】
Integer j = new Integer(99);
int j1 = j.intValueO;
jdk5之后的自动装箱和拆箱方式
int m = 10;
Integer m2 = m;
Integer n = new Integer(99);
int n2 = n;
System.out.printIn(n + 100);
System.out.printIn(n * 2);
if (n > 10) {}
自动装箱底层调用的是valueOf
方法,比如Integer.valueOf();
八大包装类常用方法
Integer
(对应int
)parseInt(String s)
:将字符串转为int
(抛NumberFormatException
异常)。
int num = Integer.parseInt("123"); // 结果:123
valueOf(String s)
:返回Integer
对象(使用缓存,范围:-128~127)。
Integer obj = Integer.valueOf("456"); // 结果:Integer对象456
toString()
:返回对象的字符串表示。
String str = obj.toString(); // 结果:"456"
Long
(对应long
)parseLong(String s)
:将字符串转为long
long l = Long.parseLong("123456"); // 结果:123456L
valueOf(String s)
:返回Long对象。
Long lObj = Long.valueOf("7890"); // 结果:Long对象7890
Float
(对应float
)parseFloat(String s)
:将字符串转为float
(需以f/F结尾)。
float f = Float.parseFloat("3.14f"); // 结果:3.14f
isNaN()
:判断是否为非数字(NaN)。
boolean isNaN = Float.isNaN(Float.NaN); // 结果:true
Double
(对应double
)parseDouble(String s)
:将字符串转为double
。
double d = Double.parseDouble("3.14"); // 结果:3.14
isInfinite()
:判断是否为无穷大(Infinity)。
boolean isInfinite = Double.isInfinite(Double.POSITIVE_INFINITY); // 结果:true
Character
(对应char
)isUpperCase(char ch)
:判断是否为大写字母。
boolean isUpper = Character.isUpperCase('A'); // 结果:true
toUpperCase(char ch)
:转为大写字母(小写转大写,其他不变)。
char upper = Character.toUpperCase('b'); // 结果:'B'
isDigit(char ch)
:判断是否为数字字符(0-9)。
boolean isDigit = Character.isDigit('5'); // 结果:true
Boolean
(对应boolean
)valueOf(String s)
:将字符串转为Boolean
(“true” 忽略大小写为true,否则false)。
Boolean bool = Boolean.valueOf("TrUe"); // 结果:true
booleanValue()
:返回对应的基本类型boolean
。
boolean primitive = bool.booleanValue(); // 结果:true
Short
(对应short
)parseShort(String s)
:将字符串转为short
(范围:-32768~32767)。
short num = Short.parseShort("100"); // 结果:100
valueOf(String s)
:返回Short
对象。
Short sObj = Short.valueOf("200"); // 结果:Short对象200
Byte
(对应byte
)parseByte(String s)
:将字符串转为byte
(范围:-128~127)。
byte b = Byte.parseByte("127"); // 结果:127
valueOf(String s)
:返回Byte对象(使用缓存,范围:-128~127)。
Byte bObj = Byte.valueOf("100"); // 结果:Byte对象100
String对象用于保存字符串,也就是一组字符序列
字符串常量对象是用双引号括起的字符序列。例如:“你好”、“12.97”、“b0y”等
字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。
String类较常用构造方法(其它看手册):
Strings1 = new String():
String s2 = new String(String original);
String s3 = new String(char[] a);
String s4 = new String(char[] a,int startlndex,int count)
String类实现了接口Serializable【String可以串行化:可以在网络传输】接口Comparable[String对象可以比较大小]
String是final类,不能被其他的类继承
String有属性private final char value[];用于存放字符串内容
一定要注意:value是一个final类型,不可以修改(需要功力):即value不能指向新的地址,但是单个字符内容可以变化
创建String对象的两种方式
方式一:直接赋值String s=“abc”;
方式二:调用构造器String s=new String(“abc”);
方式一:先从常量池查看是否有“hsp”数据空间,如果有,直接指向;如果
没有则重新创建,然后指向。s最终指向的是常量池的空间地址
方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。
如果常量池没有“hsp”,重新创建,如果有,直接通过value指向。最终指向
的是堆中的空间地址。
String字符串的特性
StringBuilder sb=new StringBuilderO;sb.append(a);sb.append(b);
sb是在堆中,并且append是在原来字符串的基础上追加的。重要规则,String c=“ab”+“cd”;常量相加,看的是池。String c=a基本介绍
String VS StringBuffer
StringBuffer的构造器
String和StringBuffer的转换
// String——>StringBuffer
String s = "hello";
∥方式1:
StringBuffer b1 = new StringBuffer(s);
/方式2:
StringBuffer b2 = new StringBuffer();
b2.append(s):
// StringBuffer——>String
∥方式1:
String s2 = b1.toString(); //b1 [StringBuffer]
∥方式2:
String s3 = new String(b1);
StringBuffer类常用方法
基本介绍
StringBuilder常用方法
StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样
String、StringBuffer 和StringBuilder的比较
String、StringBuffer 和StringBuilder的选择
使用的原则,结论:
Math类常见方法
abs 绝对值
pow 求幂
ceil向上取整
floor向下取整
round 四舍五入
sqrt 求开方
random求随机数//思考:
请写出获取a-b之间的一个随机整数,a,b均为整数?2-7
int num = (int)(a +Math.random()*(b-a+1)
max求两个数的最大值
min求两个数的最小值
Arrays类常见方法
Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)。
System类常用方法
exit退出当前程序
arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组.
int[] src={1,2,3);
int[] dest = new int[3];
System.arraycopy(src, 0, dest, 0, 3):
currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
gc:运行垃圾回收机制 System.gcO;
BigInteger和BigDecimal介绍
应用场景:
BigInteger和BigDecimal常见方法
注意
BigDecimal类进行除法操作时容易出现无限循环小数异常,可通过限制小数位数来解决
第一代日期类
Date:精确到毫秒,代表特定的瞬间
SimpleDateFormat:格式和解析日期的类。SimpleDateFormat格式化和解析日期的具体类。它允许进行格式化(日期->文本)、解析(文本->日期)和规范化。
应用实例
Date d1 =new Date();//获取当前系统时间
Date d2=new Date(9234567);//通过指定毫秒数得到时间
System.out.printin(d1.getTimeO);//获取某个时间对应的毫秒数
SimpleDateFormat sdf =newSimpleDateFormat("yyyy年MM月dd日hh:mm:ssE");
String format =sdf.format(d1);//format:将日期转换成指定格式的字符串
Strings="1996年01月01日10:20:30星期一”;
Date parse = sdf.parse(s);
第二代日期类
第二代日期类,主要就是Calendar类(日历)。
public abstract class Calendar extends Object implementsSerializable,Cloneable,Comparable
Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAYOFMONTH、HOUR等日历字段之间的转换提供了些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
应用实例
Calendar c=Calendar.getlnstance();//创建日历类对象//比较简单,自由
System.out.println(c);
112.获取日历对象的某个日历字段
System.out.printIn("年:"+c.get(Calendar.YEAR));
System.out.printIn("月:"+(c.get(Calendar.MONTH)+1);
System.out.printIn("日:"+c.get(Calendar.DAY_OF_MONTH);
System.out.printIn("小时:"+c.get(Calendar.HOUR);
System.out.printIn("分钟:"+c.get(Calendar.MINUTE);
System.out.printIn("秒:"+c.get(Calendar.SECOND);
//Calender没有专门的格式化方法,所以需要程序员自己来组合显示
System.out.printIn(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月
"+c.get(Calendar.DAY_OF_MONTH)+"日");
第三代日期类
前面两代日期类的不足分析
JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar也存在问题是:
1. 可变性:像日期和时间这样的类应该是不可变的。
2. 偏移性:Date中的年份是从1900开始的,而月份都从0开始。
3. 格式化:格式化只对Date有用,Calendar则不行。
4. 此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。
第三代日期类常用方法
LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)JDK8加入
LocalDate只包含日期,可以获取日期字段
LocalTime只包含时间,可以获取时间字段
LocalDateTime包含日期+时间,可以获取日期和时间字段
案例演示
LocalDateTime ldt = LocalDateTime.nowO://LocalDate.now();//LocalTime.now();
System.out.println(Idt);
ldt.getYear();
ldt.getMonthValue();
ldt.getMonth();
ldt.getDayOfMonth();
ldt.getHour();
ldt.getMinute();
ldt.getSecond();
DateTimeFormatter格式日期类
类似于SimpleDateFormat
DateTimeFormat dtf = DateTimeFormatter.ofPattern(格式);
String str = dtf.format(日期对象);
instant时间戳
类似于Date
提供了一系列和Date类转换的方式
//Instant—>Date:
Date date = Date.from(instant);
//Date一>Instant:
Instant instant =date.toInstant();
案例演示:
Instant now = Instant.now();
System.out.println(now);
Date date =Date.from(now);
Instant instant = date.tolnstant();
更多方法