提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
温故而知新
所需工具
1.String 是最基本的数据类型吗,能继承吗?
注:八大数据基本类型
整数型:int short 短整型 long长整型: byte
浮点型:double(双精度浮点型),float(单精度浮点型)
字符型:char 布尔型:boolean
不是,java.lang.String 类是 final 类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用 StringBuffer 类
2.String s = "Hello";s = s + " world!";这两行代码执行后,原始的 String 对象中的内容到底变了没有?
没有。因为 String 被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。
代码片段:
代码如下(示例):
package zhangze.com;
public class Demo {
public static void main(String[] args) {
String s="hello";
System.out.println(s);
s+="world";
System.out.println(s);
}
}
2.String s = new String("zhangze");创建了几个 String Object? 二者之间有什么区 别? zhangze 是字面
两个,一个放在常量区,不管写多少遍,都是同一个。New String 每写一遍,就创建一个新
代码如下(示例):
//两个对象但是值相同所有是3个对象
String a=new ("zhangze");
String b=new ("zhangze");
//两个对象和值都不相同所有是4个对象
String a=new ("zhangze");
String b=new ("zhangsan");
3.String 和 StringBuffer 的区别
简述:
String 与 StringBuffer的区别 简单地说,就是一个变量 和 常量 的 关系。 StringBuffer 对象的内容可以修改,而 String 对象一旦产生后就不可以被修改,重新赋值其实是两个对象。
Stringbuffer效率更高
例如:
//从0-100 再加上"a"需要新建101个对象
String q="a";
for(int a=0;a<100;a++){
s+=a;
}
//只需两个对象
Stringbuffer w=new Stringbuffer
for(int a=0;a<100;a++){
s.append(a);
}
StringBuffer对象是一个长度可变的对象,当对StringBuffer的进行增加或删除时,不需要new一个对象,可以动态地修改堆内存。
StringBuffer提供了append方法,在字符串的末尾进行添加。实际上,String类进行 '+' 运算,就是创建了一个StringBuffer对象,然后调用append进行添加,最后调用toString把StringBuffer转化为String。
所以,String的效率绝对不如StringBuffer了。
4.try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());
;
}
static int test() {
int a = 1;
try {
return a;//获取结果,断点 走完finally (有finally必然执行)
} finally {
System.out.println(++a);//恢复断点 返回结果
}
}
}
结果为
2
1
5.final, finally, finalize 的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 内部类要访问局部变量,局部变量必须定义成 final 类型,例如,一段代码……
finally 是异常处理语句结构的一部分,表示总是执行。
//析构函数
finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回 收,例如关闭文件等。JVM 不保证此方法总被调用
6.运行时异常与一般异常有何异同?
运行时表示代码跑起来了(运行中)出现异常
一般异常为未运行的自助提示(代码报红)