1.异常处理
- 查看:
按F5出现异常中断,查看异常详细信息 - 处理:
try
{
…
}
catch( exceptionType e )
{
…
}
finally
{
…
} - try块包含可能出现的异常代码(一条或多条语句)
- catch块用来捕捉异常,当代码发生异常,则当异常的类型和catch块中的类型一样的时候,就会执行该catch块,如果catch块的参数不写,表示发生任何异常都执行这个catch块
- finally块包含了始终会执行的代码,不管有没有异常产生都会执行
其中catch块可以有多个,finally可以有0或者1个,但是catch块和finally块两者必须至少有一个,两者可以同时存在。
例如:
static void Main(string[] args)
{
int[] officially = { 20, 20, 20, 20 };
int num = officially[4];
}
发现有名为IndexOutOfRangeException的异常
若
static void Main(string[] args)
{
try
{
int[] officially = { 20, 20, 20, 20 };
int num = officially[4];
}
catch(IndexOutOfRangeException)
{
Console.WriteLine("It's IndexOutOfRangeException");
}
finally
{
Console.WriteLine("This is finally");
}
输出为
并且将int num = officially[4];中越界的officially[4]改为officially[3]之后(即无异常出现之后),finally依然会执行,此时输出为
2.异常处理
案例:
计算用户输入的两个整数的和。
(若输入字母,小数则出现异常)
做法:利用while、try和break来控制异常输入,若用户输入异常,则提醒用户重新输入,若输入正确则输入第二个数字,对第二个数字进行同样的做法,最后计算出和。
代码:
int num1, num2;
//输入第一个数
while (true)
{
try//当try块中的一条代码发生异常时,其后剩余代码都不会再执行了
{
num1 = Convert.ToInt32(Console.ReadLine());
break;
}
catch
{
Console.WriteLine("Please type the number again");
}
//break;注意break不能写在try外,否则不管发不发生异常其都会执行
}
//输入第二个数
while (true)
{
try
{
num2 = Convert.ToInt32(Console.ReadLine());
break;
}
catch
{
Console.WriteLine("Please type the number again");
}
}
int sum = num1 + num2;
Console.WriteLine(sum);
编译结果如下
3.类
定义
类的成员包括数据成员和函数成员
- 数据成员
包含类的数据——字段,常量和事件的成员 - 函数成员
提供了操作类中数据的某些功能(方法,属性,构造方法和终结器(析构方法),运算符,索引器)
声明
-
字段的声明
访问修饰符 类型 字段名称; -
方法的声明
访问修饰符 返回值类型 方法名称(参数)
{
//方法体
}
如果要使用一个类的话,要先引入它所在的命名空间,若类在当前命名空间下则不需要引入
自己定义的类要先进行初始化,需要使用new加上类名
如
Gods god;
god = new Gods();//对象的初始化
god.name = "LJY";
Console.WriteLine(god.name);
如果我们直接在方法内部访问同名的变量的时候,优先访问最近的变量(即形参而不是类的字段或方法),但可以用this.表示访问的是类的字段或方法
如
public void Set(float x)
{
//x=x;//访问的都是形参
this.x=x;
}
4.构造函数
声明一个和所在类同名的方法,但是该方法没有返回类型。当我们使用new关键字创建类的时候(即比如Vector3 v1 = new Vector3() ;)就会调用构造方法。
一般构造方法用于进行初始化数据的操作。
当我们不写任何构造函数的时候,编译器会提供给我们一个默认的无参构造函数,但是如果我们定义了一个或多个构造函数,编译器就不再提供默认的构造函数。