上节复习:

         字符串_集合

         1.值类型与引用类型的区别

                  储存:

                   值类型储存在 堆 中

                   引用类型的对象储存在堆中,而变量储存在栈中;

                   引用类型 相当于指向同一内存对象的两个变量

                   值类型 相当于独立的两个对象

         2.装箱与拆箱是什么

                   将其他类型的变量转化为 object 类型为装箱

                  反之 为拆箱

         3.异常是什么?

                   在执行过程出现的问题

                   异常实际就是一个类,一个对象

         4.多态的实现的方式

                   父类实现多态   new override

抽象类实现多态 abstract override

                   接口实现多态       

====================================================================

本堂内容:

1.GC  垃圾回收器

.net 应用程序作为一个托管的运行机制,CLR里面有一个极其重要的部分,就是垃圾回收;

         01 垃圾回收的目的:

                   为了防止内存溢出

         02 何时回收:

                   刚刚生成的对象都叫0代

                   回收一次,那些没有被回收的对象就变成1代,并处理碎片

                   回收两次,那些没有被回收的对象就变成2代,并处理碎片

                   没有第3代;超出2代就异常

                   每一代都有一个内存大小

0代 满了就回收一次 没用的内存被回收,有用的变成1代,而且0代变为空,可以继续装;

                   同样 1代 满了会再回收一次,2代满了就报异常

                 

         03 怎么回收:

当有程序不用时,删除后会会内存留下碎片,系统会对其他应用自动重新排序,把碎片清楚后内存回收

2.异常处理

         如何抛出异常?

                   异常实际就是一个类,一个对象

                   throw new Exception("异常信息");

         异常抛哪儿了?

                   异常抛给调用它的方法

                   如果该方法没有处理异常,就再往上抛;

                   如果做了异常处理,就不再往上抛;

                   try

                   {

                            Func();

                   }

                   catch(Exception ex)

                   {

                            ConSole.WriteLine(ex.Message);

                   }

                   ConSole.ReadKey();

                   public static void Func()

                   {

                            throw new Exception("异常信息");

                   }

------------------------------------------------------------------

3.字符串

         01 字符串的定义方法:

                   string str = "我是字符串";

                   char[] chars = {'1','2','si'};

                   string str1 = new string (chars);

                   string str2 = new string('c',3);// str2 = "ccc";

         02 字符串的数组使用:

                   字符串有一个很特殊的使用方式,当做数组进行遍历

                 

                   char[] chs = str.ToCharArray();

                   chs[0] = '你';

                   str = new string (chs);

                   这样 str = "你是字符串";

         03 常见的字符串属性与方法:

                   参考MSDN

                   参考我的文档

                   001 字符串比较

                            ToUpper();转化为大写

                            ToLower();转化为小写

                            对于忽略大小写的比较 先转换统一格式 再比较

                            int string.Compare(str1,str2)

                            结果: str1 > str2     返回  1

                                   str1 = str2     返回  0

                                        str1 < str2     返回  -1

                            字符串比较 按字母顺序 a < b < c < ……

                            大小写:A > a

                   int res = string.Compare(str1,str2,true)  忽略大小写 如为 false 则 不忽略大小                   写

                            Equals

                                     bool str1.Equals(str2);

                                     bool string.Equals(str1,str2);

                                     bool string.Equals(str1,str2,StringComparison.OrdinalIgnoreCase);

                                     最后一个重载是忽略大小写比较

                   002 修整 Trim

                            i 去掉两端空格

                            string str = "    1111   ";

                            string str1 = str.Trim();

                            ii 去掉两端的其他字符

                            string stemp = "[][1123]][";

                            string stemp1 = stemp.Trim(']','[');

                            即得: stemp1 = "1123";

                   003 合并与分割

                            i 合并

                            string[] strs = {"hello","你好","嗨"};

                            string.Join(分隔符,数组);

                            string str = string.Join("|",strs);

                            ii 分割

                            语法:

                            string[]str1 = str.Split(需要分割的符号);

                          

                            例:

                            string path = @"c:\\windows\system32\1.dll";

                            string[] paths = path.Split ('\\');

                          

                            string str = "I am a student how are you !";

                            string[]strs = str.Split(' ','!');处理后会有空字符

                            string[] strs1 = str.Split(new char[]{' ','!'},stringSplitOption.RemoveEmptyEntries);

                            这样处理后 空字符会被删除掉

                   004 字符串的查找

                            1. Contains

                            string str = @"D:\music\孙燕姿_我不难过.mp3";

                            bool str.Contains("要找的字符串")

                            bool isRight = str.Contains("孙燕姿");

                          

                            2. IndexOf

                            找出来有没有该字符串之外,如果找到,应该给出改字符串的位置;

                            int str.IndexOf("要查找的东西");

                            用该方法 找到要查找东西 返回改字符串的位置,找不到就返回-1;

                            int index = str.IndexOf("孙燕姿");

