日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

接口 类型转换 try-catch(学习笔记)

發(fā)布時間:2025/3/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接口 类型转换 try-catch(学习笔记) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(抽象類,接口)內(nèi)容已經(jīng)在前面的博客有記載http://www.cnblogs.com/tobecabbage/p/3460984.html? http://www.cnblogs.com/tobecabbage/p/3468115.html

  • 轉(zhuǎn)換的說明

-》隱式類型轉(zhuǎn)換:正常的值類型的隱式轉(zhuǎn)換,里氏轉(zhuǎn)換原則,裝箱

double? dNum=123;

-》強(qiáng)制類型轉(zhuǎn)換:正常的值類型的強(qiáng)制轉(zhuǎn)換,里氏轉(zhuǎn)換原則,拆箱

int num=(int)123.456;

-》類型轉(zhuǎn)型

int? num=Convert.ToInt32("123");


計(jì)算機(jī)只認(rèn)識0和1,所以用二進(jìn)制表示(兩個位bit),8個bit表示一個字節(jié)

int32 4個字節(jié) 0000 0000 0000 0000 0000 0000 0000 0000

因這二進(jìn)制不便于閱讀,所以計(jì)算機(jī)用16進(jìn)制描述數(shù)據(jù)。

8位一個字節(jié)

0000 0001  1?

0000 0010  2

0000 0011  3

0000 0100  4

0000 0101  5

0000 0110  6

0000 0111  7

....

1111 1111  0-255共256個數(shù)字? 恰好是16的平方

??????? 二進(jìn)制?? 16進(jìn)制

   1000 8

   1001 9

   1010 a

  ?? 1011?? b

   1100???c

  ?? 1101 d

?????????1110 e

   1111??? f

0001 0000??? 10


?單步調(diào)試到Main方法的最后一行,查看變量內(nèi)存地址中數(shù)據(jù)

?

?

double類型的數(shù)據(jù)可以除以0,得到正無窮大

double bd=90.0000; Console.WriteLine(bd/0.0000000000);//結(jié)果為正無窮大

?

里氏轉(zhuǎn)換見前面的博客已有記載,簡單解釋概括為:子類的對象new sub()分配的內(nèi)存空間地址偏移量比父類的對象New base()要大。所以一個父類的引用變量指向一個子類的對象是可以的,只是訪問不到子類的數(shù)據(jù)而已(若想訪問到子類對象的數(shù)據(jù),需要重寫父類的方法)。而一個父類的對象地址偏移量小,卻用一個子類的引用變量指向,這就意味這可以用這個子類的引用變量反問到子類的數(shù)據(jù),可是該子類引用變量指向的確實(shí)父類的對象,內(nèi)存空間里根本沒有子類的數(shù)據(jù)。這與子類引用變量能訪問到子類的數(shù)據(jù)相矛盾()。

里氏轉(zhuǎn)換 base? b= new sub();???? sub s=(sub)b;因?yàn)閎本來指向的就是一個sub()對象,里面存有子類的數(shù)據(jù),所以sub類型引用變量s能訪問到sub對象的數(shù)據(jù)。轉(zhuǎn)換陳功。里氏轉(zhuǎn)換的存在的目的是為了實(shí)現(xiàn)多肽。

?


裝箱拆箱前面博客已有記


  • 異常是程序中運(yùn)行時錯誤,它違反了一個系統(tǒng)的約束或應(yīng)用程序約束,或出現(xiàn)了正常操作時未預(yù)料的情形。?

Convert.ToInt32("123abc");//格式不正確

Convert.ToInt32("12345678901234567890");//對于int32太大或太小

寫程序

-》遇到程序怎么樣讓程序不掛起

-》怎樣拋出異常

try語句

如果程序沒有提供處理異常的代碼,系統(tǒng)會掛起這個程序。

?try語句用來指明被正異常保護(hù)的代碼塊,并提供代碼以處理異常。

?catch字句部分含有一個或多個catch字句。,這些都是處理異常的代碼塊,它們也稱為是異常的處理程序。

?finally塊含有在所有情況下都要被執(zhí)行的代碼,無論有沒有異常發(fā)生。

catch字句部分與finally字句部分必須至少有一個,如果兩個都有,finally必須放在最后,即catch字句的后面

處理異常的代碼

satic void Main(){

  int x=10;

  try{

    int y=0;

    x/y; 

  }

  catch{

    ...//處理異常的代碼

    Console.WriteLine("Handling all exceptions - Keeping on Runing");

  }

}

這段代碼產(chǎn)生以下消息。注意,除了輸出消息,沒有異常已經(jīng)發(fā)生的跡象。

Handling all exceptions-Keeping on Runing

異常類

有許多不同類型的異常可以在程序中發(fā)生,BCL定義了許多類,每一個類代表了一個指定的異常類型。當(dāng)一個異常發(fā)生時,CLR:

?創(chuàng)建該類型的異常對象;

?尋找適當(dāng)?shù)腸atch字句以處理它。

所有的異常都從根本上派生自System.Exception類。

System.Exception:所以異常類的基類

??-》SystemException:所有預(yù)定義系統(tǒng)異常的基類。IndexOfRangeException NullReference IOException

? -》ApplicationException:所有致命的、應(yīng)用程序定義的異常的基類。

異常對象含有只讀屬性,帶有導(dǎo)致該異常的信息。

  屬性?????? 類型???? 描述

  Message string 這個屬性含有解釋異常的原因的消息

 ? StackTrace???string ?這個屬性含有描述異常發(fā)生在何處的信息

