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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王大斌 中级黑马   /  2013-4-18 00:35  /  1196 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

我们知道,得到一个类的字节码文件对象有三种方式
1.类名.class   例如,System.class;
2.对象.getClass() ,new Data().getClass()
3.使用静态的方法加载这个字符串所对应类的字节码。
Class.forName(“java.util.String”);

也就是只有在类字节码加载到jvm机后,才能得到其字节码文件对象吧
当加载字节码文件对象的时候,一定会调用static{}块中的语句吧,
为什么我在使用Class s  = Person3.class;

的时候,不去调用我Person3中的静态代码块

class Person3
{
        static
        {
                System.out.println("dsffasdf");
        }
       
}

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 曹德君 于 2013-4-21 00:30 编辑

我是这样理解的Class这个类是描述所有的类的。在这里Person3.class只是CLass这个类里面描述的一个事物,并不是一个具体的对象,所以虚拟机并没有加载Person3这个类。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. package day2;

  2. public class Test {

  3.         /**
  4.          * @param args
  5.          * @throws Exception
  6.          */
  7.         public static void main(String[] args) throws Exception {

  8.                 Class.forName("day2.Person3");
  9.                
  10.         }

  11. }

  12. class Person3
  13. {
  14.         static
  15.         {
  16.                 System.out.println("dsffasdf");
  17.         }
  18.         
  19. }
复制代码
D:\QQ截图20130421010611.PNG
我试了一下。结果是这样的

QQ截图20130421010611.png (2.73 KB, 下载次数: 69)

QQ截图20130421010611.png

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报

如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马