1、问题:一个java类文件中真的只能有一个公有类吗?
答:一个Java类文件可以有多个类但只能有一个public类。
如以下程序有两个public类运行时会出错。
2、问题:把main()方法的返回值由void改为int,程序能编译通过吗?能运行吗?
如上截图所示将void改为int后程序将无法运行。
3、问题:什么静态方法?为什么java规定作为程序入口点的main()方法静态的?
答:Java静态方法是使用公共内存空间的,就是说所有对象都可以引用,而且在没有创建对象时也可以利用类使用该方法。
非静态成员函数在执行前必须先构造并实例化该函数所在的类。如果允许非静态的main,那么main函数所在的类必须先进行实例化。
4、变量的作用域
如截图所示java变量遵循“同名变量屏蔽原则”
5、java中类型的转换
int,short\,byte,long是整数类型,其值是精确的。而double,float是浮点型其值表示的是近似值。所以int转float,double会有精度损失,long转double会有精度损失。在ASCII中都是整数所以char转int无精度损失。
6、为什么double类型的数值进行运算得不到“数学上精确”的结果?
double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。
比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。
简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
7、在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。(为什么会这样呢?)
double并不能准确的代表BigDecimal 16位有效数以上的数字在使用BigDecimal时创建对象。而BigDecimal所创建的对象不能使用+-*/等传统的算术运算符直接对其对象进行数学运算,必须调用相对应的(f1.add(f2))等方法。 因为方法中的参数必须是BigDecimal的对象,所以定义时应为字符串。
8、
以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?
从运行结果可以看出第一个输出是以字符串的形式处理的,而第二个输出则是以整数相加处理。当“X+Y=”在前时,编译器默认的将X、Y转化为String类型,System.out.println()默认参数是String类型。