课程作业02

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课程作业02相关的知识,希望对你有一定的参考价值。

1、一个Java类文件中真的只能有一个公有类吗?请使用Eclipse或javac检测一下以下代码,有错吗?

  public class Test

  {

    public static void main(String[] args)

    {

    }

    public class InnerClass

    {

    }

  }

请依据你的实验结果调整前面的描述,使其更为准确,后面的课程中将学习接口(interface),这里关于公有类的结论是否同样可用于接口?

  答:一个Java类文件只能有一个公有类。Java程序从public类的main函数开始执行,public类只能定义在以它的类名为文件名的文件中。每个文件只有一个公共接口,用public实现,因为只有一个公有类。

    题中有两个公有类,编译器报错。对于接口而言,一个java文件可以有多个类和接口,但是只能有一个public接口。

2.把main()方法的返回值有void改为int,程序能编译通过吗?能运行吗?

  答:不能。因为没有返回int类型的结果。

3.为什么java规定做为程序入口点的main()方法静态的?

  答:非静态成员函数在执行前必须先构造并实例化该函数所在的类。如果允许非静态的main函数,那么必须先实化main函数所在的类,再调用main函数,而且如果这个实例化代码也是非静态的,又要写个  

    函数去实例化它所在的类。一次下去,可能造成无限循环,因此java语言规定main必须是静态的。

4.java变量遵循“同名变量的屏蔽规则”,请阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。

  答:变量使用时规则为就近原则。首先在局部范围内,有就使用,接着在成员范围内找,然后在主函数里创建对象并输出。  

    示例:

       public class Test

       {

        private static int a=1;

        public static void mian(String[] args)

        {

          int a=2;

          System.out.println(a);

        }

       }

      输出结果为2。

5.为什么double类型的数值进行计算得不到数学上计算的结果?

  答:结果与浮点数在计算机内部的表示方法有关系,这种方法问题在于如何在二进制中保存小数点的问题,即利用科学技术法,这样来保证小数点在第一个位置。由于计算机只能处理0和1,所以在计算机  里面表示浮点数的时候,科学计数法的技术是2,而不是10.所以说计算机里面浮点数都是近似值,而不是确切的值。计算机得出的数值,在大多数情况下需要比64bit更多的位数才能准确表出来(甚至 是需要无穷多位),而double类型的数值只有64bit。因此后面舍去的位数一定会带来误差,无法的到数学上精确的结果。

6.在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。(为什么会这样呢?)

  答:double并不能准确的代表BigDecimal 16位有效数以上的数字在使用BigDecimal时创建对象。而BigDecimal所创建的对象不能使用+-*/等传统的算术运算符直接对其对象进行数学运算,必须调用相对应的(f1.add(f2))等方法. 因为方法中的参数必须是BigDecimal的对象,所以定义时应为字符串。

7.以下代码的输出结果是什么?为什么会有这样的结果?

  int X=100;

  int Y=200;

  System.out.println("X+Y="+X+Y);

  System.out.println(X+Y+"=X+Y");

  答:输出结果为

    X+Y=100200

    300=X+Y

     因为输出的是字符串,在语句一中,“+”直接连接两个字符;而在语句二中,“+”先是进行数值类型的求和运算,再用字符串输出两个整形的和。

 

以上是关于课程作业02的主要内容,如果未能解决你的问题,请参考以下文章

课程作业02-1

课程作业02

课程作业02

课程作业02

课程作业02

课程作业02