1.一个Java类文件里边只能有一个公共类。例如
package test;
public class Test1 {
public static void main(String[] args) {
public class Inner
{
}
// TODO 自动生成的方法存根
}
}
这一段代码就是错误的,因为他有两个公共类,若将类Inner前的public删掉程序就不会报错。一个java文件可以写多个类和接口在里面,但必须只能且必须有一个public的类或接口,而且那个public的类或接口必须和文件同名
2.把main()方法的返回值由 void 改为 int ,程序能编译通过吗?能运行吗?
比如下边的例子:
package test;
public class Test1 {
public static int main(String[] args) {
// TODO 自动生成的方法存根
}
}
答案是不可以的,若为int,则main里边应该有返回值,而且返回值的类型为int类型
3.如果源程序为如下所示:
package test;
public class Test1 {
private static int value=-1;
public static void main(String[] args) {
int value=2;
System.out.println(value);
// TODO 自动生成的方法存根
}
}
他的输出结果为2原因是在java中,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变量一样的名字,我们使用的过程中,调用全局变量的话,会使用this关键字辅助。
4.Java中类型的转换
不同的基本类型所占的位数与范围如下:
Int 32 4 -2,147,483,648 ~ 2,147,483,647
Short 16 2 -32768 ~ 32678
long 64 8 -9,223,372,036,854,775,808~+9,223,372,036,854,775,807
float 32 4 -3,40292347E+38 ~ +3,40292347E+38
double 64 8 -1.79769313486231576E+308 ~ 1.79769313486231576E+308
char 16 2 -128~127
boolean 1 0.125 true/false
byte 8 1 -128 ~ 127
在int转换为float和double是会有精度损失,long类型转化为double类型也会有精度损失的。
5.为什么double类型的数值进行运算得不到“数学上精确”的结果?
原因:double类型是双精度浮点数,占用8字节(Byte)即64位(bit),其精度是由32个bit的二进制尾数来确定的,因此准确精度是二进制精度而不是十进制精度,通常可以保证十进制小数点后15位有效精度和第16位的部分精度。double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
6.执行以下的代码:
public class Test {
public static void main(String[] args) {
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类型的数值直接相加;