嗅谱网

Java基础

  • Java常见疑难问题-数值表达式0

    Java常见疑难问题-数值表达式0

    1. 奇偶判断不要使用 i % 2 == 1 来判断是否是奇数,因为i为负奇数时不成立,请使用 i % 2 != 0 来判断是否是奇数,或使用高效式 (i & 1) != 0来判断。2. 小数精确计算System.out.println(2.00 -1.10);//0.8999999999999999上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示 ...

    查看全文

  • Java常见疑难问题-数值表达式1

    Java常见疑难问题-数值表达式1

    5. 窄数字类型提升至宽类型时使用符号位扩展还是零扩展System.out.println((int)(char)(byte)-1);// 65535结果为什么是65535而不是-1? 窄的整型转换成较宽的整型时符号扩展规则:如果最初的数值类型是有符号的,那么就执行符号扩展(即如果符号位为1,则扩展为1,如果为零,则扩展为0);如果它是char,那么不管它将要被提升成什么类型,都执行零扩展。 了解上面的规则后,我们再来看看迷题:因为byte是有符号的类型,所以在将byte数值-1(二进制为:11111111)提升到char时,会发生符号位扩展,又符号位为1,所以就补8个1,最后为16个1;然后 ...

    查看全文

  • Java常见疑难问题-数值表达式2

    Java常见疑难问题-数值表达式2

    12. 一个数永远不会等于它自己加1吗?i==i+1一个数永远不会等于它自己加1,对吗?如果数字是整型,则对;如果这个数字是无穷大或都是浮点型足够大(如1.0e40),等式就可能成立了。 Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。 浮点型分为double型、float型。 无穷分为正无穷与负无穷。 无穷大加1还是无穷大。 一个浮点数值越大,它和其后继数值之间的间隔就越大。 对一个足够大的浮点数加1不会改变它的值,因为1不足以”填补它与其后者之间的空隙”。 浮点数操作返回的是最接近其精确数学结果的浮点数值。 ...

    查看全文

  • Java常见疑难问题-数值表达式3

    Java常见疑难问题-数值表达式3

    16. Math.abs结果一定为非负数吗?System.out.println(Math.abs(Integer.MIN_VALUE));// -2147483648上面的程序不会输出2147483648,而是-2147483648,为什么? 其实我们看一下Math.abs源码就知道为什么了,源码:(a < 0) ? -a : a;,结合上面那个迷题,我们就发现-Integer.MIN_VALUE= Integer.MIN_VALUE,所以上面的答案就是最小整数自己。 另外我们也可以从API文档看到对Math.abs()方法的解释:如果参数等于Integer.MIN_VALUE 的值(即能够 ...

    查看全文

  • Java常见疑难问题-字符串4

    Java常见疑难问题-字符串4

    19. char类型相加System.out.println(‘a’ + ‘A’);//162上面的结果不是 aA ,而是 162。当且仅当+操作符的操作数中至少有一个是String类型时,才会执行字符串连接操作;否则,执行加法。如果要连接的数值没有一个是字符串类型的,那么你可以有几种选择:预置一个空字符串(”” + ‘a’ + ‘A’);将第一个数值用String.valueOf()显示地转换成一个字符串(String.valueOf(‘a’) + ...

    查看全文

  • Java常见疑难问题-字符串5

    Java常见疑难问题-字符串5

    25. 一段程序的三个BugRandom rnd = new Random();StringBuffer word = null;switch (rnd.nextInt(2)) {case 1:word = new StringBuffer(‘P’);case 2:word = new StringBuffer(‘G’);default:word = new StringBuffer(‘M’);}word.append(‘a’);word.append(‘i’);word.a ...

    查看全文

  • Java常见疑难问题-异常6

    Java常见疑难问题-异常6

    26. finally与中断//该方法返回falsestatic boolean f() {try {return true;} finally {return false;}} 不要用return、break、continue或throw来退出finally语句块,并且千万不要允许受检查的异常传播到finally语句块之外。也就是说不要在finally块内终止程序,而是执行完finally块后,要将控制权移交给try块,由try最终决定怎样结束方法的调用。 对于任何在finally语句块中可能抛出的受检查异常都要进行处理,而不是任其传播,下面流拷贝程序在关闭流时没有防止异常的传播,这会有问题 ...

    查看全文

  • Java常见疑难问题-异常7

    Java常见疑难问题-异常7

    27. catch捕获异常规则捕获RuntimeException、Exception或Throwable的catch语句是合法,不管try块里是否抛出了这三个异常。但如果try块没有抛出或不可能抛出检测性异常,则catch不能捕获这些异常,如IOException异常:public class Test {public static void main(String[] args) {try{//…}catch (Exception e) { }catch (Throwable e) { } /* !! 编译出错try{//…}catch (IOException e ...

    查看全文

  • Java常见疑难问题-异常8

    Java常见疑难问题-异常8

    30. System.exit()与finallytry {System.out.println(“Hello world”);System.exit(0);// 或者使用Runtime退出系统// Runtime.getRuntime().exit(0);} finally {System.out.println(“Goodbyte world”);}上面的程序会打印出”Goodbyte world”吗?不会。 System.exit将立即停止所有的程序线程,它并不会使finally语句块得到调用,但是它在停止VM之前会 ...

    查看全文

  • Java常见疑难问题-类9

    Java常见疑难问题-类9

    34. 参数兼容的方法重载public class Confusing {private Confusing(Object o) {System.out.println(“Object”);}private Confusing(double[] dArr) {System.out.println(“double array”);}public static void main(String[] args) {new Confusing(null);}}上面的程序打印的是”double array”,为什么? null可代表 ...

    查看全文

  • Java常见疑难问题-类10

    Java常见疑难问题-类10

    36. 属性只能被隐藏class P {public String name = “P”;} class S extends P {// 隐藏父类的name域,而不像方法属于重写private String name = “S”;} public class Test {public static void main(String[] args) {// !! S.name is not visible// !! System.out.println(new S().name);// 属性不能被重写,只是被隐藏,所以不具有多态性为System.o ...

    查看全文

  • Java常见疑难问题-类11

    Java常见疑难问题-类11

    39. 重写、隐藏、重载、遮蔽、遮掩重写:一个实例方法可以重写在其超类中可访问到的具有相同签名的所有实例方法,从而能动态分派,换句话说,VM将基于实例的运行期类型来选择要调用的重写方法。重写是面向对象编程技术的基础。public class P{public void f(){}}class S extends P{public void f(){}//重写} 重写时异常要求:? 如果父类方法抛出的是捕获型异常,则子类也只能抛出同类的捕获型异常或其子类,或不抛出。? 父类抛出捕获型异常,子类却抛出运行时异常,这是可以,因为抛出运行时就相当于没有抛出任何异常。? 如果父类抛出的是非捕获型异常,则 ...

    查看全文