代码如下:public class TestClass { public  static void main(String[] args){try {//测试Class.forName()Class testTypeForName=Class.forName("TestClassType");        System.out.println("testForName---"+testTypeForName);//测试类名.classClass testTypeClass=TestClassType.class;System.out.println("testTypeClass---"+testTypeClass);//测试Object.getClass()TestClassType testGetClass= new TestClassType();System.out.println("testGetClass---"+testGetClass.getClass()); } catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} }} class TestClassType{//构造函数public TestClassType(){System.out.println("----构造函数---");}//静态的参数初始化static{System.out.println("---静态的参数初始化---");}//非静态的参数初始化{System.out.println("----非静态的参数初始化---");}        }
控制台报的错误:
各位大侠,这是什么原因呢?class

解决方案 »

  1.   

    没有找到TestClassType这个类啊,有没有在classpath路径,或者你木有带包名
      

  2.   

    这个类TestClassType没有
    你编译了吗?
      

  3.   


    我知道是没有找到TestClassType这个类,这两个类在同一个包下,同一个文件夹下,你说的木有带包名是什么意思?有没有在classpath路径是什么意思?
      

  4.   


    我在myeclipse下运行的,保存就自动编译了
      

  5.   

    Class testTypeForName=Class.forName("TestClassType");  
    你的这句话出了问题
    应该是包名.TestClassType 假如你的包名是test的话,就写上"test.TestClassType"
      

  6.   

    包名是什么啊?
    代码里的第一句,看看是什么?是:package com.jerehsoft.shortcode.TestClassInstance; 吗?
      

  7.   

    lz你好好的检查下你的包名是否弄错了?我这运行一切正常:
    package com.djk.test;public class TestClass { public  static void main(String[] args) { try { //测试Class.forName() Class testTypeForName=Class.forName("com.djk.test.TestClassType");         System.out.println("testForName---"+testTypeForName); //测试类名.class Class testTypeClass=TestClassType.class; System.out.println("testTypeClass---"+testTypeClass); //测试Object.getClass() TestClassType testGetClass= new TestClassType(); System.out.println("testGetClass---"+testGetClass.getClass());   } catch (ClassNotFoundException e) {
    e.printStackTrace(); }   } }  class TestClassType{ //构造函数 public TestClassType(){ System.out.println("----构造函数---"); } //静态的参数初始化 static{ System.out.println("---静态的参数初始化---"); } //非静态的参数初始化 { System.out.println("----非静态的参数初始化---"); }         }
    ---静态的参数初始化---
    testForName---class com.djk.test.TestClassType
    testTypeClass---class com.djk.test.TestClassType
    ----非静态的参数初始化---
    ----构造函数---
    testGetClass---class com.djk.test.TestClassType
      

  8.   

    我不加包名运行正常啊!---静态的参数初始化---
    testForName---class TestClassType
    testTypeClass---class TestClassType
    ----非静态的参数初始化---
    ----构造函数---
    testGetClass---class TestClassType
      

  9.   

    因为jvm会按照你给的路径去加载class文件,比如说你的class文件放在C:/a/test.class文件下的 而你给jvm的路径是test.class(当然你给的时候.class后缀是不要写的它会帮你自动加上去的) ,如果jvm安装你给的这个路劲去寻找class文件当然就找不到了。所以报classnotfound异常
      

  10.   

    这要看你把这个类的文件怎么放的啊 教你个简单方法吧要不要加包名你就看:
    java文件的第一行有没有引入包语句比如我就引入了package com.djk.test;
    你看下你的 你肯定也是引入了包名。
    15楼不加包名也能成功因为他本身就没引入包。你不知道这个的原因我估计你学java一开始就用了ide来写代码的吧。
      

  11.   


    恩,对,正如你所说的“你不知道这个的原因我估计你学java一开始就用了ide来写代码的吧。”,这下明白了,谢谢你的耐心讲解 
      

  12.   

    没事 你这段代码我感觉主要是想看3种获得class对象的区别吧 我可以顺便说下第一种Class.forname();得到class对象时第一步jvm会加载class文件,第二步会分配静态区域(就是执行静态块或静态方法和静态成员变量)记住不会帮我们初始化对象。而测试类名.class这个就更加懒了只会执行第一步就是jvm帮我们加载class文件,第二不分配静态区域都不会帮我们分配更别说初始化了。第三种Oject.getClass();呵呵这个就不用说了你得到这个class对象本身就是用new出来的对象来得到的 自然这个类jvm帮我们初始化好了该加载的都加载了包括构造器。。
      

  13.   

    对,我是在看3中获得class对象的方法,看了这么长时间也没理解到你这程度,受教了,要学的东西还很多啊。