一 基础编程模型
1 考察溢出
问:
Math.abs(-2147483648)的返回值是什么?
答:
-2147483648。这个奇怪的结果就是证数溢出的典型例子。int整型范围为-2147483648~2147483647。
编程:
package AlgorithmFAQ;
/**
* Copyright (C), 2020-2020, XXX有限公司
* FileName: AlgorithmFAQ
* Author: cakin
* Date: 2020/1/11
* Description: 算法FAQ
*/
public class AlgorithmFAQ {
public static void main( String[] args ) {
// 第一章
test1_1();
}
public static void test1_1(){
System.out.println(Math.abs(-2147483648));
}
}
测试结果:
-2147483648
2 考察除0
问:
Java表达式1/0和1.0/0.0的值是什么?
答:
第一个表达式会产生一个运行时除零异常(它会终止程序,因为这个值是未定义的);第二个表达式的值是Infinity(无穷大)。
编程:
package AlgorithmFAQ;
/**
* Copyright (C), 2020-2020, XXX有限公司
* FileName: AlgorithmFAQ
* Author: cakin
* Date: 2020/1/11
* Description: 算法FAQ
*/
public class AlgorithmFAQ {
public static void main( String[] args ) {
// 第一章
test1_2();
}
public static void test1_2(){
System.out.println(1.0/0.0);
System.out.println(1/0);
}
}
测试结果:
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
at AlgorithmFAQ.AlgorithmFAQ.test1_2(AlgorithmFAQ.java:19)
at AlgorithmFAQ.AlgorithmFAQ.main(AlgorithmFAQ.java:13)
3 负数除法和余数考察
问:
负数的除法和余数的结果是什么?
答:
表达式a/b的商会向0取整;a%b的余数的定义是(a/b)*b+a%b恒等于a。也就是a%b等于a-(a/b)*b。
例如 -14/3和14/-3的商都是-4,但-14%3=-2,而14%-3=2。
编程:
package AlgorithmFAQ;
/**
* Copyright (C), 2020-2020, XXX有限公司
* FileName: AlgorithmFAQ
* Author: cakin
* Date: 2020/1/11
* Description: 算法FAQ
*/
public class AlgorithmFAQ {
public static void main( String[] args ) {
// 第一章
test1_3();
}
public static void test1_3(){
System.out.println(-14/3);
System.out.println(14/-3);
System.out.println(-14%3);
System.out.println(14%-3);
}
}
测试结果:
-4
-4
-2
2
4 静态方法考察
问:
在Java中,一个静态方法能够将另一个静态方法作为参数吗?
答:
不行,但问得好,因为有很多语言够能够这么做。
5 考察继承
问:
实现继承有什么问题?
答:
子类继承阻碍模块化编程的原因有两点。第一,父类的任何改动都会影响它的所有子类,子类的开发不可能和父类无关,事实上,子类完全依赖父类。这种问题被称为脆弱的基类问题。第二,子类可以访问所有的实例变量。因此它们可能扭曲父类代码的设计意图。例如,用于选票统计系统的Counter类的设计者可能会尽最大努力保证Counter每次只能将计数器加1.但子类可以完全访问这个变量,因此可以将它改变为任意值。
6 变量种类考察
问:
除了参数变量、局部变量和实例变量外,还有其他种类的变量吗?
答:
如果在类的声明中包含了关键字static(在其他种类之前),就创建了一种称为静态变量的完全不同的变量。和实例变量一样,类中所有的方法都可以访问静态变量,但静态变量却不和任何具体的对象相关联。在较老的编程语言中,这种变量称为全局变量,因为它们的作用域是全局的。在现代编程中,我们希望限制变量的作用域,因此很少使用这种变量,在使用它们时会非常小心。