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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡雷 黑马帝   /  2011-12-11 01:37  /  2283 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我在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. }
复制代码

9 个回复

倒序浏览
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");
        }
}

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1 淡定

查看全部评分

回复 使用道具 举报
胡雷 黑马帝 2011-12-12 11:16:22
藤椅
李振元 发表于 2011-12-11 09:19
Class.forName()是加载一个类,与new不同,所以必须提供完整名称,包括包名。
就像Class.forName("java.la ...

但是大哥,第二段代码你如果不在Eclipse中写,用文本编辑器写源码,然后用命令行窗口来编译运行,都是没有问题的,只在Eclipse中有问题。
回复 使用道具 举报
wir478 发表于 2011-12-12 11:16
但是大哥,第二段代码你如果不在Eclipse中写,用文本编辑器写源码,然后用命令行窗口来编译运行,都是没 ...

不好意思,这个就不太了解了。。。
回复 使用道具 举报
胡雷 黑马帝 2011-12-12 12:22:54
报纸
李振元 发表于 2011-12-12 11:26
不好意思,这个就不太了解了。。。

还是要多谢您!
回复 使用道具 举报
wir478 发表于 2011-12-12 12:22
还是要多谢您!

客气了。。:D
回复 使用道具 举报
张帅 黑马帝 2011-12-19 09:15:27
7#
是这样的,不管多少个类写入一个  java文件中,编译的时候都会按照这个文件中的类生成多少个,class文件,
如果这个类在别的类中有使用 (比如使用对象,使用类),那么你是你不用dos窗口运行,他也会运行
一个java文件最多只可以有一个public类,也可以一个都没有
作为程序入口的类必须为public

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
Class.forName("T") 改成 Class.forName("jse03.T")
forName的时候必须使用类的全路径,包括包名。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
打包后类名要用全名,包名.类名,否则是路径不对,是加载不了的
回复 使用道具 举报
胡雷 黑马帝 2011-12-22 18:11:18
10#
songxingchao 发表于 2011-12-19 11:41
Class.forName("T") 改成 Class.forName("jse03.T")
forName的时候必须使用类的全路径,包括包名。 ...

不用包名  在命令行窗口下同样可以编译通过。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马