嗅谱网

企业应用

  • 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(){}//重写} 重写时异常要求:? 如果父类方法抛出的是捕获型异常,则子类也只能抛出同类的捕获型异常或其子类,或不抛出。? 父类抛出捕获型异常,子类却抛出运行时异常,这是可以,因为抛出运行时就相当于没有抛出任何异常。? 如果父类抛出的是非捕获型异常,则 ...

    查看全文

  • Java常见疑难问题-类12

    Java常见疑难问题-类12

    40. 构造器中静态常量的引用问题class T {// 先于静态常量t初始化,固可以在构造器中正常使用private static final int y = getY();/** 严格按照静态常量声明的先后顺来初始化:即t初始* 化完后,才初始化后面的静态常量j,所以构造器中* 引用后面的静态常量j时,会是0,即内存清零时的值*/public static final T t = new T();// 后于静态常量t初始化,不能在构造器中正常使用private static final int j = getJ();private final int i; static int getY( ...

    查看全文

  • Java常见疑难问题-类13

    Java常见疑难问题-类13

    41. instanceof与转型System.out.println(null instanceof String);//falseSystem.out.println(new Object() instanceof String);//false//编译能通过System.out.println((Object) new Date() instanceof String);//false//!!程序不具有实际意义,但编译时不能通过//!!System.out.println(new Date() instanceof String);//!!运行时抛ClassCastException,这 ...

    查看全文

  • Java常见疑难问题-类14

    Java常见疑难问题-类14

    44. 请使用引用类型调用静态方法public class Null {public static void greet() {System.out.println(“Hello world!”);} public static void main(String[] args) {((Null) null).greet();}}上面程序运行时不会打印NullPointerException异常,而是输出”Hello world!”,关键原因是:调用静态方法时将忽略前面的调用对象或表达示,只与对象或表达式计算结果的类型有关。 在调用静态方法时,一定 ...

    查看全文