String 是最基本的数据类型吗?
不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
int和Integer有什么区别?
自动装箱/拆箱机制
用最有效率的方法计算2乘以8?
2 << 3
数组有没有length()方法?String有没有length()方法?
答:数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。
在Java中,如何跳出当前的多重嵌套循环?
java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,应尽量避免使用
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。
hash code的基本思想
是否可以继承String类?
String 类是final类,不可以被继承
这个没继承过,不过看下源码有没有final关键字修饰,就知道了
补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)。
解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
|
|
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。
Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
类型转换问题
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
float f=3.4;是否正确?
答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。
谈谈你对反射机制的理解及其用途?
运行时探测类的信息
CLASS.forName(xxx) xxx.class xxx.getClass
程序的灵活性,
有类似API和相同行为
的类,配置到xml文件中,比如JDBC加载oracle、mysql等
一般的框架只需要在配置文件中,把配置信息改一下就可以,这样在不改变源代码的情况下就可以实现数据源的切换类似的还有logger的选择
如果要重写一个对象的equals方法,还要考虑什么?
答案:hashCode。
sizeof是Java的关键字吗?
不是。JAVA的基本数据类型大小是确定的,跟硬件及OS无关(平台无关性),没必要用sizeof
public static void写成static public void会怎样?
程序正常编译及运行。
Java支持哪种参数传递类型?
Java参数都是进行传值。对于对象而言,传递的值是对象的引用,也就是说原始引用和参数引用的那个拷贝,都是指向同一个对象。
一个类能拥有多个main方法吗?
可以,但只能有一个main方法拥有以下签名:
最常见到的runtime exception
List,Set是
Map不是
启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行