首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • newInstance()这个有没有 有什么影响? [已结贴,结贴人:kroda]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kroda
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-20 17:54:47 楼主
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    先问一下newInstance()是不是仅是Class的方法?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laorer
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 17:58:001楼 得分:0
    ....为什么不去查查api呢,
    它是Class的方法,不过你的题目没读懂,有没有 有什么影响?
    主要用在反射中
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kroda
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 18:01:032楼 得分:0
    API里是这么说的:创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。

    太官方 看不明白啊

    换句话怎么理解?
    是只创建一个实例吗?就是单例?
    API解释的 。。哎
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liujiaqwer
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:08:453楼 得分:0
    不是单例的意思。。这是两回事。。
    简单地说就是创建一个新实例。。
    这有什么不明白吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kroda
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:33:234楼 得分:0
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
    那我直接写成这样 也不影响连接数据库啊。。连接也正常的
    加了一个newInstance()作用是什么?就这点不明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kroda
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:33:355楼 得分:0
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
    那我直接写成这样 也不影响连接数据库啊。。连接也正常的
    加了一个newInstance()作用是什么?就这点不明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • panhf2003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 22:43:276楼 得分:0
    我想这里的newInstance()是不需要的,因为这里的forName的作用是加载这个jdbc驱动,只要Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver") 就能加载成功jdbc驱动了,后面就可以连接db了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Java_Chaos
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 00:24:377楼 得分:0
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver") 是加载com.microsoft.sqlserver.jdbc.SQLServerDriver这个类。。
    newInstance()则创建com.microsoft.sqlserver.jdbc.SQLServerDriver类得对象
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • milooxu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 00:59:298楼 得分:0
    就是相当于new 了一个无参构造器,当然前提是反射的这个类要有无参构造器,其他的诸如:Method,Constructor里也有newInstance方法,需要可变长的参数的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • milooxu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 01:01:129楼 得分:0
    一般在数据库驱动实现是会加一个static的代码块,然后你反射这个类的时候,会帮你在静态代码块里完成注册驱动这些事情的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kroda
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 09:48:1410楼 得分:0
    引用 8 楼 milooxu 的回复:
    就是相当于new 了一个无参构造器,当然前提是反射的这个类要有无参构造器,其他的诸如:Method,Constructor里也有newInstance方法,需要可变长的参数的

    请问newInstance跟反射有什么关系..不太明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bao110908
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

      3

    发表于:2008-08-21 10:01:2311楼 得分:10
    去掉,没有丝毫用处,我不知道为什么有好多人喜欢画蛇添足地加上 .newInstance()

    JDBC 使用 Class.forName("xxx.xxx.Driver"); 来注册驱动程序,根本没有要求将其进行实例化。

    就算要求实例化,这样写也是不对的,这样只产生了一个匿名对象,而这个对象没有被引用,也就是
    说这样做是无用功,吃力不讨好的行为。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • m582445672
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 14:01:4012楼 得分:0
    引用 11 楼 bao110908 的回复:
    去掉,没有丝毫用处,我不知道为什么有好多人喜欢画蛇添足地加上 .newInstance()

    JDBC 使用 Class.forName("xxx.xxx.Driver"); 来注册驱动程序,根本没有要求将其进行实例化。

    就算要求实例化,这样写也是不对的,这样只产生了一个匿名对象,而这个对象没有被引用,也就是
    说这样做是无用功,吃力不讨好的行为。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • MajorZQ
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 16:22:3213楼 得分:10
    Class.forName(String className) ---- 根据className来生成一个类型为Class的对象.

    Class这个类中有一个newInstance()方法,这个方法会调用该对象所代表类(在你的例子中就是com.microsoft.sqlserver.jdbc.SQLServerDriver)的缺省构造方法,并返回一个对象。这种新建对象的方法就叫反射了。

    这种方法的效果和:

    new com.microsoft.sqlserver.jdbc.SQLServerDriver();

    是一样的。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved