本章关键词
单 词 | 说 明 |
language | 语言 |
Integer | 整数 |
character | 字符 |
buffer | 缓冲器 |
math | 数学 |
parse | 转换 |
equals | 相等 |
compare | 比较,相比 |
replace | 替换,取代 |
java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类;在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明。
包装类:
原始数据类型和包装类对照
原始数据类型 | 包 装 类 |
boolean(布尔型) | Boolean |
byte(字节型) | Byte |
char(字符型) | Character |
short(短整型) | Short |
int(整型) | Integer |
long(长整型) | Long |
float(浮点型) | Float |
double(双精度浮点型) | Double |
包装类的构造方法
public class LangDemo
{
public static voidmain(String[] args)
{
Boolean objBool = newBoolean(true);
Character objChar = newCharacter('X');
Integer objInt = newInteger(100);
Long objLong = newLong(2568);
Double objDou = newDouble(3.1415);
System.out.println(objBool);
System.out.println(objChar);
System.out.println(objInt);
System.out.println(objLong);
System.out.println(objDou);
}
}
每个包装类都有一个静态的valueOf方法,用于将字符串转换成相应包装类的对象。
Eg
public class LangDemo {
public static voidmain(String[] args) {
String str ="120";
//如果转换失败,将会引发NumberFormatException异常
Byte objByte =Byte.valueOf(str);
Short objShort =Short.valueOf(str);
Integer objInt =Integer.valueOf(str);
Long objLong =Long.valueOf(str);
System.out.println(objByte);
System.out.println(objShort);
System.out.println(objInt);
System.out.println(objLong);
}
}
除了Character类以外,其它的包装类都有静态的parseXxx方法(Xxx指代具体的数据类型),用于将字符串转换成相对应的原始数据类型值。
public class ParseTest {
public static voidmain(String[] args) {
String str ="116";
//分别调用各个包装类的paseXxx方法对字符串进行转换,如果转换失败,将报异常
int i =Integer.parseInt(str);
short s =Short.parseShort(str);
byte b =Byte.parseByte(str);
long l =Long.parseLong(str);
float f =Float.parseFloat(str);
double d =Double.parseDouble(str);
boolean b = Boolean.parssBoolean(“true”);
System.out.println(i);
System.out.println(s);
System.out.println(b);
System.out.println(l);
System.out.println(f);
System.out.println(d);
System.out.println(b);
}
}
Character类中常用的方法
方 法 原 型 | 说 明 |
boolean isLetter(char ch) | 判断字符ch是否为英文字母 |
boolean isDigit(char ch) | 判断字符ch是否为0~9之间的数字 |
boolean isUpperCase(char ch) | 判断字符ch是否为大写形式 |
boolean isLowerCase(char ch) | 判断字符ch是否为小写形式 |
boolean isWhitespace(char ch) | 判断字符ch是否为空格或换行符或回车符或制表符 |
以上方法都是静态方法,可以直接通过类名调用,返回值均为boolean类型,如果是返回true,否则返回false。
实例:
publicclass CharacterDemo {
public static void main(String[] args) {
char[] charArray = {'*', '7', 'b', ' ','A'};
for (int i = 0; i < charArray.length;i++) {
if (Character.isDigit(charArray[i])) {
System.out.println(charArray[i] +"是一个数字。");
}
if (Character.isLetter(charArray[i])) {
System.out.println(charArray[i] +"是一个字母。");
}
if (Character.isWhitespace(charArray[i])){
System.out.println(charArray[i] +"是一个空格。");
}
if (Character.isLowerCase(charArray[i])){
System.out.println(charArray[i] +"是小写形式。");
}
if (Character.isUpperCase(charArray[i])){
System.out.println(charArray[i] +"是大写形式。");
}
}
}
String 类
Java中,字符串是String类的对象;可以通过使用String类提供的方法来完成对字符串的操作;创建一个字符串对象之后,将不能更改构成字符串的字符;每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内包含所做的修改,原始字符串保持不变。
String类的构造方法共有13种重载方式,以下是常用的几个:
构造方法 | 说 明 |
String() | 将创建一个空字符串 |
String(String original) | 将新建一个字符串作为指定字符串的副本 |
String(char[] value) | 将根据字符数组构造一个新字符串 |
String(byte[] tytes) | 将通过转换指定的字节数组新建一个字符串 |
示例
publicclass StringDemo
{
public static void main(String[] args)
{
char[] aryChar = {‘I', 'C', ‘S', ‘S'};
String str1 = “ETC";
//利用一个字符串常量值创建新的字符串
String str2 = newString(“ICSSETC");
//利用一个字符型数组创建新的字符串
String str3 = new String(aryChar);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
字符串长度
String类中提供length成员方法 ,用来获得字符串的长度,方法原型:int length()
该方法返回字符串中有效字符的个数。
publicclass StringDemo
{
public static void main(String[] args)
{
String str1 = "John Smith";
String str2 = new String("I LoveJava");
System.out.println(str1.length());
System.out.println(str2.length());
}
}
== 和equls的比较
1.基础类型直接比较用==比较的是值,一个基础一个引用==比较的也是值
2.引用类型不同的不能用==比较,编译报错,可以用equals进行比较(先比较数据类型,然后比较值)
3.两个Byte/Short/Integer/Long类型的比较注意数据缓存。-128-127之间的比较相等
publicclass StringDemo {
publicstatic void main(String[] args) {
String str1 = “ICSS", str2 =“ICSS";
String str3 = new String(“ETC"), str4 =new String(“ETC");
if (str1 == str2) {
System.out.println("str1和str2指向同一字符串");}
else {
System.out.println("str1和str2分别指向不同字符串");}
if (str1.equals(str2)) {
System.out.println("str1和str2的内容完全相同");}
else {
System.out.println("str1和str2的内容不相同");}
if (str3 == str4) {
System.out.println("str3和str4指向同一字符串");}
else {
System.out.println("str3和str4分别指向不同字符串");}
if (str3.equals(str4)) {
System.out.println("str3和str4的内容完全相同");}
else {
System.out.println("str3和str4的内容不相同");}
}
}
equals(Object anObject))方法则是比较两个字符串中的内容是否相同,如果相等返回true,否则返回false。
方 法 原 型 | 说 明 |
boolean equalsIgnoreCase(String anotherString) | 判断字符串anotherString是否与当前字符串相等,忽略大小写形式 |
int compareTo(String anotherString) | 根据ASCII码比较字符串anoterString和当前字符串的大小,比较方式类似于C语言中的strcmp函数 |
boolean startsWith(String prefix) | 判断当前字符串是否以字符串prefix为开头 |
boolean endsWith(String suffix) | 判断当前字符串是否以字符串suffix为后缀 |
如果需要搜索某个字符(或某个子串)在字符串中是否出现过,这就要使用到indexOf方法和lastIndexOf方法
方 法 原 型 | 说 明 |
int indexOf(int ch) | 搜索字符ch在当前字符串中第一次出现的索引,没有出现则返回-1 |
int indexOf(String str) | 搜索字符串str在当前字符串中第一次出现的索引,没有出现则返回-1 |
int lastIndexOf(int ch) | 搜索字符ch在当前字符串中最后一次出现的索引,没有出现则返回-1 |
int lastIndexOf(String str) | 搜索字符串str在当前字符串中最后一次出现的索引,没有出现则返回-1 |
字符串搜索实例
publicclass StringDemo
{
public static void main(String[] args)
{
String strEmail = "java@sun.com";
int index;
System.out.println("E-mail地址:" +strEmail);
index = strEmail.indexOf('@');
System.out.println("@字符出现的索引:"+ index); //4
index =strEmail.indexOf("sun");//5
System.out.println("字符串\"sun\"出现的索引:"+ index);
index = strEmail.lastIndexOf('a');//3
System.out.println("a字符最后一次出现的索引:"+ index);
}
}
提取字符串
方 法 原 型 | 说 明 |
char charAt(int index) | 用于从指定位置提取单个字符,该位置由index指定,索引值必须为非负 |
String substring(int index) | 用于提取从index指定的位置开始的字符串部分 |
String substring(int begin, int end) | 用于提取 begin 和 end 位置之间的字符串部分,即begin---->end-1 |
String concat(String str) | 用于连接两个字符串,并新建一个包含调用字符串的字符串对象 |
String replace(char oldChar, char newChar) | 用于将调用字符串中出现oldChar指定的字符全部都替换为newChar指定的字符 |
replaceAll(String regex, String replacement) | 用于将调用字符串中出现或者匹配regex的字符串全部都替换为replacement指定的字符 |
String trim() | 用于返回一个前后不含任何空格的调用字符串的副本 |
提取字符串实例
publicclass StringDemo
{
public static void main(String[] args)
{
String str1 = " Java is OOP";
String str2 = new String("ACCP");
System.out.println(str1.charAt(2));
System.out.println(str1.substring(5));
System.out.println(str1.substring(2,9));
System.out.println(str1.concat(str2));
System.out.println(str1 + str2);
System.out.println(str1.replace('a', 'e'));
System.out.println(str1.trim());
}
}
对字符串中字符的大小写形式进行转换。
方 法 原 型 | 说 明 |
String toUpperCase() | 返回当前字符串的全大写形式 |
String toLowerCase() | 返回当前字符串的全小写形式 |
Eg
publicclass StringDemo
{
public static void main(String[] args)
{
String str1 = "Java is OOP";
String str2;
str2 = str1.toLowerCase();
System.out.println(str2);
str2 = str1.toUpperCase();
System.out.println(str2);
}
}
数据格式转换
在某些特定的场合,我们可能需要将字符串转化成其它格式的数据进行操作;
方 法 原 型 | 说 明 |
byte[] getBytes() | 返回当前字符串转化成byte型数组的形式 |
char[] toCharArray() | 返回当前字符串的字符数组形式,类似于C语言中字符串的保存形式 |
Stringbuffer类
String在操作的时候会产生新的字符串对象,导致大量的内存耗用构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
特点:
1:可以对字符串内容进行修改。
2:是一个容器。
3:是可变长度的。
4:缓冲区中可以存储任意类型的数据。
5:最终会通过toString方法变成字符串。
方 法 原 型 | 说 明 |
StringBuffer insert(int index, x x) | 可以将数据插入到指定index位置,x可以为任何类型的数据 |
int length() | 获得当前StringBuffer对象的长度 |
void setCharAt(int index, char ch) | 使用 ch 指定的新值替换 index指定的位置上的字符 |
String toString() | 转换为字符串形式 |
StringBuffer reverse() | 将当前StringBuffer对象中的字符序列倒置 |
StringBuffer delete(int start, int end) | 删除缓冲区中的数据,包含start,不包含end。 |
StringBuffer deleteCharAt(int index) | 将删除 index 指定的索引处的字符 |
StringBuffer replace(int start, int end, String str) | 此方法使用一组字符替换另一组字符。将用替换字符串从 start指定的位置开始替换,直到 end 指定的位置结束 |
字符串的不变性
在Java中一旦创建了字符串就不能直接更改,这就是字符串的不变性;而StringBuffer类正是针对此问题而提供的字符可变序列;StringBuffer与String是同等的类,唯一区别是可以进行更改。
Math类
• Math类中提供了一系列基本数学运算和几何运算的方法;
• 该类的构造方法被修饰为private,因此不能实例化;
• 该类中的所有方法都是静态的,可以通过类名直接调用;
该类被修饰为final,因此没有子类
方 法 原 型 | 说 明 |
static int abs(int a) | 求a的绝对值,有4种重载,还有float,double和long |
static double pow(double a, double b) | 求a的b次方幂 |
static double sqrt(double a) | 求a的平方根 |
static int round(float a) | 求a的四舍五入取整结果 |
static double ceil(double a) | 返回不小于a的最小整数值 |
static double floor(double a) | 返回不大于a的最大整数值 |
static double sin(double a) | 返回a的正弦值 |
static double cos(double a) | 返回a的余弦值 |
• Math类中还包括两个常用的常量:
– PI:圆周率π
– E:自然常量
• 以上常量在Math类中都被声明成静态,可以直接通过类名进行访问。
Objet 类
ava中的类体系遵循单根结构,即任何一个类往上追溯都到达同一个父类;
Object类就是这个单根体系的根,也就是说它是其它所有类的共同父类;
如果用户定义的类没有扩展任何其它类,则默认扩展自Object类;
Object类中定义的一些方法,会被继承到所有类中 hashCode toString
方 法 原 型 | 说 明 |
boolean equals(Object obj) | 判断当前对象是否与参数obj(内容)相等,如果有必要,应该在自定义的类中覆盖该方法 |
String toString() | 返回当前对象的字符串表示,如果有必要,应该在自定义的类中覆盖该方法 |
Class getClass() | 返回当前对象的类描述对象,此方法被继承到所有类中 |
protected void finalize() throws Throwable | 当前对象被垃圾回收时调用此方法(类似于C++的析构函数),但无法确定具体何时调用 |
public final void wait() throws InterruptedException | 使当前线程进入等待状态 |
classStudent { //定义Student类,缺省继承于Object类
private String mName;
private int mAge;
public Student(String name, int age) { //构造方法
mName = name;
mAge = age;
}
public String toString() { //覆盖Object类中的toString方法
String str = "姓名:" +mName + ", 年龄:" + mAge + "岁";
return str;
}
}
publicclass ToStringDemo { //容纳main方法
public static void main(String[] args) {
Student std = new Student("张三",18);
System.out.println(std); //默认调用toString方法
}
}
Class类
• Java应用程序实际上都是由一个个对象组成,这些对象分别属于什么类,是从哪个类继承而来,这一系列的信息都是由Class类的实例来记录的;
• Class类的实例用于记录对象的类描述信息;
• 如果在程序运行时,需要检索某个对象的相关类信息,可以调用该对象的getClass方法来获得记录其描述信息的Class类实例;
Class类没有公共的构造方法,无法通过new运算符实例化,只能通过对象的getClass方法,或是通过Class的静态方法forName来获得实例
方 法 原 型 | 说 明 |
static Class forName(String className) throws ClassNotFoundException | 使用参数className来指定具体的类,来获得相关的类描述对象,该方法有可能抛出类加载异常(ClassNotFoundException),必须捕捉 |
Class getSuperclass() | 获得当前类描述对象的父类的描述对象 |
String getName() | 返回当前类描述对象的类名称 |
类描述对象实例
publicclass ClassDemo {
public static void main(String[] args) {
try {
/*使用forName方法获得任意一个类的类描述对象
forName方法有可能抛异常,必须捕捉*/
Class cls =Class.forName("java.lang.StringBuffer");
//循环打印父类信息,直到没有父类
while (cls != null) {
System.out.println(cls);
cls = cls.getSuperclass();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
总结
java.lang包是Java中最基础的一个包,也是唯一一个无需显示声明就默认导入包;
包装类共有8个,它们可以以对象的形式封装原始类型的数据;
Java中的字符串以String类对象的形式存放,该类中提供一系列对字符串进行操作的方法;
StringBuffer类是另一种形式的字符串,与String类的区别是允许对自身的内容进行修改;
Math类提供一系列进行算术计算的方法,这些方法都是静态的;
Object类是其它所有类的父类;
Class类的实例记录了对象的类信息。