与实例化/继承相关的错误 class 不能用 try~catch 语句处理吗?
Can't errors related with instantiating / inheriting class be treated by try~catch statement?
我希望 运行 下面的 C# 代码来练习抽象/密封的用法 classes :
using System;
abstract class Person
// abstract : can be inherited but can't be instantiated
{
public Person()
{
Console.Write(this + " : ");
}
}
sealed class MichaelJackson : Person
// sealed : can't be inherited but can be instantiated
{
public void Say()
{
Console.WriteLine("Billie Jean is not my lover.");
}
}
class BilleJean : MichaelJackson
// An error will occurs because it tries to inherit a sealed class
{
public void Say()
{
Console.WriteLine("You are the one.");
}
}
class MainClass
{
static void Main(string[] args)
{
try
{
new Person();
// An error will occurs because it tries to be instantiated as an abstract class
}
catch (Exception e)
{
Console.WriteLine("Abstract class can't be instantiated.");
}
new MichaelJackson().Say();
try
{
new BilleJean().Say();
}
catch (Exception e)
{
Console.WriteLine("MichaelJackson : The kid is not my son");
}
}
}
如您所知,抽象class Person
不能直接实例化,密封class MichaelJackson
也不能被其他class BillieJean
.
我的意思是得到如下结果,但代码没有 运行 尽管我添加了 try~catch
语句。
Abstract class can't be instantiated.
MichaelJackson : Billie Jean is not my lover.
MichaelJackson : The kid is not my son.
我该如何解决这个问题?
try-catch 块仅捕获 运行 个时间错误,a.k.a 个异常。如果我没记错的话,你得到的一定是编译时错误。你能验证一下吗?此外,您的 IDE 应该显示错误。
您混淆了编译错误和运行时间异常。
试图继承密封的class会产生编译错误。这意味着不会创建可执行文件,您将无法 运行 您的代码。
try-catch 语句在 运行 时间捕获异常。例如,它可能会捕获“被 0 除”异常,但它无法捕获编译器抱怨的语法错误或逻辑错误。
术语“运行time”是指代码为运行ning的时间。这意味着编译器成功创建了一个可执行文件,您可以启动它。当出现警告(绿色波浪线)、代码问题或提示(蓝色波浪线)时,编译器可以编译成功,但当出现错误(红色波浪线)时,编译器无法编译。
我希望 运行 下面的 C# 代码来练习抽象/密封的用法 classes :
using System;
abstract class Person
// abstract : can be inherited but can't be instantiated
{
public Person()
{
Console.Write(this + " : ");
}
}
sealed class MichaelJackson : Person
// sealed : can't be inherited but can be instantiated
{
public void Say()
{
Console.WriteLine("Billie Jean is not my lover.");
}
}
class BilleJean : MichaelJackson
// An error will occurs because it tries to inherit a sealed class
{
public void Say()
{
Console.WriteLine("You are the one.");
}
}
class MainClass
{
static void Main(string[] args)
{
try
{
new Person();
// An error will occurs because it tries to be instantiated as an abstract class
}
catch (Exception e)
{
Console.WriteLine("Abstract class can't be instantiated.");
}
new MichaelJackson().Say();
try
{
new BilleJean().Say();
}
catch (Exception e)
{
Console.WriteLine("MichaelJackson : The kid is not my son");
}
}
}
如您所知,抽象class Person
不能直接实例化,密封class MichaelJackson
也不能被其他class BillieJean
.
我的意思是得到如下结果,但代码没有 运行 尽管我添加了 try~catch
语句。
Abstract class can't be instantiated.
MichaelJackson : Billie Jean is not my lover.
MichaelJackson : The kid is not my son.
我该如何解决这个问题?
try-catch 块仅捕获 运行 个时间错误,a.k.a 个异常。如果我没记错的话,你得到的一定是编译时错误。你能验证一下吗?此外,您的 IDE 应该显示错误。
您混淆了编译错误和运行时间异常。
试图继承密封的class会产生编译错误。这意味着不会创建可执行文件,您将无法 运行 您的代码。
try-catch 语句在 运行 时间捕获异常。例如,它可能会捕获“被 0 除”异常,但它无法捕获编译器抱怨的语法错误或逻辑错误。
术语“运行time”是指代码为运行ning的时间。这意味着编译器成功创建了一个可执行文件,您可以启动它。当出现警告(绿色波浪线)、代码问题或提示(蓝色波浪线)时,编译器可以编译成功,但当出现错误(红色波浪线)时,编译器无法编译。