1 JAVA中是否可以存在多个公有类
答案是可以,就是在公有类中在套用一个公有类,在Eclipse上输入老师给的那个例子,能够成功运行,说明就是可以的。
2 把main()方法的返回值void改为int,编译通不过,运行不了。
3 为什么java规定作为程序入口点的main() 方法静态的?
静态比较方便,不用去构造实例化,非静态的main,需要对类进行实例化,再调用main,实例化代码可能还需要实例化,比较麻烦。
4
4 为什么使用double类型使最后的结果不准确
这个涉及到二进制与十进制的转换问题。N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×102+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
5 在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发精度问题。(为什么会这样呢?)
参数类型为double的构造方法的结果有一定的不可预知性。有人可能认为在Java中写入newBigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
6
5
第一个输出结果中,””中本身就是一个字符串,后面的加号默认为数据的链接,输出结果认为一个字符串;第二个输出中,加号首先进行的是加法运算,然后第二个加号才起到链接字符串的作用。