黑马程序员技术交流社区

标题: 类加载问题 [打印本页]

作者: 胡雷    时间: 2011-12-11 01:37
标题: 类加载问题
我在Eclipse中写了两段代码,为嘛第一个可以运行通过,第二个不行呢?
  1. package jse03;

  2. public class TestReflection {
  3.       
  4.         public static void main(String[] args) {
  5.                 T t = new T();              
  6.         }
  7. }

  8. class T {
  9.         T() {
  10.                 System.out.println("ttttttt");
  11.         }
  12. }
复制代码
  1. package jse03;
  2. import java.lang.reflect.InvocationTargetException;
  3. import java.lang.reflect.Method;

  4. public class TestReflection {
  5.       
  6.         public static void main(String[] args) throws ClassNotFoundException  {

  7.                 Class c = Class.forName("T");
  8.                
  9.         }
  10. }

  11. class T {
  12.         T() {
  13.                 System.out.println("ttttttt");
  14.         }
  15. }
复制代码

作者: 李振元    时间: 2011-12-11 09:19
Class.forName()是加载一个类,与new不同,所以必须提供完整名称,包括包名。
就像Class.forName("java.lang.String");
此处应为:   Class c = Class.forName("jse03.T");

代码如下:
package jse03;

public class TestReflection {
      
        public static void main(String[] args) throws ClassNotFoundException  {

                Class c = Class.forName("jse03.T");
               
        }
}

class T {
        T() {
                System.out.println("ttttttt");
        }
}
作者: 胡雷    时间: 2011-12-12 11:16
李振元 发表于 2011-12-11 09:19
Class.forName()是加载一个类,与new不同,所以必须提供完整名称,包括包名。
就像Class.forName("java.la ...

但是大哥,第二段代码你如果不在Eclipse中写,用文本编辑器写源码,然后用命令行窗口来编译运行,都是没有问题的,只在Eclipse中有问题。
作者: 李振元    时间: 2011-12-12 11:26
wir478 发表于 2011-12-12 11:16
但是大哥,第二段代码你如果不在Eclipse中写,用文本编辑器写源码,然后用命令行窗口来编译运行,都是没 ...

不好意思,这个就不太了解了。。。
作者: 胡雷    时间: 2011-12-12 12:22
李振元 发表于 2011-12-12 11:26
不好意思,这个就不太了解了。。。

还是要多谢您!
作者: 李振元    时间: 2011-12-12 12:37
wir478 发表于 2011-12-12 12:22
还是要多谢您!

客气了。。:D
作者: 张帅    时间: 2011-12-19 09:15
是这样的,不管多少个类写入一个  java文件中,编译的时候都会按照这个文件中的类生成多少个,class文件,
如果这个类在别的类中有使用 (比如使用对象,使用类),那么你是你不用dos窗口运行,他也会运行
一个java文件最多只可以有一个public类,也可以一个都没有
作为程序入口的类必须为public
作者: songxingchao    时间: 2011-12-19 11:41
Class.forName("T") 改成 Class.forName("jse03.T")
forName的时候必须使用类的全路径,包括包名。
作者: 为梦而战    时间: 2011-12-19 15:47
打包后类名要用全名,包名.类名,否则是路径不对,是加载不了的
作者: 胡雷    时间: 2011-12-22 18:11
songxingchao 发表于 2011-12-19 11:41
Class.forName("T") 改成 Class.forName("jse03.T")
forName的时候必须使用类的全路径,包括包名。 ...

不用包名  在命令行窗口下同样可以编译通过。




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