动手动脑
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.58000000000000014.015 * 100 = 401.49999999999994123.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