1 JavaSE API(应用程序编程接口)
JDK中提供的一系列的系统类和接口。
2 基本数据类型的包装类:1)JDK为每一种基本数据类型都提供了一个对应的包装类。
byte --> java.lang.Byte
short --> java.lang.Short
int --> java.lang.Integer ☆
long --> java.lang.Long
char --> java.lang.Character ☆
float --> java.lang.Float
double--> java.lang.Double
boolean-> java.lang.Boolean
2)掌握各种基本类型数据和包装类之间的相互转换,与字符串之间的相互转换。
3)JDK5.0中针对基本数据类型提供了一个新语法:自动装箱和自动拆箱。△
自动拆箱:把包装类对象直接当作对应的基本类型数据。
3 字符串相关类
所谓的字符串就是多个字符组成的序列,字符串需要使用双引号。
1)字符串之String类(特殊的引用数据类型)①String特点:a:java.lang包(java.lang.String)
b:它是一个不可变的字符序列,因为String是一个final类c:String字符串也是采用Unicode国际统一编码
d:String的内容是不可变的,但是可以更改它指向的内存地址。
e:String不可变的原理就是利用了字符串池的概念,字符串池的原理是:
在Java中声明的所有的字符串都会存放到一个叫做字符串池的地方 ,每创建一个字符串对象,在存放到字符串池之前,字符串池都会
进行判断,目前字符串池是否已经存在相同的字符串,如果存在则直接引用,不存在则添加到字符串池中。所以,给字符串重新赋值并不
是把原来的字符串给覆盖掉,而是让当前的字符串对象的内存地址指向变成了最后一次赋值的字符串的内存地址。
f:String是一个特殊类,创建String对象时,可以无需通过new的方式,只要是双引号引起来的都是一个字符串对象
g:String对象一旦创建,就不能更改它的值。②创建字符串实例的方式:(分析内存)
String str1 = "abc"; //最常用
String str2 = new String("abc");
③字符串可以使用“+”来连接:String str3 = "abc" + "中国";
也可以用“+”跟其它类型数据进行连接:String str4 = "abc" + 12.345;
④字符串长度:
String类有一个方法length()可以获取它的长度。String str5 = "salkdf";
str5.length(); // "salkdf".length();
⑤字符串比较a--> ==号用来比较两个字符串的内存地址(是否存储在同一内存位置)。 //用得少
b--> String类的equals()方法用来比较两字符串的内容是否相同。
方法 boolean equals(Object object): 比较的是两个字符串的内容。最常用的方法。
c: boolean equalsIgnoreCase(): 忽略大小写比较两个字符串的内容。
d: int compareTo(String str2): 比较两个字符串的字典顺序。
如果相等,返回0
如果在参数字符串位置之前,返回负数。
如果在参数字符串位置之后,返回正数。
compareTo方法用来进行字符串的比较,规则:
如果两个字符串进行比较,首先比较字符串的第一个字符;如果
第一个字符不相等,直接用第一个字符所对应的ascii码值进行
相减;如果两个字符串的第一个字符相等,就比较第二个字符,
依次类推,直到比较到不相同的或者一方已经比较完,此时,直接
用两个字符串的长度进行相减。
e: int compareToIgnoreCase(String str2): 忽略大小写比较两个字符串的字典顺序。
f: boolean startsWith(String str): 是否以参数字符串开头
g: boolean endsWith(String str): 是否以参数字符串结尾
⑥字符串搜索相关
a: int indexOf(int ch): 返回指定字符ch在此字符串中第一次出现的索引值;如果未出现该字符,则返回-1
b: int indexOf(String str): 返回第一次出现的指定子字符串str在此字符串中的索引值;如果未出现该字符串,则返回-1
c: int lastIndexOf(int ch):返回最后一次出现的指定字符在此字符串中的索引值;如果未出现该字符,则返回-1
d: int lastIndexOf(String str):返回最后一次出现的指定子字符串str在此字符串中的索引值;如果未出现该字符串,则返回-1
⑦提取子字符串
a: char charAt(int index): 提取指定索引处的那个字符。
b: String substring(int beginIndex):提取从指定索引处到结尾的字符串。
c: String substring(int beginIndex, int endIndex):提取从 beginindex开始直到 endindex(不包括此位置)之间的这部分字符串
d: String concat(String str):跟“+”的功能一样。
e: String replace(char oldChar,char newChar):返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar而生成的。
f: String trim(); 去掉字符串的前后空格。
⑧转大小写
a: String toUpperCase(); 转成大写
b: String toLowerCase(); 转成小写
⑨其它类型转换成字符串:
在String类中定义了一些静态的重载方法:
static String valueOf(…)可以将基本类型数据、Object类型转换为字符串。
⑩与正则表达式相关的方法:
a: String[] split(String regex); 根据给定正则表达式的匹配拆分此字符串
b: String replaceAll(String regex, String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串.
c: public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式
⑪ 如果要对字符串内容进行频繁的更改时,不建议使用“+”,而应该用StringBuffer或StringBuider类。因为+会产生一个新的String对象。
⑫△常见面试题,分析:
String str=new String("zhangsan");
如果通过构造方法,来创建String 的对象,会产生两个字符串
对象,原对象是构造方法中的参数,新创建出来的对象实际上是
原对象的副本。
2)字符串之StringBuffer类( 线程安全的可变字符序列,支持方法链访问)
① java.lang.StringBuffer是一个可变的字符序列。
②StringBuffer底层其实就是通过一个动态的字符数组来实现的,可以根据字符串的大小,动态扩展和缩小字符数组的容量。
String toString(); 把可变的字符序列转换成不可变的String。
不常用-->StringBuffer insert(int offset,String str);将字符串str插入此字符序列指定位置中
int length();确定StringBuffer对象的长度
void setCharAt(int pos,char ch);使用ch指定的新值设置pos指定的位置上的字符
StringBuffer reverse();反转字符串
StringBuffer delete(int start,int end);此方法将删除调用对象中从start位置开始直到end指定的索引-1位置的字符序列
StringBuffer deleteCharAt(int pos);此方法将删除pos指定的索引处的字符
StringBuffer replace(int start,int end,String s);此方法使用一组字符替换另一组字符,将用替换字符串从start指定的位置开始替换,
直到end指定的位 置结束
3)字符串之StringBuilder类( 线程不安全的可变字符序列,效率最高)
△StringBuiler是JDK5.0新增的一个线程不同步的字符串类,它和 StringBuffer实现了相同的接口,操作也基本完全一致,只是StringBuffer 是线程同步的。
如果不考虑线程的问题,效率有高到底,依次是 StringBuilder,StringBuffer,String
4)Math类(java.lang.Math)
java.lang.Math是一个数学函数和几何类
Math类用final修饰,而且类中所有的成员属性和方法都是静态的。
Math类的常用属性和方法:
静态常量--PI:圆周率的double值
静态方法:详情见PPT
☆静态导入
语法: import static 包名.类名.*;
在JDK5.0中,使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。
5)Random类(java.util.Random)
用于生成随机数
构造方法:①Random();创建一个新的随机数生成器(使用当前世界毫秒值为种子)
②Random(long seed);使用单个long种子创建一个新随机数生成器
Random类的方法:
①nextInt(int n);返回一个0到n(不包括n)的随机整数值。
②nextInt();所有2^23个可能int值的生成概率(大致)相同
③nextFloat()
④nextDouble()
⑤nextBoolean()
6)日期和时间相关类
注:世界世界标准
UTC-->世界标准时间
GMT-->格林威治标准时间
UTC比GMT更精确
①System类(java.lang.System)提供了一些用跟JVM沟通的方法
public static long currentTimeMillis() :返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差(不太精确)-->只适用于计算时间差
②Date类(java.util.Date)
表示特定的瞬间,精确到毫秒
常用的构造方法:Date();使用系统当前的时间创建一个Date的实例
内部就是使用System.currentTimeMillis()获取系统当前时间的毫秒数来创建Date对象
Date(long dt);使用自1970年1月1日00:00:00 GMT以来的指定毫秒数创建一个Date实例
常用方法:getTime(); 返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数
toString();把此Date对象转换为一下形式的String:
dow mon dd hh:mm:ss zzz yyyy-->星期 月 日 时:分:秒 时区 年
由于Date类中的方法API不易于实现国际化,所以大部分被废弃了。
③SimpleDateFormat类(java.text.SimpleDateFormat)
SimpleDateFormat是一个与语言环境有关的方式来格式化和解析日期的具体类
允许进行格式化(日期-->文本),解析(文本-->日期)和规范化。
可以把一个日期对象按指定的模式格式化成字符串,也可以把一个字符串按指定的模式解析成java.util.Date对象.
关键是掌握怎么写日历模式文本:"yyyy-MM-dd HH:mm:ss"
④Calendar类(java.util.Calendar-->日历时间-->最常用)
Calendar类(日历)是一个抽象基类,主要用于完成日期字段之间相互操作的功能,即可以设置和获取日期数据的特定部分。
获取Calendar类的实例的方法:
使用 Calendar.getInstance();
调用它的子类GregorianCalendar的构造方法
一个Calendar实例是系统时间的抽象表示,可以通过这个实例上的 int get(int field)方法取得想要的时间信息。
常用方法 a int get(int field) 根据给定的日历字段获得当前时间中相应字段的值
b void set(int field,int value) 将指定的日历字段设置为给定的值
c void add(int field,int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量
d final Date getTime() 返回一个表示此Calendar 时间值的Date对象
e final void setTime(Date date) 使用给定的Date设置此Calendar的时间
f long getTimeInMillis() 返回此Calendar的时间毫秒值
7)大数字操作
Java语言支持大数字的操作,在java.math包中提供了两个专门的类:BigInteger和BigDecimal类
①BigInteger类
代表任意精度的整数
加:add 减:subtract 乘:multiply 除:divide 模:remainder
②BigDecima类
代表任意精度的浮点数
8)枚举类
a 特点:
①JDK1.5新增了一个enum关键字,用以定义枚举类。
②枚举类是一种特殊的类,可以有自己的属性和方法,可以实现一个或者多个接口,也可以定义自己的构造器。
③一个Java源文件中最多只能定义一个public访问权限的枚举类,且该Java源文件也必须和该枚举类类名相同。
④枚举类的构造器只能用private访问修饰符,如果省略了其构造器的访问修饰符,则默认private。如果强制指定访问修饰符,则只能指定private修饰符。
⑤枚举类的所有实例必须在枚举类中显式列出,否则这个枚举类将永远都不能产生实例。列出这些实例时系统会自动添加public static final修饰
⑥所有枚举类都提供了一个values方法,该方法很方便地遍历所有的枚举值。
b 定义枚举
public enum Gender{
Man,Women
}
c 枚举类的成员变量,方法和构造方法
9)JDK8新增的日期包java.time
在另一篇博客有详细的介绍。
10)Objects类
JDK7新增的。提供了一些工具方法来操作对象。
hashCode();返回指定对象的hashCode值。
toString();返回指定对象的"描述性"字符串。
requiredNonNull();检查对象是否为null。
11)Runtime类
①Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。
②应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取与之关联的Runtime对象。
③Runtime类代表Jva程序的运行时环境,可以访问JVM的相关信息,如处理器数量,内存信息等。
④可以直接单独启动一条进程来运行操作系统的命令。
12)ThreadLocalRandom类
java7新增的,可以在多线程环境下代替Random减少多线程资源竞争,从而提供更好的线程安全。
大多数使用都和Random相同
、