这是下的一段源码,我觉得有问题,但是不知道怎么改....帮帮忙.初学嘛,如果能帮我详细的解释下更好
void setStr()是干嘛用的?不是有构造函数MyException赋值了吗? 程序到底是怎么执行的啊class MyException extends Exception
{
private String ss;
MyException(String s)
{
ss=s;
}
String  getStr()
{
return ss;
}
void setStr(String s)
{
ss=s;
}
}
public class MyExceptionDemo
{
public static void main(String[] args)
{
  try
  {
   throw new MyException("MyException occur");
  }
  catch(MyException e)
  {
   
   String ss=e.getStr()//怎么没调用void setStr()啊
   System.out.println("My Exception message:"+ss);
  }
}
}

解决方案 »

  1.   

    构造函数只是创建对象时初始化赋值,以后想改变这个ss需要通过setStr方法。
      

  2.   

    构造函数就是用来初始化对象的。
    对象已经存在的话,可以调用setStr()方法传入参数改变成员变量的值。
      

  3.   

    1 错误E:\>javac MyExceptionDemo.java
    MyExceptionDemo.java:23: 不兼容的类型
    找到: MyException
    需要: java.lang.Throwable
                      throw new MyException("MyException o
                            ^
    MyExceptionDemo.java:25: 不兼容的类型
    找到: MyException
    需要: java.lang.Throwable
                 catch(MyException e)
                       ^
    2 错误E:\>javac MyExceptionDemo.java
    MyExceptionDemo.java:24: 不兼容的类型
    找到: MyException
    需要: java.lang.Throwable
                      throw new MyException("MyException o
                            ^
      

  4.   

    getStr和setStr方法都必须显示调用,不会默认调用的。你之所以会执行getStr的方法,因为你显示调用了String ss = e.getStr();
      

  5.   

    一个自定义异常 
    void setStr()是干嘛用的:用来赋值的 
      

  6.   

    还有上次有个计算圆面积的程序,要用到Math类,最后还是手动导入lang包才编译成功的。这次导入lang包也没用了...天啊。我要死了。
      

  7.   

    为什么楼上那几个人可以编译啊,我的就是那样的错误,是不是JDK出了问题?
      

  8.   

    不是给你贴了吗,你试了吗,你看看是不是你的classpath没有配置对啊
    你应该弄明白java的默认包是什么,是怎么导入的 
    一般是运行时,java虚拟机通过设置的classpath找到lib下的包 
    你想让它自动找到,就加到classpath中就可以了 你的classpath里面要加入  '.' 
      

  9.   

    程序编译不了?会不会是文件名的问题?文件名应该为MyExceptionDemo.java
      

  10.   

    在那个java文件所在的目录编译java程序,如java在e盘下,E:/java/JavaDemo.java
    则在doc下到java那个文件夹那个目录,cd E:java 输入doc命令:
    E:\java> javac JavaDemo.java
    就好了,
    加分啊,给你回答两个了
      

  11.   

    是E:\java> javac MyExceptionDemo.java 
    刚才错了
      

  12.   

    String ss=e.getStr()//怎么没调用void setStr()啊这句中没有分号!
      

  13.   

    结果: My Exception message: MyException occur
    另外,lang不需要导入
      

  14.   

    对不起,我发贴的时候写那句注释"//怎么没调用void setStr()啊"不小心弄掉分号了,我这里不存在分号丢失的问题。
    编译时候仍然报错:
    E:\>javac MyExceptionDemo.java
    MyExceptionDemo.java:23: 不兼容的类型
    找到: MyException
    需要: java.lang.Throwable
                              throw new MyException("MyException occur!");
                                    ^
    MyExceptionDemo.java:25: 不兼容的类型
    找到: MyException
    需要: java.lang.Throwable
                       catch(MyException e)
                             ^
    2 错误
      

  15.   


    D:\Lesson>javac Test.java        //原文复制的。
    Test.java:28: 需要 ';'
                      String ss=e.getStr()//怎么没调用void setStr()啊
                                          ^
    1 错误D:\Lesson>javac Test.java        //加上分号后。D:\Lesson>java Test
    My Exception message:MyException occurD:\Lesson>
    结论:楼主的 JDK 貌似有问题。
      

  16.   

    恩 我的上面 也是好 的  可以用eclipse 等IDE 工具试下
      

  17.   

    加import java.lang.Exception试试。
      

  18.   

    public class Test
    {
        public static void main(String[] args)
        {
                 try
                 {
                      throw new MyException("MyException occur");    
                 }
                 catch(MyException e)
                 {
                      e.setStr("helloWorld");//加这么一句一切问题解决
                      String ss=e.getStr();
                      System.out.println("My Exception message:"+ss);
                 }
        }    
      

  19.   

    好了,编译通过,这是为什么?我之前lang包是不需要手动导入的。是哪里设置错了??????
      

  20.   

    用IDE工具不需要导入包的。会不会是jdk版本问题?
      

  21.   

    我的是JDK1.6啊,昨天重装了,还是同样的问题,别的问题没有,就是lang包需要手动导入。
      

  22.   

    是的,我是因为报错以为程序代码有问题,不好意思。其实可能是JDK有问题,但是我不知道怎么处理。
      

  23.   

    构造函数是你new对象的时候,隐式调用的,你自己没办法调的.
    如果你new完了,又想改变量的值,咋办?
    就用到setX方法了.