zoukankan      html  css  js  c++  java
  • 课堂作业02

    题目要求:将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园

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

    答:Java可以有内部类,我今天上午刚看的书,内部类在图形界面那块很有用,使用内部类可以轻松实现对两对象的监听。

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

    答:Java中只能有一个继承,但是可以有多个接口。

    问:main 方法必须严格象上面那样声明public void static main(String[] args)?void 表明 main 方法不返回任何结果。课堂动手试验:把main()方法的返回值由 void 改为 int ,程序能编译通过吗?能运行吗?

    答:JVM有限制,main不能有返回值。JVM是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。如果把void改成int程序不能运行。

    问:为什么java规定作为程序入口点的main() 方法静态的?

    答:static的main方法可以直接被jvm调用,不用先new出实例再执行。我们在编译一段java代码时,解释器就是在当前的包含main的类当中去调用静态的main方法,而不需要产生这个类的对象,我们加载这个类时,main方法也被加载作为java程序的入口。

    问:Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。

    答:编写程序如下:

    public class SameName {

           public static int value=1;

           public static void main(String[] args)

           {

                  SameName a=new SameName();

                  a.go1();

                  a.go2();

                  int value=0;

                  System.out.println("main:"+value);

           }

           public void go1()

           {

                  int value=3;

                  System.out.println("void go1:"+value);

           }

           public void go2()

           {

                  System.out.println("void go2:"+value);

           }

    }运行结果是

    void go1:3

    void go2:1

    main:0

    也就是说类的value是自己的value,main中的value也是自己的value,在mian中声明的value屏蔽了类里的value,go1里的value屏蔽了类里的value。

    问:为什么double类型的数值进行运算得不到“数学上精确”的结果?请通过互联网查找资料,或者是阅读相关计算机教材,解决这个问题。

    提示:这个问题,与浮点数在计算机内部的表示方法有关系。可以使用这个知识在搜索引擎中查找相关资料

    答:我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。举个例子:比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。

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

    答:在Java中写入new BigDecimal(0.1) 所创建的 BigDecimal 实际上不等于 0.1,

    这是因为 0.1 无法准确地表示为 double(或者说不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于0.1(虽然表面上等于该值)。所以在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。

  • 相关阅读:
    以太坊:区块(Blocks)
    以太坊:事件日志 (Event Logs)
    以太坊:节点代理(Geth/Parity Proxy) APIs
    以太坊:代币信息 Token
    以太坊:Etherscan API 约定
    以太坊:账号(Account)
    以太坊:智能合约(Contracts)
    我的友情链接
    我的友情链接
    我的友情链接
  • 原文地址:https://www.cnblogs.com/w-honey/p/7635620.html
Copyright © 2011-2022 走看看