PPT动手动脑1

1.枚举类

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};

(1)当s与t引用同一个对象时s==t为true。

(2)getclass()为返回Class类型的对象。isPrimitive()Class为判断是否为

原始数据类型(boolean、char、byte、short、int、long、float、double)

(3)valueOf()将普通字符串转为枚举实例,就如同 Integer.valueOf(String str)将String转为Integer类型一样。

(4)values()方法可以把枚举变成枚举类型的数组方便访问。

以下为运行结果

 

 可见枚举类型并不是原始数据类型,它的每个值都引用一个对象,相同的值引用同一个对象。

枚举类型可以用==比较变量的值。

枚举类型相当于一个类,里面可以有方法如:

public class test10 {
    public static void main(String[] args) {
        for(int i=0;i<3;i++)
        {
            Size.showSize(i);
        }
    }
}
enum Size{
    small("SMALL"),medium("MEDIUM"),large("LARGE");
    private  String size;
    private Size(String size)
    {
        this.size=size;
    }
    public static void showSize(int n)
    {
        switch(n)
        {
        case 0:
            System.out.println(Size.small);break;
        case 1:
            System.out.println(Size.medium);break;
        case 2:
            System.out.println(Size.large);break;
        }
    }
};

运行结果

 

 2.二进制表示正数和负数

反码,补码,原码这些在上学期计算机导论与c语言程序设计中都有个介绍。

(1)原码:十进制数的二进制表示方式,最高位为符号位,0为正,1为负。

如-1的原码:10000000 00000000 00000000 00000001

1的原码::00000000 0000000 00000000 00000001

(2)反码:正数的反码为它本身,负数的反码为除最高位其余为取反(1变为0,0变为1)。

如-1的反码:11111111 11111111 11111111 11111110

(3)补码:正数的补码为它本身,负数的补码为反码加1。

如-1的补码:11111111 11111111 11111111 11111111

位操作

(1)m<<n:把m的二进制表示左移n位,高位舍弃,低位补0。

(2)m>>n:把m的二进制表示右移n位,m为正数高位补0,m为负数高位补1。

(3)m>>>n:把m的二进制表示右移n为,不论正负高位补0。

可以利用位操作观察java的二进制运算,以及原码,反码,补码的操作原理

如1<<2   1的二进制00000000 00000000 00000000 00000001运算后00000000 00000000 00000000 0000100得到4.

        int i=1<<2;
        System.out.println(i);

 

3.java的同名变量屏蔽原则

 

每一个变量都有自己的有效区,出了这个区域则不再有效。

局部变量会屏蔽全局变量中相同名字的变量。

以下为测试代码:

public class test10 {
    final int NUM=100;
    public static void main(String[] args) {
        int NUM=10;
        System.out.println(NUM);
    }
}

输出结果

 

 可见main方法中的NUM将全局变量NUM屏蔽了。

 

 如,输出语句中的i报错,是因为for中定义的i的有效区域就是for循环,出了区域不再有效,i需重新定义。

4.

 

char类型 位数 2 范围  0-65535

byte类型 位数:8 范围 -128~127

 int类型 位数:32 范围:-2147483648~2147483648。

short类型 位数:16 范围-32768~32768

long类型 位数 64 范围 -9223372036854775808 ~9223372036854775807 

float类型 位数 32 范围 1.4E-45~3.4028235E38

double类型 位数 64 范围 4.9E-324 ~1.7976931348623157E308

整型之间从小位数到大位数的转换并不会出现精度损失,然而整型与浮点型之间的转换会产生精度损失,而浮点型之间的转换并不会出现精度损失。

5.

 

 以下为运行结果

 

 

 

 第一个先输出“X+Y=”为String类,所以后面的X,Y也按String类处理,并不会加在一起。

第二个X+Y为int型加在一起输出300,最后输出String类型“=X+Y”。

posted @ 2020-09-30 21:02  风吹过半夏  阅读(115)  评论(0编辑  收藏  举报