Lesson 8,Basic Grammar (Part 3)
Java语言基础语法 (下 )
LiFan(李凡)
Chengdu University of Information Technology
The Department Of Computer Science
2005
StringBuffer (字符串缓冲类 )
? String类的对象创建后其包含的字符序列不可变,
对多个 String类直接量进行连接操作会创建多个临
时的 String类对象
? StringBuffer类的对象提供了一个字符序列的暂存
空间,可以对该对象中包含的字符序列进行增、
删、改等操作而无需创建新的 String类对象,并提
供方法返回最终的字符串,一般用于涉及多个字
符串连接的操作
public static String guillemete(String quote){
return ?<<?+quote+?>>?;
}
return String.valueOf(?<<?).concat(quote).concat(
String.valueOf(?>>?))
编
译
StringBuffer类的构造函数
? StringBuffer()
? StringBuffer(int length)
StringBuffer() 等价于 StringBuffer(16)
? StringBuffer(String str)
StringBuffer类对象的内部使用字符数组 char[]
来存放字符序列,当待处理的字符序列的长度超
过字符数组的长度时,将进行扩容操作,创建一
个新的更长的数组来取代原有的数组,并拷贝原
有数组中的字符到新数组中
StringBuffer类的相关方法
? StringBuffer类除了提供与 String类相似的 length()和
indexOf(…) 外,还提供了许多对字符序列进行增、
删、改的方法
? StringBuffer类通过以下两个方法得到最终的字符
串对象,
String toString()
char[] getChars(int srcBegin,int srcEnd,char[] dst,
int dstBegin)
StringBuffer类的相关方法
? StringBuffer类通过以下方法修改字符序列,
void setCharAt(int index,char ch)
StringBuffer replace(int start,int end,String str)
各种重载的 append(…) 方法
各种重载的 insert(…) 方法
StringBuffer delete(int start,int end)
StringBuffer deleteCharAt(int index)
StringBuffer reverse()
void setLength(int len)
StringBuffer类对象的扩容操作
? 当 StringBuffer类对象中的字符数组的长度小于需
要容纳的字符长度时,将自动进行扩容操作,不
过也可以通过以下方法对该对象进行扩容,
void ensureCapacity(int miniCapacity)
调用该方法后 StringBuffer类对象能容纳的字符长
度要么等于参数 miniCapacity指定的长度,要么等
于 原来的长度乘以 2
Wrapper Classes (包装器类 )
? 所有的基本数据类型都有与之对应的包装器类
基本数据类型 包装器类
boolean java.lang.Boolean
char java.lang.Character
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
包装器类的功能
? 作为处理各种基本数据类型数据的方法的逻
辑宿主
Integer.toBinaryString(int)
? 作为各种与基本数据类型相关的命名常量的
逻辑宿主
Integer.MAX_VALUE
? 将所对应的基本数据类型的值封装在对象中
? 包装器类的对象是不可变的对象
Wrapper Classes Hierarchy
Object
Boolean Character Number
Byte Short Integer Long Float Double
Boolean类
? Boolean类用于将基本数据类型 boolean类型
的值包装在对象中
? Boolean类的构造函数如下,
Boolean(boolean value)
Boolean(String s)
? Boolean类的命名常量如下,
Boolean.TRUE
Boolean.FALSE
Boolean trueObj=new Boolean(true);
Boolean falseObj=new Boolean(“false”);
public Boolean isLessThan(int i,int j){
return ew Boolean(i-j<0);
}
public Boolean isLessThan(int i,int j){
return i-j<0?Boolean.TRUE:Boolean.FALSE;
}
Boolean类
? Boolean类中静态方法,
static String toString(boolean b)
static Boolean valueOf(boolean b)
static Boolean valueOf(String s)
? 获取 Boolean类对象中 boolean值的方法,
boolean booleanValue()
boolean bool=Boolean.TRUE.booleanValue();
String boolStr=Boolean.toString(bool);
Boolean boolObj1=Boolean.valueOf(boolStr);
Boolean boolObj2=Boolean.valueOf(bool);
Character类
? Character类用于将基本数据类型 char类型的值包
装在对象中
? Character类只有唯一的构造函数,
Character(char ch)
? Character类的命名常量主要用于表示 Unicode字符
的类型,与相关方法配合使用
Character.MIN_VALUE
Character.MAX_VALUE
Character.MATH_SYMBOL
Character.SPACE_SEPARATRO
?\u0000?
?\uFFFF?
char plusCh=?+?;
char spaceCh=? ?;
boolean b1= Character.MATH_SYMBOL==Character.getType(plusCh);
boolean b2=Character.SPACE_SYMBOL==Character.getType(spaceCh);
b1=?
b2=?
true
true
Character类
? Character类中用于判断字符类型的方法,
static int getType(char ch)
static boolean isDigit(char ch)
static boolean isJavaIdentifierPart(char ch)
static boolean isJavaIdentifierStart(char ch)
static boolean isWhitespace(char ch)
static boolean isLowerCase(char ch)
static boolean isUpperCase(char ch)
public String getCharTypeName(char ch){
String name=null;
switch(Character.getType(ch)){
case Character.MATH_SYMBOL:name=“MathSymbol”;break;
case Character.CONTROL:name=“Control”;break;
…
default,name=“unknown”;
}
return name;
}
char plusCh=?+?,CR=0x000A;
System.out.println(getCharTypeName(plusCh));
System.out.println(getCharTypeName(minusCh));
MathSymbol
Control
Character类
? Character类中用于字符转换的方法,
char charValue()
static int digit(char ch,int radix)
static int getNumericValue(char ch)
static String toString(char ch)
char toUpperCase(char ch)
char toLowerCase(char ch)
int ival1=Character.digit(?A?,16);
Int ival2=Character.digit(?9?,10);
ival1=?
ival2=?
char numCh=?Ⅺ ? ;
int num=Character.getNumericValue(numCh);
num=?
char ch1=?a?;
char ch2=Character.toUpperCase(ch1);
ch2=?
10
9
11
?A?
Number类
? 抽象类 Number是所有表示数字的包装器类的父类,
声明了如下的抽象方法,
byte byteValue()
short shortValue()
int intValue()
long longValue()
float floatValue()
double doubleValue()
? 所有的表示数字的包装器类都实现了这些方法,
用于实现不同类型的值之间的转换
整型包装器类
? 与整数基本类型相对应的包装器类有,
Byte Short Integer Long
? 所有的整型包装器类都提供了两种形式的构
造函数,
Byte(byte value) Byte(String s)
Short(short value) Short(String s)
Integer(int value) Integer(String s)
Long(long value) Long(String s)
byte byteValue=49;
Byte byteObj1=new Byte(byte);
Byte byteObj2=new Byte(“49”);
int intValue=1000;
Integer in Obj1=new Integer(intValue);
Integer intObj2=new Integer(“1000”);
long longValue=intObj1.longValue();
short shortValue=intObj1.shortValue();
整型包装器类
? 所有整型包装器类都提供了 parseXXX方法,用于将
String对象转换成对应的基本类型的值
byte Byte.parseByte(String s)
byte Byte.parseByte(String s,int radix)
short Short.parseShort(String s)
short Short.parseShort(String s,int radix)
int Integer.parseInt(String s)
int Integer.parseInt(String s,int radix)
long Long.parseLong(String s)
long Long.parseLong(String s,int radix)
byte byteValue=Byte.parseByte(“1A”,16);
short shortValue=Short.parseShort(“14”,5);
int intValue=Integer.parseInt(“1010”,2);
long longValue=Long.parseLong(“1234”,10);
byteValue=?
shortValue=?
intValue=?
longValue=?
26
9
10
1234
整型包装器类
? 所有整型包装器类都提供了 valueOf 方法,用于将
String对象转换成包装器类对象
Byte Byte.valueOf(String s)
Byte Byte.valueOf(String s,int radix)
Short Short.valueOf(String s)
Short Short.valueOf(String s,int radix)
Integer Integer.valueOf(String s)
Integer Integer.valueOf(String s,int radix)
Long Long.valueOf(String s)
Long Long.valueOf(String s,int radix)
整型包装器类
? 同一种整型包装器类对象间比较值的大小,
可使用以下方法,
int compareTo(Object other) // 所有对象
int compareTo(Byte other) // Byte对象
int compareTo(Short other) // Short对象
int compareTo(Integer other) // Integer对象
int compareTo(Long other) // Long对象
整型包装器类
? Integer类和 Long类还提供了将整数值转换为
不同进制的字符串对象的方法,
static String Integer.toHexString(int i)
static String Integer.toOctalString(int i)
static String Integer.toBinaryString(int i)
static String Long.toHexString(long l)
static String Long.toOctalString(long l)
static String Long.toBinaryString(long l)
Int intValue=100;
String intStr1=Integer.toHexString(intValue);
String in Str2=Integer.toOctalString(intValue);
String intStr3=Integer.toBinaryString(intValue);
intStr1=?
intStr2=?
intStr3=?
“64”
“144”
“1100100”
浮点型包装器类
? 与浮点数基本类型相对应的包装器类有,
Float Double
? 浮点型包装器类的构造函数有以下形式,
Float(float fv)
Float(String s)
Float(double dv)
Double(double value)
Double(String s)
浮点型包装器类
? 浮点型的包装器类提供了以下命名常量,
MIN_VALUE
MAX_VALUE
POSITIVE_INFINITY
NEGATIVE_INFINITY
NaN
正无穷大
负无穷大
不是数字,表示无效的浮点数运算结果
浮点型包装器类
? 浮点型包装器类提供以下方法来判断给定的
浮点数是 无穷 还是 不是数字,
boolean isNaN() //所有对象
static boolean isInfinite(float f) //Float类
static boolean isNaN(float f) //Float类
static boolean isInfinite(double d) //Double类
static boolean isNaN(double d) //Double类
double d1=0.0/0.0;
double d2=1.0/0.0;
double d3=Math.sqrt(-1.0);
boolean b1=Double.isNaN(d1);
boolean b2=d1==Double.NaN;
b1=?
b2=?
boolean 3=Double.isInfinite(d2);
boolean b4=d2==Double.POSITIVE_INFINITY;
b3=?
b4=?
boolean b5=Double.isNaN(d3);
b5=?
true
false
true
true
true
浮点型包装器类
? 浮点型包装器类提供了一组方法将浮点数转
换为整数,用于对浮点数进行位操作,
static int floatToIntBits(float f)
static int floatToRawIntBits(float f)
static float intBitsToFloat(int i)
static long doubleToLongBits(double d)
static long doubleToRawLongBits(double d)
static double longBitsToDouble(long l)
IEEE-754单精度浮点数的位模式,
1 11111111 11111111111111111111111
Float floatValue=-3.56;
Int intPattern=Float.floatToIntBits(floatValue);
intPattern&=0x7FFFFFFF;
floatValue=Float.intBitsToFloat(intPattern);
floatValue=?
符号位 指数 底数
3.56
Assignments (作业 )
? 思考,P281 练习 11.1
? 阅读第 7章 7.6,7.7,7.8,7.10小节,写
阅读报告
? 编程,P182 练习 7.1
P189 练习 7.3
P226 练习 9.4
Java语言基础语法 (下 )
LiFan(李凡)
Chengdu University of Information Technology
The Department Of Computer Science
2005
StringBuffer (字符串缓冲类 )
? String类的对象创建后其包含的字符序列不可变,
对多个 String类直接量进行连接操作会创建多个临
时的 String类对象
? StringBuffer类的对象提供了一个字符序列的暂存
空间,可以对该对象中包含的字符序列进行增、
删、改等操作而无需创建新的 String类对象,并提
供方法返回最终的字符串,一般用于涉及多个字
符串连接的操作
public static String guillemete(String quote){
return ?<<?+quote+?>>?;
}
return String.valueOf(?<<?).concat(quote).concat(
String.valueOf(?>>?))
编
译
StringBuffer类的构造函数
? StringBuffer()
? StringBuffer(int length)
StringBuffer() 等价于 StringBuffer(16)
? StringBuffer(String str)
StringBuffer类对象的内部使用字符数组 char[]
来存放字符序列,当待处理的字符序列的长度超
过字符数组的长度时,将进行扩容操作,创建一
个新的更长的数组来取代原有的数组,并拷贝原
有数组中的字符到新数组中
StringBuffer类的相关方法
? StringBuffer类除了提供与 String类相似的 length()和
indexOf(…) 外,还提供了许多对字符序列进行增、
删、改的方法
? StringBuffer类通过以下两个方法得到最终的字符
串对象,
String toString()
char[] getChars(int srcBegin,int srcEnd,char[] dst,
int dstBegin)
StringBuffer类的相关方法
? StringBuffer类通过以下方法修改字符序列,
void setCharAt(int index,char ch)
StringBuffer replace(int start,int end,String str)
各种重载的 append(…) 方法
各种重载的 insert(…) 方法
StringBuffer delete(int start,int end)
StringBuffer deleteCharAt(int index)
StringBuffer reverse()
void setLength(int len)
StringBuffer类对象的扩容操作
? 当 StringBuffer类对象中的字符数组的长度小于需
要容纳的字符长度时,将自动进行扩容操作,不
过也可以通过以下方法对该对象进行扩容,
void ensureCapacity(int miniCapacity)
调用该方法后 StringBuffer类对象能容纳的字符长
度要么等于参数 miniCapacity指定的长度,要么等
于 原来的长度乘以 2
Wrapper Classes (包装器类 )
? 所有的基本数据类型都有与之对应的包装器类
基本数据类型 包装器类
boolean java.lang.Boolean
char java.lang.Character
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
包装器类的功能
? 作为处理各种基本数据类型数据的方法的逻
辑宿主
Integer.toBinaryString(int)
? 作为各种与基本数据类型相关的命名常量的
逻辑宿主
Integer.MAX_VALUE
? 将所对应的基本数据类型的值封装在对象中
? 包装器类的对象是不可变的对象
Wrapper Classes Hierarchy
Object
Boolean Character Number
Byte Short Integer Long Float Double
Boolean类
? Boolean类用于将基本数据类型 boolean类型
的值包装在对象中
? Boolean类的构造函数如下,
Boolean(boolean value)
Boolean(String s)
? Boolean类的命名常量如下,
Boolean.TRUE
Boolean.FALSE
Boolean trueObj=new Boolean(true);
Boolean falseObj=new Boolean(“false”);
public Boolean isLessThan(int i,int j){
return ew Boolean(i-j<0);
}
public Boolean isLessThan(int i,int j){
return i-j<0?Boolean.TRUE:Boolean.FALSE;
}
Boolean类
? Boolean类中静态方法,
static String toString(boolean b)
static Boolean valueOf(boolean b)
static Boolean valueOf(String s)
? 获取 Boolean类对象中 boolean值的方法,
boolean booleanValue()
boolean bool=Boolean.TRUE.booleanValue();
String boolStr=Boolean.toString(bool);
Boolean boolObj1=Boolean.valueOf(boolStr);
Boolean boolObj2=Boolean.valueOf(bool);
Character类
? Character类用于将基本数据类型 char类型的值包
装在对象中
? Character类只有唯一的构造函数,
Character(char ch)
? Character类的命名常量主要用于表示 Unicode字符
的类型,与相关方法配合使用
Character.MIN_VALUE
Character.MAX_VALUE
Character.MATH_SYMBOL
Character.SPACE_SEPARATRO
?\u0000?
?\uFFFF?
char plusCh=?+?;
char spaceCh=? ?;
boolean b1= Character.MATH_SYMBOL==Character.getType(plusCh);
boolean b2=Character.SPACE_SYMBOL==Character.getType(spaceCh);
b1=?
b2=?
true
true
Character类
? Character类中用于判断字符类型的方法,
static int getType(char ch)
static boolean isDigit(char ch)
static boolean isJavaIdentifierPart(char ch)
static boolean isJavaIdentifierStart(char ch)
static boolean isWhitespace(char ch)
static boolean isLowerCase(char ch)
static boolean isUpperCase(char ch)
public String getCharTypeName(char ch){
String name=null;
switch(Character.getType(ch)){
case Character.MATH_SYMBOL:name=“MathSymbol”;break;
case Character.CONTROL:name=“Control”;break;
…
default,name=“unknown”;
}
return name;
}
char plusCh=?+?,CR=0x000A;
System.out.println(getCharTypeName(plusCh));
System.out.println(getCharTypeName(minusCh));
MathSymbol
Control
Character类
? Character类中用于字符转换的方法,
char charValue()
static int digit(char ch,int radix)
static int getNumericValue(char ch)
static String toString(char ch)
char toUpperCase(char ch)
char toLowerCase(char ch)
int ival1=Character.digit(?A?,16);
Int ival2=Character.digit(?9?,10);
ival1=?
ival2=?
char numCh=?Ⅺ ? ;
int num=Character.getNumericValue(numCh);
num=?
char ch1=?a?;
char ch2=Character.toUpperCase(ch1);
ch2=?
10
9
11
?A?
Number类
? 抽象类 Number是所有表示数字的包装器类的父类,
声明了如下的抽象方法,
byte byteValue()
short shortValue()
int intValue()
long longValue()
float floatValue()
double doubleValue()
? 所有的表示数字的包装器类都实现了这些方法,
用于实现不同类型的值之间的转换
整型包装器类
? 与整数基本类型相对应的包装器类有,
Byte Short Integer Long
? 所有的整型包装器类都提供了两种形式的构
造函数,
Byte(byte value) Byte(String s)
Short(short value) Short(String s)
Integer(int value) Integer(String s)
Long(long value) Long(String s)
byte byteValue=49;
Byte byteObj1=new Byte(byte);
Byte byteObj2=new Byte(“49”);
int intValue=1000;
Integer in Obj1=new Integer(intValue);
Integer intObj2=new Integer(“1000”);
long longValue=intObj1.longValue();
short shortValue=intObj1.shortValue();
整型包装器类
? 所有整型包装器类都提供了 parseXXX方法,用于将
String对象转换成对应的基本类型的值
byte Byte.parseByte(String s)
byte Byte.parseByte(String s,int radix)
short Short.parseShort(String s)
short Short.parseShort(String s,int radix)
int Integer.parseInt(String s)
int Integer.parseInt(String s,int radix)
long Long.parseLong(String s)
long Long.parseLong(String s,int radix)
byte byteValue=Byte.parseByte(“1A”,16);
short shortValue=Short.parseShort(“14”,5);
int intValue=Integer.parseInt(“1010”,2);
long longValue=Long.parseLong(“1234”,10);
byteValue=?
shortValue=?
intValue=?
longValue=?
26
9
10
1234
整型包装器类
? 所有整型包装器类都提供了 valueOf 方法,用于将
String对象转换成包装器类对象
Byte Byte.valueOf(String s)
Byte Byte.valueOf(String s,int radix)
Short Short.valueOf(String s)
Short Short.valueOf(String s,int radix)
Integer Integer.valueOf(String s)
Integer Integer.valueOf(String s,int radix)
Long Long.valueOf(String s)
Long Long.valueOf(String s,int radix)
整型包装器类
? 同一种整型包装器类对象间比较值的大小,
可使用以下方法,
int compareTo(Object other) // 所有对象
int compareTo(Byte other) // Byte对象
int compareTo(Short other) // Short对象
int compareTo(Integer other) // Integer对象
int compareTo(Long other) // Long对象
整型包装器类
? Integer类和 Long类还提供了将整数值转换为
不同进制的字符串对象的方法,
static String Integer.toHexString(int i)
static String Integer.toOctalString(int i)
static String Integer.toBinaryString(int i)
static String Long.toHexString(long l)
static String Long.toOctalString(long l)
static String Long.toBinaryString(long l)
Int intValue=100;
String intStr1=Integer.toHexString(intValue);
String in Str2=Integer.toOctalString(intValue);
String intStr3=Integer.toBinaryString(intValue);
intStr1=?
intStr2=?
intStr3=?
“64”
“144”
“1100100”
浮点型包装器类
? 与浮点数基本类型相对应的包装器类有,
Float Double
? 浮点型包装器类的构造函数有以下形式,
Float(float fv)
Float(String s)
Float(double dv)
Double(double value)
Double(String s)
浮点型包装器类
? 浮点型的包装器类提供了以下命名常量,
MIN_VALUE
MAX_VALUE
POSITIVE_INFINITY
NEGATIVE_INFINITY
NaN
正无穷大
负无穷大
不是数字,表示无效的浮点数运算结果
浮点型包装器类
? 浮点型包装器类提供以下方法来判断给定的
浮点数是 无穷 还是 不是数字,
boolean isNaN() //所有对象
static boolean isInfinite(float f) //Float类
static boolean isNaN(float f) //Float类
static boolean isInfinite(double d) //Double类
static boolean isNaN(double d) //Double类
double d1=0.0/0.0;
double d2=1.0/0.0;
double d3=Math.sqrt(-1.0);
boolean b1=Double.isNaN(d1);
boolean b2=d1==Double.NaN;
b1=?
b2=?
boolean 3=Double.isInfinite(d2);
boolean b4=d2==Double.POSITIVE_INFINITY;
b3=?
b4=?
boolean b5=Double.isNaN(d3);
b5=?
true
false
true
true
true
浮点型包装器类
? 浮点型包装器类提供了一组方法将浮点数转
换为整数,用于对浮点数进行位操作,
static int floatToIntBits(float f)
static int floatToRawIntBits(float f)
static float intBitsToFloat(int i)
static long doubleToLongBits(double d)
static long doubleToRawLongBits(double d)
static double longBitsToDouble(long l)
IEEE-754单精度浮点数的位模式,
1 11111111 11111111111111111111111
Float floatValue=-3.56;
Int intPattern=Float.floatToIntBits(floatValue);
intPattern&=0x7FFFFFFF;
floatValue=Float.intBitsToFloat(intPattern);
floatValue=?
符号位 指数 底数
3.56
Assignments (作业 )
? 思考,P281 练习 11.1
? 阅读第 7章 7.6,7.7,7.8,7.10小节,写
阅读报告
? 编程,P182 练习 7.1
P189 练习 7.3
P226 练习 9.4