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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

  • 轉換的說明

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

double? dNum=123;

-》強制類型轉換:正常的值類型的強制轉換,里氏轉換原則,拆箱

int num=(int)123.456;

-》類型轉型

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


計算機只認識0和1,所以用二進制表示(兩個位bit),8個bit表示一個字節

int32 4個字節 0000 0000 0000 0000 0000 0000 0000 0000

因這二進制不便于閱讀,所以計算機用16進制描述數據。

8位一個字節

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個數字? 恰好是16的平方

??????? 二進制?? 16進制

   1000 8

   1001 9

   1010 a

  ?? 1011?? b

   1100???c

  ?? 1101 d

?????????1110 e

   1111??? f

0001 0000??? 10


?單步調試到Main方法的最后一行,查看變量內存地址中數據

?

?

double類型的數據可以除以0,得到正無窮大

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

?

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

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

?


裝箱拆箱前面博客已有記


  • 異常是程序中運行時錯誤,它違反了一個系統的約束或應用程序約束,或出現了正常操作時未預料的情形。?

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

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

寫程序

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

-》怎樣拋出異常

try語句

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

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

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

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

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");

  }

}

這段代碼產生以下消息。注意,除了輸出消息,沒有異常已經發生的跡象。

Handling all exceptions-Keeping on Runing

異常類

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

?創建該類型的異常對象;

?尋找適當的catch字句以處理它。

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

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

??-》SystemException:所有預定義系統異常的基類。IndexOfRangeException NullReference IOException

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

異常對象含有只讀屬性,帶有導致該異常的信息。

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

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

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

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

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

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

Catch字句的三種形式

catch{

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

}

catch(ExceptionType){

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

}

catch(ExceptionType Exception){

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

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

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

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

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

?使用特定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 字句塊目的是允許你以一種優雅的方式處理異常。

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

catch字句的排序有兩個重要的規則

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

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

  • 拋出異常

func1(){func2();}

func2(){func3();}

func3(){func4();}

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

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()");}}}

程序運行結果

圖解:

?拋出異常

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);//結果為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);//結果為00:00:01:2128577 Console.ReadKey();}


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

?

?

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

轉載于:https://www.cnblogs.com/tobecabbage/p/3528076.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美大胆a视频 | 中日精品一色哟哟 | 一级特黄a| 天堂中文在线播放 | 国产美女网 | 天天插天天操天天干 | 日韩第一页| 成人极品| 麻豆视频在线播放 | 久久伊人国产 | 久久国产主播 | 国产精品成人69xxx免费视频 | 久久精品国产亚洲AV成人雅虎 | 亚洲久久一区 | 18禁超污无遮挡无码免费游戏 | 成年人在线免费看 | 精品人伦一区二区三区蜜桃免费 | 青青视频网 | 免费无码肉片在线观看 | 国产伦理一区 | 国产又大又粗又爽 | 国产视频精品在线 | 俺来也俺也啪www色 欧洲一区二区视频 | 日日躁夜夜躁狠狠久久av | 中文字幕乱码亚洲无线三区 | 一级片在线播放 | 一区二区成人在线 | 黑人巨茎大战欧美白妇 | 精国产品一区二区三区a片 国产精品第一 | 西欧free性满足hd老熟妇 | 国产又粗又猛视频 | 在线免费黄色网址 | 97香蕉视频 | 日韩欧美二区三区 | 欧美一区二区最爽乱淫视频免费看 | 在线免费国产 | 在线看日本 | 日本九九视频 | 美女av毛片 | 鲁一鲁在线视频 | 日韩美女视频网站 | 91综合国产| 在线高清观看免费 | av先锋资源网| 加勒比一区二区三区 | 午夜影视体验区 | 色欲av无码精品一区 | 午夜时刻免费入口 | 不卡的av在线免费观看 | 欧美一区二区三区婷婷月色 | 一区二区乱子伦在线播放 | 亚洲黄色在线视频 | 久久精品黄色 | 久久久免费看片 | 欧美激情 亚洲 | 亚洲欧美日本在线 | 美女av在线播放 | 精品国产丝袜一区二区三区乱码 | 国产思思 | 九九热精品在线 | 成人勉费视频 | 一级视频片 | 中文字幕精品久久 | 一级在线毛片 | 日本成人在线免费视频 | 精品中文字幕在线播放 | 2019狠狠干| 99热都是精品 | 国产在线视频99 | 成人aaaaa| 国精产品一区一区三区视频 | 日本va欧美va国产激情 | 国产又粗又长又硬免费视频 | 中文av一区二区三区 | 亚洲视频三区 | 亚洲色图偷拍视频 | 人妻无码久久精品人妻 | 国产精品久久欧美久久一区 | 欧美成人精品三级网站 | 高潮videossex高潮 | 亚洲精品无码不卡在线播he | 亚洲综合中文字幕在线 | 男男全肉变态重口高h | 亚欧精品在线观看 | 日本视频一区二区 | 亚洲一区二区三区在线播放 | 日本激情视频在线观看 | 四虎免费观看 | 狠狠干夜夜操 | 亚洲中文字幕无码专区 | 综合色区| 伊伊成人 | 日韩电影中文字幕在线观看 | 国产精品免费精品一区 | 国产婷婷一区二区三区 | 亚州av网 | 亚洲自拍图片 | 国产 福利 在线 | 手机看片一区 |