day02
1、下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
输出b3会出现"可能损失精度",因为byte类型的b1加上byte类型的b2,会自动转换为int类型,用byte接收是不行的,要用int接收或者long啊这些的。
day03
2、 short s1 = 1;
s1 = s1 + 1;
short s2 = 1;
s2 += 1;
请问上面的代码哪个有问题?
第一个有问题,md还是一样的道理,可能损失精度,需要注意的是s2之所以可以执行,是因为他隐含了自动强制转换哦。
day04
3、switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
可以
不可以
JDK7以后可以
day08
4、 A:Override和Overload的区别?Overload是否可以改变返回值类型?
override是重写的意思,方法重写也称方法覆盖,是指方法名和参数个数以及类型(包括返回值类型)都相同,子类继承自父类可以重写方法,也可以不重写。
overload是重载的意思,方法重载是指方法名相同,但具有不同的参数个数和参数类型(还有返回值类型),体现了多态性;
B:this和super的区别和各自的作用?
this是指当前类的对象,而super是指当前类的父类的对象。
day09
5、A:局部变量
a:基本类型 值不能发生改变
b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的
B:初始化时机
a:只能初始化一次。
b:常见的给值
定义的时候。(推荐)
构造方法中。
day10
6、填空
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public viod show() {
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
}
//30 //20 //10
7、不齐代码
匿名内部类的面试题(补齐代码)
interface Inter {
void show();
}
class Outer {
//补齐代码
public static Inter method() {
return new Inter() {
public void show() {
System.out.println("HelloWorld");
}
};
}
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show(); //"HelloWorld"
}
}
day11
8、==和equals()的区别?
A:==
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
B:equals()
只能比较引用类型。默认情况下,比较的是地址值是否相同。
但是,我们可以根据自己的需要重写该方法。
day12
9、字符串的面试题(看程序写结果)
A:==和equals()
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);
// false
System.out.println(s1.equals(s2));
// true,String类已经重写了equals()方法
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4);
// false
System.out.println(s3.equals(s4));
// true
String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6);
// true
System.out.println(s5.equals(s6));
// true
B:字符串的拼接
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2);
// false
System.out.println(s3.equals((s1 + s2)));
// true
System.out.println(s3 == "hello" + "world");
// false 这个我们错了,应该是true
//字符串直接赋值的方式是先到字符串常量池里面去找,如果有就返回,没有,就创建并返回
System.out.println(s3.equals("hello" + "world"));
// true
day13
10、A:String,StringBuffer,StringBuilder的区别?
String长度是不可变的,StringBuffer和StringBuilder的长度是可变的
StringBuffer:同步的,数据安全,效率低。
StringBuilder:不同步的,数据不安全,效率高。
B:StringBuffer和数组的区别?
数组String的长度是不可变的,而StringBuffer的长度是可变的。
day14
11、-128到127之间的数据缓冲池问题
public class IntegerDemo {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);
//false
System.out.println(i1.equals(i2));
//true
System.out.println("-----------");
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);
//false
System.out.println(i3.equals(i4));
//true
System.out.println("-----------");
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);
//false
System.out.println(i5.equals(i6));
//true
System.out.println("-----------");
Integer i7 = 127;
Integer i8 = 127;
System.out.println(i7 == i8);
//true
System.out.println(i7.equals(i8));
//true
// 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间
// Integer ii = Integer.valueOf(127);
}
}
day19
12、A:编译期异常和运行期异常的区别?
编译期异常 必须要处理的,否则编译不通过
运行期异常 可以不处理,也可以处理
B:throw和throws是的区别
throw:
在方法体中,后面跟的是异常对象名,并且只能是一个
throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
throws:
在方法声明上,后面跟的是异常的类名,可以是多个
throws是声明方法有异常,是一种可能性,这个异常并不一定会产生
13、A:final,finally,finalize的区别?
final -> 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作 为父类被继承。
因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为 final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引 用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally -> 再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配 的 catch 子句就会执行,
然后控制就会进入 finally 块(如果有的话)。
finalize -> 方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去 之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它 是在 Object 类中定义的,因此所有的类都继承了它。
子类覆盖 finalize() 方法以整理系统资源或者 执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
B:如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后
会;前。 |
|