黑马程序员技术交流社区

标题: 类是怎么被加载的?对象是怎么创建的? [打印本页]

作者: 坚强    时间: 2011-11-5 23:05
标题: 类是怎么被加载的?对象是怎么创建的?
  我发现了个别基本的问题?也在别的帖子上见过,就是类是怎么被加载的,对象是怎么创建的?
  类被加载的时候生成了class文件,这个class文件是不是字节码?我注意到在一个程序中创建的每一个类在JAVAC后,都会有一个class文件,我在论坛上看到这样一句话,说:一个类只有一个对应的字节码,但是可以创建多个对象。为什么我给一个原本能编译成功的程序重命名后,再去运行会提示:找不到或无法加载主类  xxx(重命名后的名字)。  但是我的主方法所在类没有public 修饰,怎么会这样?
  至于对象的创建过程更不清楚,问题比较多,新人,请多多包涵!
作者: 齐国峰    时间: 2011-11-5 23:10
重命名后要重新编译,否则当你需要加载重命名后xxx的类的时候找不到该类的class文件.
作者: 高美云    时间: 2011-11-5 23:20
加载类并不会运行静态代码块,只有当初始化的时候才会。只有第一次使用数据的时候Java才会进行初始化,而静态代码快是初始化的一部分.

至于Class.forName()请参考API:

public static Class<?> forName(String className)
                        throws ClassNotFoundException

    返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于:

          Class.forName(className, true, currentLoader)
         

其中第二个参数表示要是否要在加载后立即初始化。
作者: 肖瑞军    时间: 2011-11-5 23:27
你的问题一 一回答:.class文件即为字节码文件,javac 是启动编译器, javac  xxx.java文件后生成xxx.class文件。一个类只有一个对应的字节码,但是可以创建多个对象,是这样的。
你重命名后要重新编译那个.java文件,才能加载重命名后xxx的类的class文件.
作者: 坚强    时间: 2011-11-6 15:25
肖瑞军 发表于 2011-11-5 23:27
你的问题一 一回答:.class文件即为字节码文件,javac 是启动编译器, javac  xxx.java文件后生成xxx.class ...

  怎么个重新编译法,我重新命名后,javac没有错误,第2句java xx提示找不到主类?{:3_62:}
作者: 杨玉揆    时间: 2011-11-6 15:32
看是不是main方法写错了
作者: 周敏2011nc    时间: 2011-11-6 17:02
你重新命名过后的文件名称必须和入口函数所在的类同名,并重新编译、运行!




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