课程作业2
1.文件名必须与公有类名一致
置疑:一个Java类文件中真的只能有一个共有类吗?
源代码:
public class Test{
Java中的方法用于完成某个任务并返回结果信息,一个Java应用程序可以包含一个或多个方法Java应用程序(Java Application)从 main 方法开始执行
public static void main( String args[] )
main 方法必须严格象上面那样声明 void 表明 main 方法不返回任何结果
源代码:
public class Test
{
public static int main(String[]args)
{
System.out.println("Hello word!")
}
}
验证结果如下:
都不能执行,所以不能通过。
3.为什么java规定作为程序入口点的main() 方法静态的?
(1)什么是静态方法?
(2)为什么java规定作为程序入口点的main() 方法静态的?
static关键字,告知编译器main函数是一个静态函数。也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
4.变量的作用域(每个变量都有一个“有效”的区域(称为“作用域”),出了这个区域,变量将不再有效。)
源代码:
public class Test
{
private static int value=1;
public static void main(String[]args)
{
int value=2;
System.out.println(value);
}
}
Java变量遵循“同名变量的屏蔽原则”
5. Java中的类型转换
看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?
int short long byte 表示整数,其值是精确的,而float double均为浮点型,表示近似值,所以当整型转换成浮点类型的近似值会有精度损失。而ASCLL都是整数,所以char转换成整型不会有精度损失。
6.
这么意外的输出。
使用double类型的数值进行计算, 其结果是不精确的。
为什么double类型的数值进行运算得不到“数学上精确”的结果?
因为java中十进制与二进制转化时存在问题,double类型的数值占 用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低 位上一定会与实际数据存在误差,简单来说就是我们给出的数值,在 大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需 要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
7.
以下代码的输出结果是什么?
int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?
当"X+Y="在前时,默认的把int型X,Y转化为String型,"X+Y="使编译器认为X,Y是String型的了,System.out.println()本身的参数默认为String型,遇到这种情况默认了转化,产生了如此结果,而第二个就是简单的输出,没有让计算器产生“误解”。