一、调试和错误处理
错误 :可能是变量名写错,导致编译器无法编译,也有可能是逻辑在某些方面有瑕疵,也会产生错误。这类错误称为逻辑错误。在程序出错之后,我们可以使用VS提供给我们的调试功能,找到错误的原因修改代码。
C语言中的错误处理技术,对可能发生错误的地方采取预防措施,并编写弹性代码来处理可能会发生的致命错误。
正常模式下的调试:指的是不会影响程序的正常运行。在VS中我们使用writeLine方法向控制台输出变量的值,通过这个我们可以查看变量的值是否符合我们的预期来调试错误。
中断模式下的调试:中断模式指我们可以暂停程序的执行,然后查看程序中的状态,也可以让程序继续执行。使用断点就可以让程序中断,代码是源代码中自动进入中断模式的一个标记,当遇到断点的时候,程序会自动进入中断模式。
插入断点的方法:
1,右击代码行,选择breakpoint (断点),然后选择Insert breakpoint(插入断点)。
2,光标定位到代码行,按下F9键,在此按下F9是取消断点。
3,在需要添加断点的那一行首端的位置,直接单击断点就添加成功了,再次单击取消断点。
添加断点后选择运行,在调用堆栈窗口下我们可以观察到当前代码执行到哪一行了,并且可以看到这个代码的是被什么语句调用的。即时窗口我们可以在这里输入一些命分,查看变量的值,修改变量的值,可以输入表达式查看结果。
单步执行代码:
在中断模式下我们可以单步执行代码,单步执行带有有两种:逐过程和逐语句,他们两个都是一条语句一跳语句的执行,区别在于逐过程遇到函数,不会进入函数内部,而把函数当成一条语句去执行,而逐语句则会进入函数内部。
二、异常及异常处理
异常:异常是在运行期间代码中产生的错误。
异常处理:
在开发过程中我们会查找和修正错误,使这些错误不会在发布的代码中出现,但有时,我们知道某一个地方可能会有错误发生,但不能100%的肯定他会不会发生,此时最好能预料到错误的发生,提前编写代码以处理这些错误,将其异常抛出,而不必中断程序的执行,异常处理就是用于这个目的。如果我们不管的话,当程序运行到这里的时候就会出现异常,如果我们不去处理这个异常,那么当异常发生的时候,程序会终止掉,然后异常后面的代码都无法执行。
异常处理语句:
try{
……
}catch( ){
……
}
finally{
}
其中catch块可以有0或者多个,finally可以有0或者1个
但是如果没有catch块,必须有finally块;没有finally块,则必须有catch块;catch块和finally
块可以同时存在。这其中try块必须有。
代码块的用法:
try块包含了可能出现异常的代码(一条或者多条语句)
catch块用来捕捉异常,当代码发生异常,那么异常的类型和catch块中的类型一样的时候,就会执行该catch块,如果catch块的参数不写,表示发生任何异常都执行这个catch块。
finally块包含了始终会执行的代码,不管有没有异常产生都会执行。
三、修饰符
修饰符: 用来类型或者成员的关键字,修饰符可以指定方法的可见性
Public :同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员
Private :只有同一类或结构中的代码可以访问该类型或成员
Protected :只有同一类或结构或者此类的派生代码才可以访问该类型或成员
internal :同一程序集中的任何代码都可以访问该类型或成员,但代码不可以
Protected internal :在一程序集中Protected internal 体现的是internal的性质;在其它程序集中,Protected internal 体现的是protected 的性质
public 和private 修饰字段和方法的时候,表示该字段或者方法能不能通过对象去访问,只有public 的才可以通过对象访问,private (私有的)只能在类模版内部访问
Protected 保护的,当没有继承的时候,它的作用和private 是一样的,当有继承的时候,protected 表示可以被子类访问的字段或者方法
类的修饰符:
Public class (类名)和class (类名),前者可以在别的项目下访问,后者不行
隐藏继承的成员修饰符:
1、Abstract
使用abstract 修饰的类为抽象类,不能与sealed 、static 一起使用,abstract 可以修饰抽象类中的方法或属性,此时,方法和属性不能包含实现,且访问级别不能为私有,且抽象类不能被实例化。
2、Sealed
使用sealed修饰的类为密封类,密封类无法被继承,不能和abstract、static一起使用。当sealed用于方法或属性时,必须始终与override一起使用。
3、static
使用static修饰的类为静态类,静态类所有成员都必须是静态的,不能与abstract、 sealed一起使用。Static 可以修饰方法、字段、属性或事件,始终通过类名而不是实例名称访问静态成员,静态字段只有一个副本,且静态类不能被实例化。
4、const
使用const关键字来声明某个常量字段或常量局部变量,必须在声明常量时赋初值。不能与static一起使用,常量默认是static的,常量字段只有一个副本。
5、readonly
使用readonly关键字来声明只读字段。只读字段可以在声明或构造函数中初始化,每个类或结构的实例都有一个独立的副本,可以 static一起使用,声明静态只读字段。静态只读字段可以在声明或静态构造两数中初始化,静态常量字段只有一个副本。
6、virtual
virtual 可以修饰方法、属性,索引器或事件声明,并使他们可以在派生类中被重写,默认情况下,方法是非虛拟的。不能重写非虚方法。virtual修饰符不能与static、abstract、private或override修饰符一起使用。
7、override
要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虛实现,必须使用override修饰符。
重写的成员必须是virtual、abstract或override的。
四、集合
集合类列表List:
当我们有很多类型一样的数据的时候,前面我们一般使用数组来进行管理,但是这样有个缺点就是数组的大小是固定的,这个时候我们就可以使用数组了。
列表List的创建和使用:
1,创建列表可以存储任何类型的数据,在创建列表之前要先new一个对象,因为在创建列表对象的时候首先要指定你要创建的这个列表要存储什么类型的。
2.用scoreList.add()往列表中插入数据。
3,获取列表中的数据和数组有点相似,索引从0开始,通过索引来访问,scoreList[i]访问添加到列表中的第i个数据。