本章介绍常见的Java基础类,这些类是Java软件开发的基础,也是在项目开发中经常使用的。Java基础类集中在以下包中。
q ● lang包。
q ● util包。
q ● io包。
这些内容是在Java面试中经常考查的知识点,求职者必须掌握。
10.1 java.lang包
java.lang包是Java的基础包,在进行Java编程时,该包是必不可少的。在编译时,java.lang包被自动导入源文件。java.lang包含Object类和包装类(Boolean、Character、Byte、Short、Integer、Long、Float和Double)还包含了一些常用接口和异常等内容。在进行Java编程时,该包是必不可少的。
10.1.1 所有类的父类Object
面试例题1:Object类中的hasCode()方法的返回类型是什么?
请从下面选项中选择正确的答案:
(a)String。
(b)int。
(c)long。
(d)Object。
(e)Class。
考点:考查求职者对Object类的掌握。
出现频率:★★★★
解析
Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现了这个类的方法。
q ● 在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。
q ● 可以使用类型为Object的对象指向任意类型的对象。
q ● Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法。
q ● Object类的对象只能用作各种对象的通用持有者。对它们进行任何专门的操作,都需要知道它们的原始类型并进行类型转换。例如:
Object obj = new MyObject();
MyObject x = (MyObject)obj;
1.Object类的主要方法
q ● Object():默认构造方法。
q ● clone():创建并返回此对象的一个副本。
q ● equals(Object obj):判断某个其他对象是否与此对象“相等”。
q ● finalize():当垃圾回收器确定不存在对该对象的引用时,由对象的垃圾回收器调用此方法。
q ● getClass():返回一个对象的运行时类。
q ● hashCode():返回该对象的哈希码值。
q ● notify():唤醒在此对象监视器上等待的单个线程。
q ● notifyAll():唤醒在此对象监视器上等待的所有线程。
q ● toString():返回该对象的字符串表示。
q ● wait():导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。
q ● wait(long timeout):导致当前的线程在指定时间(timeout 毫秒)内等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,超过指定的时间量,线程进入就绪状态。
q ● wait(long timeout, int nanos):导致当前的线程在指定时间(timeout 毫秒,nanos 纳秒)内等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过指定时间量,线程进入就绪状态。
2.equals()方法
equals()方法用于测试某个对象是否同另一个对象相等,它在Object类中的实现是判断两个对象是否指向同一块内存区域。这种测试用处不大,因为即使内容相同的对象,内存区域也是不同的。如果想测试对象是否相等,就需要覆盖此方法,进行更有意义的比较。示例代码如下:
class Employee{
public boolean equals(Object otherObj){
//快速测试是否是同一个对象
if(this == otherObj) return true;
//如果显式参数为null,必须返回false
if(otherObj == null) reutrn false;
//如果类不匹配,就不可能相等
if(getClass() != otherObj.getClass()) return false;
//现在已经知道otherObj是个非空的Employee对象
Employee other = (Employee)otherObj;
//测试所有的字段是否相等
return name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
}
}
Java语言规范要求equals()方法具有如下所示的特点。
q ● 自反性:对于任何非空引用值x,x.equals(x)都应返回true。
q ● 对称性:对于任何非空引用值x和y,当且仅当y.equals(x)返回true 时,x.equals(y)才应返回true。
q ● 传递性:对于任何非空引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true。
q ● 一致性:对于任何非空引用值x和y,多次调用x.equals(y)始终返回true,或者始终返回false,前提是equals比较中所用的信息没有被修改。
说明:对于任何非空引用值x,x.equals(null)都应返回false。从这里看出,上面的例子是Java equals()方法的标准实现。
3.toString()方法
toString()方法返回该对象的字符串表示。Object类中的toString()方法会打印出类名和对象的内存位置。几乎每个类都会覆盖该方法,以便打印对该类的对象当前状态的表示。大多数(非全部)toString()方法都遵循如下格式:类名[字段名=值,字段名=值...]。当然,子类应该定义自己的toString()方法。例如:
public String toString(){
reurn "Employee[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]";
}
toString()方法是非常重要的调试工具,很多标准类库中的类都定义了toString()方法,以便程序员获得有用的调试信息。
4.hashCode()方法
每个类都可以覆盖Object类中的hashCode()方法。Object类中的hashCode()方法就是简单地将对象在内存中的地址转换成int类型并返回。这样,如果一个类没有覆盖hashCode()方法,那么它的hashCode()方法就是简单地返回对象在内存中的地址。
注意:在JDK中,对hashCode()方法也定义了一系列约束,其中有一条就是如果两个对象是“equal”的,那么它们的hashCode()方法返回的整数值必须相同;如果两个对象是“unequal”,那么它们的hashCode()方法的返回值不一定必须不同。正因为这个约束,如果重写了equals()方法,一般也要重写hashCode()方法。
很明显,面试例题1的返回值为int类。
答案:(b)。
面试例题2:Object类的clone()方法可以抛出哪个异常?
请从下面选项中选择正确的答案。
(a)CloneNotSupportedException。
(b)NotCloneableException。
(c)IllegalCloneException。
(d)NoClonesAllowedException。
考点:考查求职者对Object类的掌握。
出现频率:★★★★
解析
如果对象的类没有实现Cloneable接口,Object类的clone()方法就会抛出CloneNotSupportedException异常。
答案:(a)。
面试例题3:下面说法哪些是正确的?
请从下面的选项中选择正确的答案。
(a)如果引用x和引用y表示2个不同的对象,那么表达式x.equals(y)始终为false。
(b)如果引用x和引用y表示2个不同的对象,那么表达式(x.hasCode()==y.hasCode())始终为false。
(c)Object类中的hasCode()方法被声明为final。
(d)Object类中的equals()方法被声明为final。
(e)所有数组都有一个clone()方法。
考点:考查求职者对Object类的掌握。
出现频率:★★★★
解析
在Object类中,hasCode()和equals()都没有声明为final,不能保证这些方法能够区分所有的对象,所以(a)、(b)、(c)、(d)都是错误的。
数组是一个对象,继承了Object类,有clone()方法。
答案:(e)。
10.1.2 数字计算Math类
Math类是一个声明为final的类,该类提供了一组静态方法,提供了常见的数字计算功能,包括取整函数、三角函数、生成随机函数、求最大值最小值等。Math不能被实例化,只能使用类名来调用静态方法。
面试例题4:Math.abs(10,4)函数返回下面哪个值?
调用Math.abs(10,4)函数返回下面哪个值?
(a)10.0。
(b)10.4。
(c)11.0。
(d)-10.4。
考点:考查求职者对于Java数字计算Math类的方法函数的掌握。
出现频率:★★★★★
解析
数学类包含了许多数学函数,如sin()、cos()、exp()、abs()等。Math类是一个工具类,它在解决与数学有关的问题时有着非常重要的作用。
这个类有两个静态属性:E和PI。E代表数学中的e(2.7182818),而PI代表派pi (3.1415926)。引用时分别为Math.E和Math.PI。
Math类的常用API如下。
q ● static double abs(double a):返回double值的绝对值。
q ● static float abs(float a):返回float值的绝对值。
q ● static int abs(int a):返回int值的绝对值。
q ● static long abs(long a):返回long值的绝对值。
q ● static double acos(double a):返回角的反余弦,范围在0.0~pi之间。
q ● static double asin(double a):返回角的反正弦,范围在-pi/2~pi/2之间。
q ● static double atan(double a):返回角的反正切,范围在-pi/2~pi/2之间。
q ● static double atan2(double y, double x):将矩形坐标(x, y)转换成极坐标(r, theta)。
q ● static double cbrt(double a):返回double值的立方根。
q ● static double ceil(double a):返回最小的(最接近负无穷大)double值,该值大于或等于参数,并且等于某个整数。
q ● static double cos(double a):返回某角度的三角余弦。
q ● static double cosh(double x):返回double值的双曲线余弦。
q ● static double exp(double a):返回欧拉数e的double次幂的值。
q ● static double expm1(double x):返回exp(double x)-1的值。
q ● static double floor(double a):返回最大的(最接近正无穷大)double值,该值小于或等于参数,并且等于某个整数。
q ● static double hypot(double x, double y):返回sqrt(x2 +y2),没有中间溢出或下溢。
q ● static double IEEEremainder(double f1,double f2):按照IEEE 754 标准的规定,对两个参数进行余数运算。
q ● static double log(double a):返回double 值的自然对数(底数是e)。
q ● static double log10(double a):返回 double 值的底数为 10 的对数。
q ● static double log1p(double x):返回参数与 1 的和的自然对数。
q ● static double max(double a, double b):返回两个 double 值中较大的一个。
q ● static float max(float a, float b):返回两个 float 值中较大的一个。
q ● static int max(int a, int b):返回两个 int 值中较大的一个。
q ● static long max(long a, long b):返回两个 long 值中较大的一个。
q ● static double min(double a, double b):返回两个 double 值中较小的一个。
q ● static float min(float a, float b):返回两个 float 值中较小的一个。
q ● static int min(int a, int b):返回两个 int 值中较小的一个。
q ● static long min(long a, long b):返回两个 long 值中较小的一个。
q ● static double pow(double a, double b):返回第1个参数的第2个参数次幂的值。
q ● static double random():返回带正号的 double 值,大于或等于 0.0,小于 1.0。
q ● static double rint(double a):返回其值最接近参数并且是整数的 double 值。
q ● static long round(double a):返回最接近参数的 long值。
q ● static int round(float a):返回最接近参数的 int值。
q ● static double signum(double d):返回参数的符号函数;如果参数是零,则返回零;如果参数大于零,则返回 1.0;如果参数小于零,则返回 -1.0。
q ● static float signum(float f):返回参数的符号函数;如果参数是零,则返回零;如果参数大于零,则返回 1.0;如果参数小于零,则返回 -1.0。
q ● static double sin(double a):返回某角度的三角正弦。
q ● static double sinh(double x):返回 double 值的双曲线正弦。
qstatic double sqrt(double a):返回四舍五入的 double 值的正平方根。
q ● static double tan(double a):返回某角度的三角正切。
q ● static double tanh(double x):返回 double 值的双曲线余弦。
q ● static double toDegrees(double angrad):将用弧度测量的角转换为近似相等的用度数测量的角。
q ● static double toRadians(double angdeg):将用度数测量的角转换为近似相等的用弧度测量的角。
q ● static double ulp(double d):返回参数的ulp大小。
q ● static float ulp(float f):返回参数的ulp大小。
面试例题4是求绝对值,10.4的绝对值就是10.4。
答案:(b)。
面试例题5:下面程序代码哪些部分能够打印出11?
public class MyClass {
public static void main(String[] args) {
double v = 10.5;
System.out.println(Math.ceil(v));// (1)
System.out.println(Math.round(v));// (2)
System.out.println(Math.floor(v));// (3)
System.out.println((int) Math.ceil(v));// (4)
System.out.println((int) Math.floor(v));// (5)
}
}
请选择正确的答案。
(a)标记为(1)处的代码。
(b)标记为(2)处的代码。
(c)标记为(3)处的代码。
(d)标记为(4)处的代码。
(e)标记为(5)处的代码。
考点:考查求职者对于Java数字计算Math类的方法函数的掌握。
出现频率:★★★★
解析
标记为(2)和(4)的行将会正确打印出11,因为它们的表达式会返回整数型值11,表达式Math.ceil(v)将返回双精度值11.0,打印出来也是11.0,表达式Math.floor(v)将返回10.0d。
答案:(b)(d)。
面试例题6:Math. ceil(-5.5)返回值是哪个?
请从下面选项中选择Math. ceil(-5.5)的返回值。
(a)-6.0。
(b)-5.0。
(c)-5.5。
(d)-4.0。
考点:考查求职者对于Java数字计算Math类的方法函数的掌握。
出现频率:★★★★
解析
ceil()方法的含义是返回最小的(最接近负无穷大的)double值,该值大于或等于参数,并且等于某个整数。正确答案为-5.0。
答案:(b)。
10.1.3 最常用的String类
面试例题7:下面哪些运算符不能用于合并字符串对象?
请从下面选项中选择不能用于合并字符串对象的运算符。
(a)+
(b)-
(c)+=
(d).
(e)&
考点:考查求职者对Java的String类的掌握。
出现频率:★★★★★
解析
Java开发中, String类使用相当频繁,Java的String是类而不是原始数据类型,这一点应当时刻注意。String类的常用方法如下。
1.String (char a[])
下面示例用一个字符数组a创建一个字符串对象,代码如下:
char a[]={¢b¢,¢o¢,¢y¢};
String s=new String(a);
上述过程相当于“String s= "boy";”。
2.String(char a[],int startIndex,int count)
提取字符数组a 中的一部分字符创建一个字符串对象,参数startIndex 和count 分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数,例如:
char a[]={¢s¢,¢t¢,¢b¢,¢u¢,¢s¢,¢¢n¢};
String s=new String(a,2,3);
上述过程相当于 String s= "bus";
3.equals()方法
与equals()方法类似,equalsIgnoreCase()方法忽略大小写。字符串对象调用String类中的public boolean equals(String s)方法比较当前字符串对象的实体是否与参数指定的字符串s的实体相同。示例代码如下:
String tom=new String( "we are students");
String boy=new String( "We are students");
String jerry= new String("we are students");
tom.equals(boy)的值是false。
tom.equals(jerry)的值是 true。
4.startsWith()和endsWith()方法
startsWith()和endsWith()方法用于判断字符串是否以指定字符串作为开头或者是结尾,返回值为布尔类型。示例代码如下:
String tom= "220302620629021";
jerry= "21079670924022";
tom.startsWith("220")的值是true。
jerry.startsWith("220")的值是false。
5.regionMatches()方法
字符串调用public boolean regionMatches(int firstStart,String other,int ortherStart,int length)方法,从当前字符串参数firstStart指定的位置处开始,取长度为length的一个子串,并将这个子串和参数other指定的一个子串进行比较,其中,other指定的子串是从参数othertStart指定的位置开始,从other中取长度为length的一个子串。如果两个子串相同,该方法就返回true,否则返回false。该方法存在重载方法:
public boolean regionMatches(boolean b,int firstStart,String other,int ortherStart,intlength)
可以通过参数b决定是否忽略大小写,当b取true时,忽略大小写。
6.compareTo()和compareToIgnoreCase()方法
字符串对象可以使用String类中的compareTo()方法,按词典顺序与参数s指定的字符串比较大小。
如果当前字符串与s相同,该方法返回值0;如果当前字符串对象大于s,该方法返回正值;如果小于s,该方法返回负值。
7.indexOf ()方法
字符串调用public int indexOf(String s)方法从当前字符串的头开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法的返回值是-1。
字符串调用public int indexOf(String s ,int startpoint)方法从当前字符串的startpoint位置处开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。
字符串调用public int lastIndexOf (String s)方法从当前字符串的头开始检索字符串s,返回最后出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。
字符串调用public int lastIndexOf(String s ,int startpoint)方法从当前字符串的startpoint位置处开始检索字符串s,并返回最后出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。
8.substring()方法
字符串对象调用public String substring(int startpoint)方法获得一个当前字符串的子串,该子串是从当前字符串的startpoint处截取到最后所得到的字符串。
字符串对象调用public String substring(int start ,int end)方法获得一个当前字符串的子串,该子串是从当前字符串的start处截取到end处所得到的字符串,但不包括end处所对应的字符。
9.replace()方法
字符串对象调用public String replace(char oldChar,char newChar)方法可以获得一个新字符串对象,这个对象是用参数newChar指定的字符替换原字符串中由oldChar指定的所有字符而得到的字符串。
字符串对象调用 public String replaceAll(String old ,String new)方法可以获得一个新字符串对象,这个对象是通过用参数new指定的字符串替换原字符串中由old指定的所有字符串而得到的字符串。
字符串通过调用Public String trim()方法得到一个新的字符串对象,该字符串对象是去掉前后空格后的字符串。
10.整型转化
java.lang包中的Integer类调用public static int parseInt(String s)方法可以将“数字”格式的字符串转化为int型数据。示例如下:
int x;
String s="6542";
x=Integer.parseInt("6542");
类似地,使用java.lang包中的Byte、Short、Long类可以调用相应的类方法,将“数字”格式的字符串转换为相应的基本数据类型。类方法如下所示:
public static byte parseByte(String s)
public static short parseShort(String s)
public static long parseLong(String s)
11.float型或double型转化
java.lang包中的Float类调用其类方法public static int parseFloat (String s)可以将 “数字”格式的字符串转化为float型数据。代码如下:
float n=Float.parseFloat("12387.8976")
或:
String s= new String(“12387.8976”);
float n=Float.parseFloat(s)
12. StringvalueOf()方法
转换其他类型为字符串的函数,使用方法如下:
public StringvalueOf( byte n)
public StringvalueOf (int n)
public StringvalueOf (long n)
public StringvalueOf (float n)
public StringvalueOf (double n)
示例如下:
String str=String.valueOf(12313.9876);
float x=123.987f;
String temp=String.valueOf(x);
13.将字符串中的字符复制到字符数组
字符串调用public void getChars(int start,int end,char c[],int offset )方法将前字符串中从位置start到end-1位置上的字符复制的数组c中,并从数组c的offset处开始存放这些字符。需要注意的是,必须保证数组c能容纳下要被复制的字符。
面试例题7中,运算符-和&不能处理String对象, +和+=可以用来进行字符串串联。
答案:(b)(e)。
面试例题8:如何提取字符串?
为了提取字符串String str=“helloworld”中的“llo”子字符串,下面哪个表达式是正确的?请选择正确的答案。
(a)str.substring(2,2)
(b)str.substring(2,3)
(c)str.substring(2,4)
(d)str.substring(2,5)
(e)str.substring(3,3)
考点:考查求职者对Java的String类的掌握。
出现频率:★★★★
解析
字符串对象调用public String substring(int start ,int end)方法获得一个当前字符串的子串,该子串是从当前字符串的start处截取到end处所得到的字符串,但不包括end处所对应的字符。
根据以上的定义,可以知道str.substring(2,5)将提取“llo”子字符串。
答案:(d)。
面试例题9:String类的trim()方法有什么作用?
请选择正确的答案。
(a)trim()方法将移除原字符串开始位置的空白字符,并返回移除后的字符串。
(b)trim()方法将移除原字符串结尾的空白字符,并返回移除后的字符串。
(c) trim()方法将移除原字符串开始位置和结尾位置的空白字符,并返回移除后的字符串。
(d)trim()方法将移除原字符串所有的空白字符,并返回移除后的字符串。
(e)以上都不是。
考点:考查求职者对Java的String类的掌握。
出现频率:★★★★
解析
String类的trim()方法的作用就是返回一个字符串,该字符串将原来字符串的头尾空白部分去掉。
答案:(c)。
面试例题10:String类的concat方法
编译并运行下面的程序,其结果是什么?
public class MyClass {
public static void main(String[] args) {
String str1 = "str1";
String str2 = "str2";
String str3 = "str3";
str1.concat(str2);
System.out.println(str3.concat(str1));
}
}
请选择正确的答案。
(a)代码不能通过编译,因为表达式str3.concat(str1)不是println()函数的合法参数。
(b)程序在运行时将会打印str3str1str2。
(c)程序在运行时将会打印str3。
(d)程序在运行时将会打印str3str1。
(e)程序在运行时将会打印str3str2。
考点:考查求职者对Java的String类的掌握。
出现频率:★★★★
解析
String类的concat()方法的作用就是将当前的String对象和参数的String对象串联起来,并返回一个新的字符串对象。
面试例题10中虽然使用了str1.concat(str2),但是并没有改变对象的引用,所以输出的字符串就是str3.concat(str1),即“str3str1”。
答案:(d)。
面试例题11:下面哪些表达式是非法的?
请从下面选项中选择3个非法表达式。
(a)"hel".concat("lo");
(b)("hel"+"lo");
(c)('h'+'e'+'l'+'l'+'o');
(d)("hel"+new String('l'+'o'));
(e)"hel"+new String("lo");
考点:考查求职者对Java的String类的掌握。
出现频率:★★★★
解析
(a)是合法的,“hel”就是一个String对象;(b)是非法的,因为表达式是不完整的;(c)和(d)是非法的,(c)的错误之处同(b)是一样的;(d)是错误的,因为'l'+'o'是1个int类型值;(e)表达式是正确的。
答案:(b)(c)(d)。
面试例题12:下面哪个表达式结果为true?
请选择运行结果为true的表达式。
(a)"hello:world!".equals("hello world");
(b)"HELLO WORLD".equals("hello world");
(c)("hello".concat("world")).equals("hello world");
(d)"Hello World".compareTo("hello world") == 0;
(e)"Hello World".toLowerCase().equals("hello world");
考点:考查求职者对Java的String类的掌握。
出现频率:★★★
解析
String类中的public boolean equals(String s)方法比较当前字符串对象的实体是否与参数指定的字符串s的实体相同,如果相同,则返回true。
面试例题12的几个表达式中,只有(e)可以返回true。
答案:(e)。
面试例题13:String对象的length方法的使用。
编译并运行下面的程序,结果是什么?
public class MyClass {
public static void main(String[] args) {
String s = "Java 你好";
System.out.println(s.length);
}
}
请选择正确答案:
(a)9
(b)7
(c)11
(d)编译错误
考点:考查求职者对Java的String类的掌握。
出现频率:★★★
解析
面试例题13的考查点并不是String对象含有汉字的问题,而是String对象的length()方法的使用。与数组不同,String对象成员方法length()来返回字符串长度。
值得注意的是,使用length()方法时,1个汉字字符算1个长度,因为Java使用的是Unicode编码。
答案:(d)。
10.1.4 容易混淆的StringBuffer类
面试例题14:理解StringBuffer类。
编译并运行下面程序,结果是什么?
public class MyClass {
public static void main(String[] args) {
String s = "hello";
StringBuffer sb = new StringBuffer(s);
sb.reverse();
if (s == sb)
System.out.println("a");
if (s.equals(sb))
System.out.println("b");
if (sb.equals(s))
System.out.println("c");
}
}
请选择正确的答案。
(a)代码不能正确编译,因为没有正确调用String类的构造函数。
(b)代码不能正确编译,因为表达式s==sb是非法的。
(c)代码不能正确编译,因为表达式s.equals(sb)是非法的。
(d)运行时打印c。
(e)运行时打印b。
考点:考查求职者对于Java的StringBuffer类的理解和掌握。
出现频率:★★★★
解析
StringBuffer字符串缓冲区实现可变字符序列。字符串缓冲区可以被多个线程安全地使用。这些方法在需要的时侯可以同步执行,因而任一特定实例的所有操作就好像是以串行的次序发生。
字符串缓冲区中连接两个字符串使用+运算符。示例代码如下:
x = "a" + 4 + "c"
被等价编译成如下代码:
x = new StringBuffer().append("a").append(4).append("c").toString()
StringBuffer的基本操作是append()和insert()方法,它们都被重载以接受任意类型的数据。每个方法都迅速地把所给的数据转换成一个字符串,并且把该字符串的字符添加或插入到字符串缓冲区中。append()方法常常把这些字符添加到缓冲区的末端,而insert()方法则把这些字符添加到指定的地方。
例如,如果z指的是一个字符串缓冲区内的对象,当前的内容是“start”,通过调用方法z.append("le")会使字符串缓冲区的内容变成"startle",调用z.insert(4, "le")将使缓冲区的内容变成"starlet"。
每一个字符串缓冲区都有一定的容量。只要字符串缓冲区存储的字符序列的长度没有超过它的容量,就无须申请新的内部缓冲数组。如果内部的缓冲区溢出,它将自动加以扩大。
1.构造器
q ● StringBuffer():构造一个不包含字符的字符串缓冲区,其初始的容量设为16个字符。
q ● StringBuffer(int length):构造一个不包含字符的字符串缓冲区,其初始容量由参数length设定。
q ● StringBuffer(String s):构造一个字符串缓冲区,使它表示和字符串参数相同的字符序列。
2.常见方法
q ● append(boolean b):把boolean型参数的字符串表示添加到字符串缓冲区。
q ● append(char c):把char型参数的字符串表示添加到字符串缓冲区。
q ● append(char[] str):把char型数组参数的字符串表示添加到字符串缓冲区。
q ● append(char[] str,int i,int i):把char型数组参数的子数组的字符串表示添加到字符串缓冲区。
q ● append(double d):把double型参数的字符串表示添加到该字符串缓冲区。
q ● append(float f):把float型参数的字符串表示添加到该字符串缓冲区。
q ● append(int i):把int型参数的字符串表示添加到该字符串缓冲区。
q ● append(long l):把long型参数的字符串表示添加到该字符串缓冲区。
q ● append(Object obj):把Object型参数的字符串表示添加到该字符串缓冲区。
q ● append(String str):添加字符串到字符串缓冲区。
q ● capacity():返回字符串缓冲区的当前容量。
q ● charAt(int i):返回字符串缓冲区中特定位置的字符。
q ● ensureCapacity(int i):保证缓冲区的容量至少等于指定的最小数。
q ● getChars(int i,int j,char[] str,int k):把字符从字符串缓冲区复制到目标字符数组dst。
q ● insert(int i,boolean b):把boolean型参数的字符串表示添加到该字符串缓冲区。
q ● insert(int i,char c):把char型参数的字符串表示添加到该字符串缓冲区。
q ● insert(int i,char[] str):把char型数组参数的字符串表示添加到该字符串缓冲区。
q ● insert(int i,double d):把double型参数的字符串表示添加到该字符串缓冲区。
q ● insert(int i,float f):把float型参数的字符串表示添加到该字符串缓冲区。
q ● insert(int i,int j):把第2个int型参数表示的字符串插入到该字符串缓冲区。
q ● insert(int i,long l):把long型参数的字符串表示插入到该字符串缓冲区。
q ● insert(int i,Object obj):把Object型参数的字符串表示插入到该字符串缓冲区。
q ● insert(int i,String s):把字符串插入到字符串缓冲区。
q ● length():返回字符串缓冲区的长度(字符数)。
q ● reverse():把字符串缓冲区的字符序列用其反向字符序列替换。
q ● setCharAt(int i,char c):字符串缓冲区指定位置的字符设置为ch。
q ● setLength(int i):设置字符串缓冲区的长度。
q ● toString():把字符串缓冲区的数据转换为字符串表示。
3.String同StringBuffer的区别
字符串的操作和存储,Java语言提供了String和StringBuffer类来处理。那么这两个类有什么区别呢?
String类提供了数值不可变的字符串,String类的对象一旦创建之后,它的所有属性都是final类型的,也就是说一旦创建后,就不能修改。StringBuffer则是可变的。这是两者之间最大的区别。示例如下:
package ch10;
public class MyClass {
public static void stringReplace(String textString) {
textString = textString.replace('j', 'i');
}
public static void bufferReplace(StringBuffer text) {
text = text.append("C");
}
public static void main(String args[]) {
String textString = new String("java");
StringBuffer textBuffer = new StringBuffer("java");
stringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString + textBuffer);
}
}
运行该程序代码,结果如下:
javajavaC
读者会疑惑为什么没有打印“iavajavaC”,是因为String对象一旦创建后就不能修改,append方法会改变textString中的值,而text与textBuffer指向的地址是相同的,因此会打印javaC。
面试例题14中,(b)是非法的,因为s==sb对比了两个不同的类。
答案:(b)。
面试例题15:setLength()方法。
编译并运行下面程序,结果是什么?
public class MyClass {
public static void main(String args[]) {
StringBuffer sb = new StringBuffer("hello world!");
sb.setLength(5);
System.out.println(sb);
}
}
请选择正确的答案。
(a)不能编译,因为StringBuffer类中没有setLength()方法。
(b)不能编译,因为StringBuffer不是println()方法的合法参数。
(c)在运行时会抛出1个异常。
(d)将会打印hello world。
(e)将会打印hello。
(f)将会打印hellow。
考点:考查求职者对于Java的StringBuffer类的setLength方法理解和掌握。
出现频率:★★★★
解析
setLength()方法会将sb截短到5个字符,sb变成了“hello ”,所以将会在控制台中打印出hello字样。
答案:(e)。
面试例题16:哪些参数列表具有相应的StringBuffer类构造函数?
请选择正确的答案。
(a)()
(b)( int capacity)
(c)( char[] data)
(d)(String str)
考点:考查求职者对于Java的StringBuffer类的构造器理解和掌握。
出现频率:★★★★
解析
StringBuffer类的构造器没有将字符数组作为构造参数来使用。
答案:(a)(b)(d)。
面试例题17:哪个方法不是StringBuffer定义的?
请选择一个正确的答案。
(a)trim()
(b)length()
(c)append(String)
(d)reverse()
(e)setLength(int)
考点:考查求职者对于Java的StringBuffer类理解和掌握。
出现频率:★★★
解析
trim()方法是String中定义的,在StringBuffer并没有。
答案:(a)。
相关推荐
在Java开发过程中,我们经常会遇到`java.lang.NoClassDefFoundError`这个异常,尤其是在进行JDK版本升级时。这个错误通常表示在运行时找不到某个类的定义,即使编译时该类是可用的。在本例中,问题发生在从一个较低...
java.lang.NoClassDefFoundError: de/javakaffee/kryoserializers/CurrencySerializer
标题 "java.lang.NoClassDefFoundError: javax/persistence/EntityListener" 提到的问题是一个常见的Java运行时异常,通常表示在类加载时找不到指定的类定义。这个错误在Java应用程序或Web应用中出现,可能是因为...
jdk升级jdk10后,原本jdk自带的 webservice一些包确实,引起的一系列错误解决方案
java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport异常处理
java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 要在java里使用json用到的jar包怎么导入...
JavaMail的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误 原因: MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突。 解决: 在MyEclipse目录下(D:\Program Files\MyEclipse ...
标题中的“JSON中,java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决”指的是一类常见的Java运行时错误,当尝试加载一个类时,如果Java虚拟机(JVM)找不到该类的定义,就会抛出`...
jackson-annotations-2.10.2.jar jackson-core-2.10.2.jar jackson-databind-2.10.2.jar NoClassDefFoundError解决
### java.lang.UnsupportedClassVersionError问题解析与解决方案 在Java开发过程中,经常会在部署或运行时遇到`java.lang.UnsupportedClassVersionError`错误。该错误通常发生在类文件版本与JVM(Java虚拟机)版本...
在Java编程中,`java.lang.NoClassDefFoundError` 是一个常见的运行时错误,它发生在类加载器尝试执行一个类,但在类路径中找不到该类的定义时。在这个特定的场景中,问题聚焦于 `net.sf.ezmorph.Morpher` 类。`...
maven-resources-production java.lang.NegativeArraySizeException java.lang.NegativeArraySizeException 问题解决
该jar包解决报错java.lang.NoClassDefFoundError: org/apache/james/mime4j/MimeException,亲测可用。
如果不关联这些包,则会出现以下错误:java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap java.lang....
idea启动项目报错 java.lang.NegativeArraySizeException解决方法
解决方法如下: 把以前的eclipse版本,我这里用的是3.3版本 在plugins org.eclipse.ui.workbench_3.3.1.M20070921-1200.jar下 打到org/eclipse/ui/internal/util/SWTResourceUtil.class 用winrar打开,同时也...
### java.lang.UnsupportedClassVersionError问题的解决方法 在开发Java应用程序的过程中,经常会遇到与JDK版本不兼容的问题,其中一种常见的异常就是`java.lang.UnsupportedClassVersionError`。该错误通常发生在...
commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....
org.bouncycastle.openssl.PEMException: problem parsing ENCRYPTED PRIVATE KEY: java.lang.SecurityException: JCE cannot authenticate the provider BC at org.bouncycastle.openssl.PEMReader$...