动手动脑一:仔细阅读示例: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=1;
public static void main(String[] args){
int value=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。