黑马程序员技术交流社区

标题: 关于Class的程序 为什么会出错?帮忙看看 [打印本页]

作者: 唐僧踏歌    时间: 2014-4-17 12:23
标题: 关于Class的程序 为什么会出错?帮忙看看
本帖最后由 唐僧踏歌 于 2014-4-17 15:07 编辑

import java.lang.reflect.*;
class Rect
{  double width,height,area;
   public double getArea()
  {  area=height*width;
      return area;
   }
}
public class Class类
{ public static void main(String args[])
  {  Rect rect=new Rect();
     Class cs=rect.getClass();
     String className=cs.getName();
     Constructor[] con=cs.getDeclaredConstructors();
     Field[] field=cs.getDeclaredFields() ;
     Method[] method=cs.getDeclaredMethods();
     System.out.println("类的名字:"+className);
     System.out.println("类中有如下的成员变量:");
     for(int i=0;i<field.length;i++)
   {  System.out.println(field.toString());
     }
     System.out.println("类中有如下的方法:");
     for(int i=0;i<method.length;i++)
   {  System.out.println(method.toString());
     }
     System.out.println("类中有如下的构造方法:");
     for(int i=0;i<con.length;i++)
   {  System.out.println(con.toString());
     }
  }  
}

1.jpg (151.83 KB, 下载次数: 14)

1.jpg

作者: 呆呆沙师妹    时间: 2014-4-17 13:57
MyClass类中主程序入口语句public void main(String args[])错了,必须是public static void main(String args[])


作者: 唐僧踏歌    时间: 2014-4-17 13:59
呆呆沙师妹 发表于 2014-4-17 13:57
MyClass类中主程序入口语句public void main(String args[])错了,必须是public static void main(String a ...

恩恩 static 我删了  但是写上去,在eclipse里还是出错的。。不解
作者: 呆呆沙师妹    时间: 2014-4-17 14:06
错误提示信息是什么?
我将你代码复制,花时间调整了下格式,能运行呢
运行结果:
类的名字:Rect
类中有如下的成员变量:
double Rect.width
double Rect.height
double Rect.area
类中有如下的方法:
public double Rect.getArea()
类中有如下的构造方法:
Rect()
作者: 清风有意    时间: 2014-4-17 14:07
  1. package exercise;

  2. import java.lang.reflect.*;
  3. class Rect
  4. { double width,height,area;
  5. public double getArea()
  6. { area=height*width;
  7. return area;
  8. }
  9. }

  10. public class Test110{
  11.         public static void main(String args[]){
  12.                 Rect rect=new Rect();
  13.                 Class cs=rect.getClass();
  14.                 String className=cs.getName();
  15.                 Constructor[] con=cs.getDeclaredConstructors();
  16.              Field[] field=cs.getDeclaredFields() ;
  17.                 Method[] method=cs.getDeclaredMethods();
  18.                 System.out.println("类的名字:"+className);
  19.                 System.out.println("类中有如下的成员变量:");
  20.                 for(int i=0;i<field.length;i++){
  21.                         System.out.println(field[i].toString());
  22.                 }
  23.                 System.out.println("类中有如下的方法:");
  24.                 for(int i=0;i<method.length;i++)
  25.                 {
  26.                         System.out.println(method[i].toString());
  27.                 }
  28.                 System.out.println("类中有如下的构造方法:");
  29.                 for(int i=0;i<con.length;i++){
  30.                         System.out.println(con[i].toString());
  31.                 }
  32.         }
  33. }
复制代码


结果为
类的名字:exercise.Rect
类中有如下的成员变量:
double exercise.Rect.width
double exercise.Rect.height
double exercise.Rect.area
类中有如下的方法:
public double exercise.Rect.getArea()
类中有如下的构造方法:
exercise.Rect()

没有错误!根据你的代码我把错误的空格都删除了,只是重新排版了一下。你再试试
作者: TTc    时间: 2014-4-17 14:11
你的Class序程序中的主函数确实没有定义static ,main()这个方法是由jvm去调用的,但是在调用时没有创建对象而是通过类名去调用的,这时就需要用static去修饰这个方法。
  1. package sdf;


  2. import java.lang.reflect.*;

  3. class Rect

  4. { double width,height,area;

  5. public double getArea()

  6. { area=height*width;

  7. return area;

  8. }

  9. }

  10. public class MyClass

  11. {
  12.      <FONT color=red>   public static void  main(String args[])

  13. </FONT>{ Rect rect=new Rect();

  14. Class cs=rect.getClass();

  15. String className=cs.getName();

  16. Constructor[] con=cs.getDeclaredConstructors();

  17. Field[] field=cs.getDeclaredFields() ;

  18. Method[] method=cs.getDeclaredMethods();

  19. System.out.println("类的名字:"+className);

  20. System.out.println("类中有如下的成员变量:");

  21. for(int i=0;i<field.length;i++)

  22. { System.out.println(field[i].toString());

  23. }

  24. System.out.println("类中有如下的方法:");

  25. for(int i=0;i<method.length;i++)

  26. { System.out.println(method[i].toString());

  27. }

  28. System.out.println("类中有如下的构造方法:");

  29. for(int i=0;i<con.length;i++)

  30. { System.out.println(con[i].toString());

  31. }

  32. }

  33. }
复制代码

结果是:
类的名字:sdf.Rect
类中有如下的成员变量:
double sdf.Rect.width
double sdf.Rect.height
double sdf.Rect.area
类中有如下的方法:
public double sdf.Rect.getArea()
类中有如下的构造方法:
sdf.Rect()

作者: 唐僧踏歌    时间: 2014-4-17 14:12
呆呆沙师妹 发表于 2014-4-17 14:06
错误提示信息是什么?
我将你代码复制,花时间调整了下格式,能运行呢
运行结果:

这是书上的代码 不知道为什么在我这  大括号竟然出错了。。。
作者: TTc    时间: 2014-4-17 14:15
唐僧踏歌 发表于 2014-4-17 13:59
恩恩 static 我删了  但是写上去,在eclipse里还是出错的。。不解


你的这个java文件取得什么名字??
作者: 唐僧踏歌    时间: 2014-4-17 14:18
TTc 发表于 2014-4-17 14:15
你的这个java文件取得什么名字??

这个肯定是跟公共类一样的名字。。。。。
作者: TTc    时间: 2014-4-17 14:19
唐僧踏歌 发表于 2014-4-17 13:59
恩恩 static 我删了  但是写上去,在eclipse里还是出错的。。不解

你把复制到eclipse上的代码出错行前面有红色曲线的部分删掉?
作者: 唐僧踏歌    时间: 2014-4-17 14:22
TTc 发表于 2014-4-17 14:19
你把复制到eclipse上的代码出错行前面有红色曲线的部分删掉?

无力吐槽  谢谢了
作者: luis    时间: 2014-4-17 15:03
public static void main(String args[])
改为public static void main(String[] args)
下面那是可能是不能之间用toString
作者: 唐僧踏歌    时间: 2014-4-17 15:07
已经解决了  
包名得写进Class.forName()里面
还有先编译一下 才能有Rect的字节码文件




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2