Class.forName的作用?为什么要用?

djd12312311 2010-03-21 11:03:29
Class.forName的作用?为什么要用?
...全文
1491 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
yugong2009 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 luffysy 的回复:]

使用常量 不会加载类, 编译器对常量进行了特殊优化,
[/Quote]
这个常量要不是静态的,那必然要求先加载类
只是在静态常量操作时,可能存在特殊化,回去再查查
yueweiac110 2010-03-22
  • 打赏
  • 举报
回复
API.....
yugong2009 2010-03-22
  • 打赏
  • 举报
回复
回去得好好查查
LuffySY 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dinghun8leech 的回复:]
引用 12 楼 bearkin 的回复:
俺昨天已经说了 是被加载的时候执行 说不定你使用他的常量不算做该类被加载的操作呢?

昨天没找到查看程序当前所加载的类的方法,因此——无证据无真相。
[/Quote]
使用常量 不会加载类, 编译器对常量进行了特殊优化,
LuffySY 2010-03-22
  • 打赏
  • 举报
回复
反射。获取class 实例 通过class实例 可以进行很多该类的操作 非常有用
wst004 2010-03-22
  • 打赏
  • 举报
回复
类的加载与初始化,还得看下java 规范。再来验证
wuzhixiong1013 2010-03-22
  • 打赏
  • 举报
回复
jdbc中加载驱动类
dinghun8leech 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bearkin 的回复:]
俺昨天已经说了 是被加载的时候执行 说不定你使用他的常量不算做该类被加载的操作呢?
[/Quote]
昨天没找到查看程序当前所加载的类的方法,因此——无证据无真相。
BearKin 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dinghun8leech 的回复:]
后来想想也觉得这是合理的,final的只能赋一次值,所以他更是完全和这个类无关了,这个类有没有经过正确的初始化和他无关。
当然,这个final的第一次赋值发生在static{}里的话,还是要初始化的。
[/Quote]

俺昨天已经说了 是被加载的时候执行 说不定你使用他的常量不算做该类被加载的操作呢?
jcqhaha 2010-03-22
  • 打赏
  • 举报
回复
java...
发现还真是,不是那么很快就可以弄的很明白啊
dinghun8leech 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 caisq_learning 的回复:]
并不是类被加载时静态区域就一定会执行的
static Class forName(String name,boolean initialize,ClassLoader loader)
这个是forName的另外一个版本,将initialize设置成false后在加载类的时候并不会立即运行静态区域,而会在使用类建立对象时才运行才运行。
当然默认的还是加载时就运行
[/Quote]
我回家查资料去,现在已经晕了。
guo624587253 2010-03-22
  • 打赏
  • 举报
回复
反射,可以动态获取一个类的方法、属性、构造方法等信息,可以动态创建类,用处非常广泛
当你 new Object();对象的时候 ,内存已经给你 Class c= Class.forname(“”); 把方法,成员变量在内存已经给你分配
caisq_learning 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dinghun8leech 的回复:]
回7楼,我也觉得奇怪,难道在我头脑里扎根了快2年的理解是错的?我也一直认为类被加载了,static {}肯定要执行的。

Java code
package classloader;
public class Father {
static {
System.out.println("Father:static");
}
}


Java co……
[/Quote]

并不是类被加载时静态区域就一定会执行的
static Class forName(String name,boolean initialize,ClassLoader loader)
这个是forName的另外一个版本,将initialize设置成false后在加载类的时候并不会立即运行静态区域,而会在使用类建立对象时才运行才运行。
当然默认的还是加载时就运行
yinxingshashou 2010-03-22
  • 打赏
  • 举报
回复
就是 new一个 class。forname 里面的参数(类) 然后自动注册了驱动

dinghun8leech 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 bearkin 的回复:]
我不断的跟你强调 不是说被加载不执行 而是你确认他加载了么?
[/Quote]
没找到查看当前加载的类的方法,没法确认。
BearKin 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 dinghun8leech 的回复:]
引用 22 楼 bearkin 的回复:
基础差也可以猜猜嘛..像我不就猜对了么..有替我解释的 哈哈..

我的猜测是类被加载了,但是类加载器很聪明,发现常量(基本类型)可直接使用,就偷懒了一步。呵呵。猜错了。
[/Quote]
我不断的跟你强调 不是说被加载不执行 而是你确认他加载了么?
sunlaji008 2010-03-22
  • 打赏
  • 举报
回复
java 基础 要想搞懂也很难的嘛……
SambaGao 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 youyayewei 的回复:]

Class.forName(xxx.xx.xx) 返回的是一个类,如在Java中,JDBC连接数据库操作,用该方法加载驱动类
[/Quote]

..
dinghun8leech 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 bearkin 的回复:]
基础差也可以猜猜嘛..像我不就猜对了么..有替我解释的 哈哈..
[/Quote]
我的猜测是类被加载了,但是类加载器很聪明,发现常量(基本类型)可直接使用,就偷懒了一步。呵呵。猜错了。
神之泪花 2010-03-22
  • 打赏
  • 举报
回复
路过,俺是来学习的
加载更多回复(13)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