动手动脑

1.阅读示例: EnumTest.java,运行它,分析运行结果?你能得到什么结论?你掌握了枚举类型的基本用法了吗?

public class EnumTest {	public static void main(String[] args) {		Size s=Size.SMALL;		Size t=Size.LARGE;		//s和t引用同一个对象?		System.out.println(s==t);  //		//是原始数据类型吗?		System.out.println(s.getClass().isPrimitive());		//从字符串中转换		Size u=Size.valueOf("SMALL");		System.out.println(s==u);  //true		//列出它的所有值		for(Size value:Size.values()){			System.out.println(value);		}	}} enum Size{SMALL,MEDIUM,LARGE}; 以下为运行结果: false false true SMALL MEDIUM LARGE

  结论:枚举是一个引用类型的,并非为原始类型;枚举类型引用的值,可以用”==“来进行比较;

2.阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

原码:原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,符号位位“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。为了方便整数和小数区别,整数的符号位与数值位之间用“,”隔开,小数的符号位与数值位之间用“.”隔开。

补码:补码是计算机把减法运算转化为加法运算的关键编码;0和1相互对应;

反码:码通常是用来由原码求补码或者由补码求原码的过渡码。反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。 

示例:

public class zzm { public static void main(String[] args) {    int a=2;    int b=-2;    System.out.println(Integer.toBinaryString(a));    System.out.println(Integer.toBinaryString(b));}}

运行结果:

10

11111111111111111111111111111110

由运行结果可以看出 正数是采用原码的形式,而负数则是采用补码的形式;

3.请运行以下代码(TestDouble.java)

public class TestDouble {     public static void main(String args[]) {            System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));            System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));            System.out.println("4.015 * 100 = " + (4.015 * 100));            System.out.println("123.3 / 100 = " + (123.3 / 100));        }}

运行结果如下:

0.05 + 0.01 = 0.060000000000000005

1.0 - 0.42 = 0.5800000000000001
4.015 * 100 = 401.49999999999994
123.3 / 100 = 1.2329999999999999

使用double类型的数值进行计算, 其结果为什么不是精确的?

 double 是64个字节的,但是绝大多数情况下 计算是会超过64个字节数;因此会导致结果不精确;

4.以下代码的输出结果是什么? 

public class zzm{    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=100200
  300=X+Y

为什么会有这样的输出结果?

 第一个是被转化成了字符串类型;

第二个输出正常;

5.运行下述代码,输出结果是什么?

public class zzm {      private static  int value=1;       public static void main(String[] args) {         int value=2;         System.out.println(value);}}

 运行结果如下:

2

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

public class zzm1 {          private static  int a=1;           public static void main(String[] args) {             int a=2;             System.out.println("第一次输出:"+a);             zzm1 newclass=new zzm1();             newclass.zzm2();    }     public void zzm2()     {         int a=3;         System.out.println("第二次输出:"+a);     }}

运行结果如下:

第一次输出:2

第二次输出:3