课程作业02

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类型的数值直接相加;

原文地址:https://www.cnblogs.com/ljysy/p/7623949.html