课程作业02(二)
一个类文件中只能有一个共有公共类。
为什么java规定作为程序入口点的main() 方法静态的?
正因为main方法是静态的,JVM调用这个方法就不需要创建任何包含这个main方法的实例。
如果main方法不声明为静态的,JVM就必须创建main类的实例,因为构造器可以被重载,JVM就没法确定调用哪个main方法。
静态方法和静态数据加载到内存就可以直接调用而不需要像实例方法一样创建实例后才能调用,如果main方法是静态的,那么它就会被加载到JVM上下文中成为可执行的方法。
类型转换精度损失原因:
精度损失原因:
float 和double类型主要是为科学计算和工程计算而设计的,他们执行二进制浮点运算,这两种类型在计算机中的储存分为三部分:符号位、指数为、尾数部分。
数据以二进制存储在计算机时,会出现无线循环系列,在数据转化中会出现错误。十进制不能准确的表示1/3,同样二进制不能精确的表示1/10,大部分浮点数保存在计算 机中都只是一个近似值。
java中十进制与二进制转化时存在问题,double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低 位上一定会与实际数据存在误差,简单来说就是我们给出的数值,在 大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
为什么double类型的数值进行运算得不到“数学上精确”的结果?
double+、-不能准确的代表BigDecimal(String) 16位有效数以上的数字在使用BigDecimal时,应用*、/构造器创建对象才有意义。BigDecimal所创建的对象不能使用传统的等算术运算符直接对其对象进行数学运算,而必须调用相对应的方法。方法中的参数必须是BigDecimal的对象。
.以下代码的输出结果是什么?
1 int X=100; 2 int Y=200; 3 System.out.println("X+Y="+X+Y); 4 System.out.println(X+Y+"=X+Y");
运行结果:
原因:
因为双引号表示是String类型,String+int类型自动转换,int转String,100自动转换为String类型,对于两个字符串,+执行的是字符串的连接操作,此时若输出,结果是 X+Y=100,然后继续进行,200转换为String类型,所以输出的是X+Y=100200
从左往右,首先是100+200,两个变量都是int类型,所以进行计算,此时执行的是数学的加法,得到int类型的300,然后int类型的300与String类型的“=X+Y”做运算,int类型自动转换为String,然后+执行字符串连接操作,得到300=X+Y