首页 > 代码库 > 动手动脑问题及课后实验性问题总结

动手动脑问题及课后实验性问题总结

动手动脑一:仔细阅读示例:Enum.Test.Java,运行它,分析结果?得到什么结论?是否掌握枚举类型的用法?

     运行结果如图:s和t是不同的内容,引用不同的对象;枚举类型是引用数据类型;可以字符转换;对定义变量名进行逐个列出。

Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals 。

     技术分享

     用法:

           枚举的声明,其形式为:访问修饰符enum 枚举名: 基础类型{ 枚举成员(标识符) } 

           枚举成员不能是数值常量、字符常量、字符串常量,使用时不能加单、双引号。

           每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。枚举类型属于顺序类型。根据定义类型时各枚举成员的排列顺序确定它们的序列,如在默认基础类型即int的情况下序列号从0开始,后面每个枚举成员的值依次递增1。

 

课后练习:弄清楚反码,补码,原码的定义,并判断Java是运用哪种码编写的?

     原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。虽然原码非常的简单直观,但是当用原码表示0的时候就会出问题。0用原码表示分为+0和-0,当机器字长为8时,[+0]原=00000000,[-0]原=10000000。这就有问题了,同一个数却有两种表示,产生了二义性,从而给机器判断0带来了麻烦;二是用原码运算时,符号位需要单独处理,而且运算规则很复杂。例如加法运算,若两个数异号,则先要让绝对值大的数减去绝对值小的数,然后把绝对值大的数的符号付给结果。还有就是,借位操作如果用计算机硬件实现起来是很困难的。

     反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。反码很少会被用到,他主要的用途就是作为原码与补码的一个桥梁。他和原码一样对0有两种表示方法,[+0]反=00000000,[-0]反=11111111。

     补码: 采用补码进行运算有两个好处,一个就是刚才所说的统一加减法;二就是可以让符号位作为数值直接参加运算,而最后仍然可以得到正确的结果符。

             说到补码,就需要另一个概念——模数。模数从物理意义上讲是某种计量器的容量。这里我们经常举的一个例子就是钟表,其模数为12,即每到12就重新从0开始,数学上叫取模或求余(mod),Java里用%表示求余操作。在模数系统中,A-B或A+(-B)等价于A+[B补],这样用补码来表示负数就可以将加减法统一成加法来运算,简化了运算的复杂程度。

      Java运用补码计算。

 

课后练习:Java遵循“同名变量的屏蔽原则”:

              程序测试:

                  public class Test {

                         private static int value=http://www.mamicode.com/1;

                         public static void main(String[] args){

                         int value=http://www.mamicode.com/2;

                         System.out.println(value);

                         }

                  }

               输出结果为二。

               Java变量是有作用域的,两个作用域完全不同,不会引起冲突。因为在java中,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变量一样的名字,我们使用的过程中,调用全局变量的话,会使用this关键字辅助。

               例:class A{

                                      int i=10;
                                      void f()

                                      {

                                            int i=100;
                                            System.out.println(this.i);//全局
                                            System.out.println(i);//局部
                                       }
                           }

 

动手动脑二:Java中每个数据类型所占位数及表示数值范围。

1.Int         32位       取值范围为       -2的31次方到2的31次方减1之间的任意整数

2.Short     16位       取值范围为       -32768~32767之间的任意整数

3.long       64位       取值范围为       -2的63次方到2的63次方减1之间的任意整数

4.float       32位       取值范围为       3.402823e+38 ~ 1.401298e-45

5.double    64位       取值范围为       1.797693e+308~ 4.9000000e-324

6.char       8位         取值范围为        -128~127

7.byte       8位         取值范围为        -128~127之间的任意整数

 

动手实验:运行代码,分析结果

技术分享

技术分享

因为使用double类型数值计算,结果不准确。浮点数在计算机内部的表示方法有关。浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。 浮点计算是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。 

 

动手动脑:以下代码的输出结果是什么?为什么会有这样的输出结果?

             x+y=100200

             300=x+y

             第一种结果是相当于字符串的连接,输出的是x+y的字符串;第二个是加法运算,等于300。

      

 

动手动脑问题及课后实验性问题总结