《Java经典入门指南》课后习题及答案Chapter5
1.当我们说String是不可变的对象时,这是什么意思?
answer:String对象是常量,一旦创建,它们的值就不能更改。因此,String实例被称为不可变的(immutable)。
2.如果没有Scanner,读者是如何接收用户输入的?又如何使用Scanner实现呢?
answer:
【如果没有Scanner,读者是如何接收用户输入的】System类的3个字段是out、in和err:public static final
java.io.PrintStream out;
public static final java.io.InputStream in;
public static final java.io.PrintStream err;
in字段表示标准输入流,使用它可以接收键盘输入。
【如何用scanner实现】在创建Scanner实例时为其传递一个System.in;然后,要接收用户输入,调用实例的next方法,next方法用于缓冲用户从键盘或其他设备输入的字符,直到用户按回车键;最后,它返回一个包含用户输入的字符的String,但不包括回车符。
3.什么是可变参数?
answer:
可变参数方法(Varargs)是Java的一个特性,它允许方法带有可变长度的参数列表。也就是说用户若是想定义一个方法,但是在此之前并不知道以后要用的时候想传几个参数进去,可以在方法的参数列表中写参数类型或者数组名,然后在方法内部直接用操作数组的方式操作。
4.创建一个com.example.Car类,它包含3个私有字段:year (int)、make (String)和model (String)。通过只提供get方法的方式使Car不可变。字段值通过向构造方法传递值来设置。
answer:
ackage com.example;
public class Car {
private int year;
private String make;
private String model;
public Car(int year,String make,String model){
this.year=year;
this.make=make;
this.model=model;
}
public int getYear(){
return year;
}
public String getMake(){
return make;
}
public String getModel(){
return model;
}
}
5.创建一个com.example.test.CarTest类,实例化Car并通过调用get方法打印其字段值。
answer:
package com.example.test;
import com.example.Car;
public class CarTest {
public static void main(String[] args) {
Car car=new Car(8,"中国","X85");
System.out.println("car的year、make、model信息分别为"+car.getYear()+"、"+car.getMake()+"、"+car.getModel());
}
}
6.在com.example.util包中创建一个名为StringUtil的实用工具/辅助类。这个类应该有两个static方法:getFileName和getFileExtension,分别接收一个文件路径并返回一个文件名或文件扩展名。创建一个com.example.test.StringUtilTest类来测试这些方法。
StringUtil的实用工具/辅助类代码:
answer:import java.io.File;
public class StringUtil {
public static void getFileName() {
String path = "D:\\法考笔记20200203\\"; //依据本地储存的实际情况输入一个文件地址。
File[] fArray = new File(path).listFiles(); //形成一个文件地址创建的数组。
if (fArray != null) {
File f = fArray[0];//取文件夹中的第一个文件,即数组中的第一个数
if (f != null) {
String fName = f.getName();//获取文件的名字。
String fName1=fName.substring(0,fName.lastIndexOf("."));
System.out.println(fName1);
}
f = null;
fArray = null;
}
}
public static void getFileExtension() {
String path = "D:\\法考笔记20200203\\";
File[] fArray = new File(path).listFiles();
if (fArray != null) {
File f = fArray[0];
if (f != null) {
String fName = f.getName();
String fName1Extension=fName.substring(fName.lastIndexOf("."),fName.length());
System.out.println(fName1Extension);
}
f = null;
fArray = null;
}
}
测试类代码:
package com.example.test;
import com.example.util.StringUtil;
public class StringUtilTest {
public static void main(String[] args) {
StringUtil.getFileName();
StringUtil.getFileExtension();
}
}
7.演示如何使用String.split()打印字符串中的令牌数量和每个令牌。String.split()与java.util.StringTokenizer相比如何?
answer:【暂时空缺、待更新】
8.什么是字符串驻留(string interning)?
answer:
语句1:String s = “Java is cool”;
语句2:String message = new String(“Java is cool”);
语句1和语句2中,语句2使用new关键字,JVM将始终创建一个新的String实例。语句1使用字符串字面值,将得到一个相同的String对象,这个对象并不总是新的。如果之前创建过字符串“Java is cool”,那么这个对象可能来自一个内存池,其中只存储了每个字符串值的唯一副本,这种技术称为字符串驻留(string interning)。