动手动脑及实验性练习总结
1.EnumTest.java的分析
(1)源代码
1 public class EnumTest { 2 3 public static void main(String[] args) { 4 Size s=Size.SMALL; 5 Size t=Size.LARGE; 6 //s和t引用同一个对象? 7 System.out.println(s==t); // 8 //是原始数据类型吗? 9 System.out.println(s.getClass().isPrimitive()); 10 //从字符串中转换 11 Size u=Size.valueOf("SMALL"); 12 System.out.println(s==u); //true 13 //列出它的所有值 14 for(Size value:Size.values()){ 15 System.out.println(value); 16 } 17 } 18 19 } 20 enum Size{SMALL,MEDIUM,LARGE}
(2)结果截图
(3)s和t没有引用同一个对象,变量只有一个值,那么就要选取枚举类型中的一个值进行赋值。上例是将字符串转化为枚举类型。
(4)枚举不属于原始数据类型,是引用类型,它的具体值引用的是特定的对象。int(整数),float(浮点)类型为原始数据类型。
2.反码、补码跟原 码的基本概念
(1)原码: 这个数本身的二进制形式
(2)反码
正数的反码就是它的原码,而负数的反码是将它的原码的除符号位之外的各位求反。
(3)补码
正数的补码还是它的原码,但负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
PS:JAVA采用的是补码。
3.TestDouble.java
(1)源代码
1 public class TestDouble { 2 3 public static void main(String args[]) { 4 System.out.println("0.05 + 0.01 = " + (0.05 + 0.01)); 5 System.out.println("1.0 - 0.42 = " + (1.0 - 0.42)); 6 System.out.println("4.015 * 100 = " + (4.015 * 100)); 7 System.out.println("123.3 / 100 = " + (123.3 / 100)); 8 } 9 }
(2)运行结果截图
(3)为什么double类型的数值进行运算得不到“数学上精确”的结果?
计算机只能识别二进制,一切的数据最后都要转换为二进制。例如源程序中的2.4是十进制的,要转换为二进制,但2.4的二进制不是精确的2.4,只是接近4.4,实为2.3999999999999999,浮点数由两部分组成:指数和 尾数,在进行浮点数的二进制与十进制的转换时,浮点数参与了计算,那么转换的过程就会变得不可预测,并且变得不可逆。
(4)在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。(为什么会这样呢?)
4.
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
(1)代码的输出结果是什么?
(2)为什么会有这样的输出结果?
语句1为字符串的连接,其中的“+”为连接运算,输出字符串“X+Y=”与X(100)与Y(200);
语句2为数字相加,其中的第一个“+”为相加运算,第二个“+”为连接运算。
5. Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。
1 class c 2 { 3 public int name = 12; 4 } 5 class d extends c 6 { 7 int name =13; 8 void d2() 9 { 10 System.out.println(super.name); 11 } 12 } 13 public class Main 14 { 15 public static void main(String[]args) 16 { 17 d d1 = new d(); 18 System.out.println(d1.name); 19 d1.d2(); 20 } 21 }
6.看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?
(1)Java里面包含8个基本数据类型,boolean、byte、char、short、int、float、douboe、long。
byte类型是JAVA中最小的数据类型,占8位,表示数值范围为-128到127。
short类型占2个字节,取值范围为-32678到32677。
char类型占2个字节,表示一个字符,也可以使用ASCII码范围内的值来给char型的变量赋值。由于字符在内存中的取值不存在负数范围,所有取值范围从0 到 65535。
int型占4个字节,取值范围为-2147483648 到2147483647 。
float 单精度浮点型型占4个字节,取值范围从-3.4E38 到3.4E38。
long 长整型在内存中占8个字节,取值范围从 -9223372036854775808 到9223372036854775807。
double 型占8个字节,取值范围从-1.7E308 到1.7E308。
boolean型变量在内存中只占1/8个字节
(2)Java语言中的整型的位数是固定的,而不会根据硬件平台以及操作系统的不同而不同。 JAVA中所有的数字变量都是有符号(正负)的。
7.编写程序。实验目的:用户输入两个数,求出其加减乘除,并用消息框显示计算结果。
(1)源代码
import javax.swing.JOptionPane;//导入包javax.swing中JOptionPane类 public class Yuanshuan { public static void main(String[] args) { // TODO 自动生成的方法存根 String firstNumber,secondNumber; int number1,number2, sum, cha, ji, shang; firstNumber = JOptionPane.showInputDialog( "输入第一个数: " ); secondNumber = JOptionPane.showInputDialog( "输入第二个数:" ); number1 = Integer.parseInt( firstNumber ); number2 = Integer.parseInt( secondNumber ); sum = number1 + number2; cha=number1-number2; ji=number1*number2; shang=number1/number2; JOptionPane.showMessageDialog( null,"和为" + sum +"\n"+"差为"+cha +"\n"+"积为"+ji +"\n"+"商为"+shang); System.exit( 0 ); } }
(2)结果截图