A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

static void Main(string[] args)
{
    Person per=new person();
    per=null;
    per.Name="zzz";
    Console.ReadKey();
}
public class Person
{
     public string Name
        {
            get;
            set;
        }
        public string Gender
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
}
这个属于运行时错误还是编译错误????为什么?

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 张伟86 于 2013-5-4 23:53 编辑

此例当属运行时错误,如果不计较楼主在语句“Person per = new person();”在范的书写错误的话,就只是运行时错误了。
为什么是运行时错误?我们使用IDE下的编译器编译程序,既然编译器不报错,自然不是编译错误,而楼主的程序也不报错,就剩下运行时错误了。
而产生错误的原因就是:“per = null;”语句使得per指向内存重新为空,也就相当于per没有被初始化,运行时就报错了。将语句“Person per = new person();”中的 “= new person()”注释掉,重新编译程序,会发现跟楼主现在的程序是一样的报错信息:未将对象引用设置到对象的实例。
下面附上调试图解:主要注意per的值变化





评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
其实查看编译错误还是运行错误的最简单方法就是右击项目重新生成,看看有没有报错,如果报错了就是编译错误,如果生成没有错误,运行了有错误的话,那就是运行错误
回复 使用道具 举报
可是编译试试,java的异常大体分为两种。一种是eorrw。这种异常时需要修改代码的。属于严重异常。还有一种是exception。这种异常是可处理的异常。你说的运行时异常就在exception里。只要编译能通过。要么就是正确代码。要么就是运行时异常。但假如编译不能通过也有两种情况。一种是语法错误。第二种是你遇到异常没有处理。处理的方式:自己能处理就try。。。catch。。。自己不能处理,那么可以选择抛(throws/throw)给调用者来处理。
以上是判断异常的方式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马