checked和unchecked的区别

int类型的最大值是2147483647,2个最大值相加就会超出int的最大值,即出现溢出。

    class Program
    {
        static void Main(string[] args)
        {
            int y = 2147483647;
            int x = 2147483647;
            int z = x + y;

            Console.WriteLine(z.ToString());
            Console.ReadKey();
        }
    }

把断点打在 int z = x + y;代码行,单步调试,可以看到z的值为-2。因为int类型的最大值是2147483647,x + y超出了最大值,出现了溢出。

□ 使用checked

如果我们想让编译器帮我们判断是否溢出,就使用checked关键字。

    class Program
    {
        static void Main(string[] args)
        {
            int y = 2147483647;
            int x = 2147483647;
            int z = checked(x + y);
        }
    }

运行,抛出溢出异常:   

如果我们想手动捕获并打印异常,应该这样写:

    class Program
    {
        static void Main(string[] args)
        {
            int y = 2147483647;
            int x = 2147483647;

            try
            {
                int z = checked(x + y);
            }
            catch (OverflowException ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }

运行,

□ 使用unchecked

使用unchecked不会抛出溢出异常。

    class Program
    {
        static void Main(string[] args)
        {
            int y = 2147483647;
            int x = 2147483647;
            int z = unchecked(x + y);

            Console.WriteLine(z.ToString());
            Console.ReadKey();
        }
    }

结果为:-2

总结:checked关键字用来检查、捕获溢出异常,unchecked关键字用来忽略溢出异常。

checked和unchecked的区别

时间: 2024-10-08 20:50:30

checked和unchecked的区别的相关文章

java中checked异常和unchecked异常区别?

马克-to-win:checked和unchecked异常区别: (视频下载) (全部书籍)结论就是:1)RuntimeException和他的子类都是unchecked异常.其他的都是checked异常.马克-to-win:2)在编译阶段,编译器会检查每一个方法,看是否方法里面抛出了checked异常.假设抛出了checked异常,那个方法里必须加catch,或者加throws语句(下一节讲解),否则的话编译器会报错.马克-to-win:unchecked异常就没这规矩. ..........

[Android_Exception]Checked 和 Runtime Exception区别

Java里有个很重要的特色是Exception ,也就是说允许程序产生例外状况.而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别. 首先,您应该知道的是Java 提供了两种Exception 的模式,一种是执行的时候所产生的Exception (Runtime Exception),另外一种则是受控制的Exception (Checked Exception). 所有的Checked Exception 均从java.lang.E

Java异常之checked与unchecked

首先,java的异常分为Error和Exception.这两类都是接口Throwable的子类.Error及Exception及其子类之间的关系,大致可以用下图简述. 注意事项: 1. Error仅在java的虚拟机中发生,用户无需在程序中捕捉或者抛出Error. 2. Exception分为一般的Exception和RuntimeException两类.这里有点让人觉得别扭的是RuntimeException(Unchecked)继承于Exception(Checked)的父类. PS: ch

C# checked和unchecked详解

1.对基元类型执行的许多算术运算都可能造成溢出,有如下代码: Byte b=100; b=(Byte)(b+200); 简单的解读上面的代码: 第一步,将所有的操作数都扩大至32位或者64位(根据操作系统的位数决定).所以b和200(这两个值都不超过32位),首先转换成32位(假设当前操作系统是32位),然后加到一起.结果就是一个32位值(十进制300或者十六进制12C).注意此时的值为一个32位的操作数,必须转型为一个byte.C#不会隐式地执行这个转型操作,这正是第二行代码需要强制转换为By

Checked Exception & Unchecked Exception

查Spring事务管理时看到一句话: Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback:如果发生的异常是checked异常,默认情况下数据库操作还是会提交的. 那么,什么是Checked Exception & Unchecked Exception ? Unchecked Exception: a. 指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复. b. 包括Error与RuntimeException及

checked 和 unchecked 基元类型操作

对基元类型执行的许多算术运算都可能造成溢出: Byte b = 100; b = (Byte) (b + 200); // b 现在包含 44(或者十六进制值 2C) 重要提示:执行上述算术运算时,第一步要求所有操作数都扩大为 32 位值(或者 64 位值,如果任何操作数需要超过 32 位来表示的话).所以, b 和 200(这两个值都不超过 32 位) 首先转换成 32 位值,然后加到一起.结果是一个 32 位值(十进制 300,或十六进制 12C).该值在存回变量 b 之前,必须转型为一个

checked exception和unchecked exception区别

http://blog.csdn.net/yuefengyuan/article/details/6204317 一. Java 中定义了两类异常: 1) Checked exception: 这类异常都是Exception的子类 .异常的向上抛出机制进行处理,如果子类可能产生A异常,那么在父类中也必须throws A异常.可能导致的问题:代码效率低,耦合度过高.C#中就没有使用这种异常机制. 2) Unchecked exception: 这类异常都是RuntimeException的子类,虽

C#的checked和unchecked

C#的 checked关键字用于对整型算术运算和转换显式启用溢出检查. 简单点说,我们在进行数值计算时,运算结果可能会超出该类型能表达的数值范围,因而结果溢出.而这个溢出如果是含有变量的表达式的话,编译器默认是不会检查的(见第三段代码),为什么不检查,因为溢出检查比较耗时.可是我们在实际应用中,可能会遇到计算结果不能溢出的情况,因而我们可以使用checked块标记这段代码,然后运行时一旦发生溢出,这里会抛出异常,从而我们可以对其采取相应的解决方法. unchecked关键字则阻止溢出检查.注意这

java中checked和unchecked 异常处理

有两种类型的异常:一种是checked异常一种是unchecked异常,在这篇文章中我们将利用实例来学习这两种异常,checked的异常和unchecked异常最大的区别就是checked去唱是在编译时检查的而unchecked异常是在运行时检查的. 什么是checked异常呢? checked异常在编译时检查,这意味着如果一个方法抛出checked异常,那么它应该使用try-catch块或者使用throws关键字来处理这个异常,否则的话程序会报编译错误,命名为checked异常是因为是在编译时