???? InnerException? Exception 如果當(dāng)前異常是由另一個異常引起的,這個異常包含前一個異常的引用

???? HelpLink???????? string?????? 這個屬性可以被應(yīng)用程序定義的異常設(shè)置,為異常原因信息提供URN或URL

???? Source??????????? string?????? 如果沒有被應(yīng)用程序定義的異常設(shè)定,那么這個屬性含有異常起源所在的程序集的名稱。

Catch字句的三種形式

catch{

? Statements?? 一般catch字句,在catch關(guān)鍵字之后沒有參數(shù)列表,匹配try塊中引起的任何類型的異常。

}

catch(ExceptionType){

 Statements? 特定catch字句 帶有異常類的名稱作為參數(shù) 匹配任何該類型的異常

}

catch(ExceptionType Exception){

? Statements??? 帶對象的的特定Catch字句,在異常類名稱之后包括一個標(biāo)識符,該標(biāo)識符在catch字句塊中相當(dāng)于一個本地變量,并被稱為異常變量

}?????????????????????異常變量應(yīng)用異常對象,并能用于訪問該變量的信息

一般catch字句能接受任何異常,但不能確定引發(fā)異常的類型。

特定catch字句形式把一個異常類的名作為參數(shù),它匹配該指定類或派生自它的異常類的異常。

帶對象的特定catch字句提供最多的關(guān)于異常的信息。它匹配指定類的異常,或派生自它的異常類的異常。它還給出一個異常實(shí)例,稱為異常變量,它是一個對CLR創(chuàng)建的異常對象的引用。

?使用特定Catch字句的示例

int x=0;

try{

int y=0;

x/y;

}

catch(DivideByException){

...

Console.WritelLine("Handling an exception");

}

int x=0;

try{

int y=0;

x/y;

}

catch(DividedByException e){

  Console.WriteLine("Messsage:{0},e.Message);

  Console.WriteLine("Source:{0},e.Source);

  Console.WriteLine("Stack:{0},e.StackTrace);

}

Catch 字句塊目的是允許你以一種優(yōu)雅的方式處理異常。

catch字句塊可以包含多個catch字句,特定catch 字句允許多于一個,一般catch字句只允許一個。

catch字句的排序有兩個重要的規(guī)則

?特定catch字句必須以一種順序排序,最明確的異常類型第一,直到最普通的類型,例如,如果聲明一個派生自NullReferenceException的異常類,那么派生自異常類型的Catch子句應(yīng)該被列在NullReferenceException的catch字句之前。

?如果有一個catch子句,它必須是最后一個,它必須在所有特定的catch子句之后,使用一般catch子句一般是不好的,應(yīng)該盡可能使用特定的catch子句。一般catch子句通過讓程序繼續(xù)執(zhí)行隱藏錯誤。

  • 拋出異常

func1(){func2();}

func2(){func3();}

func3(){func4();}

如果func4()里面出現(xiàn)異常,首先在func4()里查找是否有匹配的異常處理的代碼,若沒有,繼續(xù)往上拋異常,在func3()里面找匹配的代碼塊...若一直沒找找到,就拋給Main()方法,若還是找不到匹配的異常處理代碼,繼續(xù)拋給CLR,繼續(xù)拋給操作系統(tǒng)。

class Program{static void Main(string[] args){Myclass MCls = new Myclass();try{MCls.A();}catch (System.DivideByZeroException){Console.WriteLine("catch cause in main()");}finally{Console.WriteLine("finally cause in main()");}Console.WriteLine("After try statement in Main.");Console.WriteLine(" ---keep running");Console.ReadKey();}}class Myclass{public void A(){try{B();}catch (System.NullReferenceException){Console.WriteLine("catch clause in A()");}finally{Console.WriteLine("finally clause in A()");}}void B(){int x = 0, y = 0;try{x/=y;}catch (System.IndexOutOfRangeException){Console.WriteLine("catch clause in B()");}finally{Console.WriteLine("finally clause in B()");}}}

程序運(yùn)行結(jié)果

圖解:

?拋出異常

throw new Exception();

  • ?異常的性能問題
static void Main(string[] args){Stopwatch s = new Stopwatch();s.Start();int sum = 0;for (int i = 0; i < 100;i++ ){sum += i;}s.Stop();Console.WriteLine(s.Elapsed);//結(jié)果為00:00:00:0.0000079 Console.ReadKey();} static void Main(string[] args){Stopwatch s = new Stopwatch();s.Start();int sum = 0;for (int i = 0; i < 100;i++ ){try{throw new Exception("錯誤");}catch (System.Exception ex){}}s.Stop();Console.WriteLine(s.Elapsed);//結(jié)果為00:00:01:2128577 Console.ReadKey();}


從以上代碼中可以看出,try{}catch(){}會導(dǎo)致運(yùn)行速度非常慢。所以建議慎用try-catch字句,盡可能用if-esle。若是涉及到訪問本地文件,沒有權(quán)限,或是訪問數(shù)據(jù)庫,網(wǎng)忽然斷掉的異常采用try-catch

?

?

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

轉(zhuǎn)載于:https://www.cnblogs.com/tobecabbage/p/3528076.html

總結(jié)

以上是生活随笔為你收集整理的接口 类型转换 try-catch(学习笔记)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。