若同一个字符串中要查找的字符串多次出现 该重载只能查找第一个该字符串出现的位置;

                            int index = str.IndexOf("孙燕姿",10);

                            从字符串的下标为10的字符开始查找,找到第一个要查找字符串开始返回;

                            找出所有的要查找的字符串

                            int index = -1;

                            do

                            {

                                     index = str.IndexOf("孙燕姿",index+1);

                                     if(index !=-1)

                                     {

                                               ConSole.WriteLine(index);

                                     }

                            }

                            while ( index !=-1);

                   特例:

                            string str2 = "cccccccccccccc";

 

            int index = -1;

            do

            {

                index = str2.IndexOf("cc", index + 1);

                if (index!=-1)

                {

                    Console.WriteLine(index);

                }

 

            } while (index != -1);

            Console.ReadKey();

                                   

                            3. IndexOfAny:

                            string str = "1b1b2nn3m4n5b6i";

                            char[]nums = {'1','2','3','4','5','6'};

str.IndexOfAny(nums,1); 即从下标为1开始查找,遇到第一个数组中有的字符开始返回;

                                   

                            LastIndexOf:

                            从后面开始查找

                   005 求子字符串

                            Substring()

                            1. string str.Substring(index)

                            返回从index开始到最后的所有部分

                            string str = @"D:\music\孙燕姿_我不难过.mp3";

                          

                            int index = path.LastIndexOf('\\');

                            string temp = path.Substring(index+1);

                          

                            若index 的数值大于字符串的长度则会异常

                            2. string str.Substring(index,Length)

                            string data = "2012年6月29日";

                            int index = data.IndexOf('月');

                            string temp = data.Substring(index+1,2);

                          

                   006 应用实例:走马灯

                            string str = "我是一个走马灯";

                            while(true)

                            {

                                     ConSole.Clear();

                                     string head = str[0].ToString();

                                     string body = str.Substring(1);

                                     str = body + head;

                                     ConSole.WriteLine(str);

                                     System.Threading.Thread.Sleep(200);

                            }

                   007 字符串的插入、移除和替换

                            1.Insert

                            string str = "013456";

                            str = str.Insert(2,"2");

                            结果为 str = "0123456";

                            2.Remove

                            string str = "0123456";

                            str =str.Remove(3);

                            结果为 str = "012";

                            str = str.Remove(3,1);

                            结果为 str = "012456";

                            3.Replace

                            string str.Replace("原字符串","新字符串");

                            string str.Replace('原字符','新字符');

                            string data = "2012年06月29日";

                            string temp = data.Replace("年","-").Replace("月","-").Replace("日","");

                   008 判断开始和结尾

                            比如检查是否为MP3歌曲

                            string path = @"d:\123\234\always online.mp3";

                            bool path.EndsWith(".mp3")

                            if(path.EndsWith(".mp3"))

                            {

                                     ConSole.WriteLine("是mp3");

                            }

                            else

                            {

                                     ConSole.WriteLine("不是mp3");

                            }

                            同样还有 bool path.startswith("字符串");

                   009 格式化字符串

                            string.Format();

                            //ConSole.WriteLine("{0}{1}{2}={3}",1,"+",2,3);

                            string str = string.Format("{0}{1}{2}={3}",1,"+",2,3);

                            与 ConSole.WriteLine()功能很相似;

                            所不同的是 CW 为输出, Format 为返回;

         3. StringBuilder

                   StringBuilder sb = new StringBuilder();

                   sb.Append(拼接对象);  追尾添加

                   sb.AppendLine(拼接对象); 换行添加

                   sb.AppendFormat(拼接对象);

                   sb.Clear();清除

         4. Equals

                   bool b = str1.Equals(str2);

                   class MyClass

                   {

                            public int num;

                            public override bool Equals(object obj)

                            {

                                     MyClass m = obj as MyClass;

                                     if(m==null)

                                     {

                                               return false;

                                     }

                                     return this.num == m.num;

                            }

                          

                   }

                   main 函数中

                   MyClass m1 = new MyClass();

                   m1.num = 10;

                   MyClass m2 = new MyClass();

                   m2.num = 10;

                   bool Isright = m1.Equals(m2);

                  返回值为 false ;(自己验证为 true )

                 

                   ==  比较对象在内存中的物理地址

                   string str = "123";

                   string str2 = "123";

                   bool Isright = str == str2;

                   返回 true;

                   char[]chs={'1','2'};

                   string str = new string(chs);

                   string str2 = new string(chs);

                   bool isright = str==str2;

                   返回值 true;

                   因为 字符串拘留池(驻留池);

                   所有相同的字符串均指向同一内存对象;

                   一般 新字符串 赋值:string  temp = string.Empty;

                 

                 

                   而

                   MyClass m1 = new MyClass();

                   m1,num = 10;

                   MyClass m2 = new MyClass();

                   m2.num = 10;

                   bool Isright = m1.Equals(m2);

                   返回值为 false ;(自己验证为 true )

       

 

                 

疑问:

      01 对于引用类型:

                   什么时候赋值是改指向, 什么时候是改内容

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

posted on 2012-06-29 21:13  轻雨  阅读(436)  评论(0)    收藏  举报