动手动脑

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