zoukankan      html  css  js  c++  java
  • 每日记载内容总结17

    1.Class下的newInstance()和new有什么区别?

    (1).newInstance()是一个方法,而new是一个关键字
    (2).Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制。

    引申介绍:Class.forName("")返回的是类 Class.forName("").newInstance()返回的是object

    为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?
    即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);
    而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?

    Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码段。
    而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:
    public class MyJDBCDriver implements Driver {
    static {
    DriverManager.registerDriver(new MyJDBCDriver());
    }
    }
    既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。
    从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:
    (1)、这个 类已经加载;(2)、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,
    这个静态方法调用了启动类加载器,即加载 java API的那个加载器。
    现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。
    这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
    最后用最简单的描述来区分new关键字和newInstance()方法的区别:
    newInstance: 弱类型。低效率。只能调用无参构造。
    new: 强类型。相对高效。能调用任何public构造

    再介绍:(来源:http://blog.csdn.net/qianzhiyong111/article/details/6614807)

    java里面任何class都要装载在虚拟机上才能运行,Class.forName(xxx)就是装载类用的.

    Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:

    class c = Class.forName(“Example”);   
    factory = (ExampleInterface)c.newInstance(); 

    其中ExampleInterface是Example的接口,可以写成如下形式:

    String className = "Example";   
    class c = Class.forName(className);   
    factory = (ExampleInterface)c.newInstance();   

    进一步可以写成如下形式:

    String className = readfromXMlConfig;//从xml 配置文件中获得字符串   
    class c = Class.forName(className);   
    factory = (ExampleInterface)c.newInstance();   

    上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。

    2.mysql代码报错:Cannot create PoolableConnectionFactory (Communications link failure
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)
    数据库连接的时候报错 lost connection to mysql server during query

    (1).检查tomcat的context.xml配置文件的内容 Resource
    (2).mysql启动不稳定,重启即可

    3.关于spring配置中的hibernateTemplate:
    最常用的有两种
    第一种是手动配置HibernateTemplate,即在实现的Dao中加上下面这句话
    private HibernateTemplate hibernateTemplate;  
     public HibernateTemplate getHibernateTemplate() {
      return hibernateTemplate;
     }
     @Resource
     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
      this.hibernateTemplate = hibernateTemplate;
     }

    并在applicationContex.xml中添加如下配置

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    第二种是采用Hibernate提供的HibernateDaoSupport,即让实现的Dao去继承HibernateDaoSupport,此时无需手动配置HibernateTemplate,只要在applicationContext.xml中添加如下配置

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory">
       <ref bean="sessionFactory"/>
      </property>
     </bean>

    关于上面这xml配置,其实在配置事务的时候也要用到,即第一种配置已经包含了第二种配置。

    4.ie6 下bug

    (1)max-length,min-length, 等在ie6下识别不了,需要写成

    height:expression(document.body.clientHeight > 182 ? "182px": "auto");/*for ie6*/

    (2)当某position:relative元素 被带有overflow:auto/scroll属性的块级元素包含时,会表现出postion:absolute的行为。
    解决方法:a.为包含块元素添加属性position:relative 。
    b.把该元素的position:relative属性去掉,使用默认的static定位,并通过margin-top等属性实现类似的效果

    (3)png图片在ie6下出现透明或者背景变灰的bug

    a.使用滤镜,语法如下

     .image-style { background-image: none;                          
    filter
    :progid:DXImageTransform.Microsoft.AlphaImageLoader(src="filename.png", sizingMethod="scale"); }

      注意:使用滤镜需要性能损耗。

     b.给IE6单独制作一张.gif图片,打上hack

       .image-style{ background:transparent url("filename.png") no-repeat scroll 0 0;

    _background-image:url("filename.gif"); }

      这种方法只需要在切图时多存储一份.gif格式的图片,一般采用这种方法。

    (4)ie6下overflow失效:

    给父元素设置宽度或者父元素设置position即可。

    (5)设置透明度无效

    ie7以下设置透明度应为 filter:alpha(opacity=50); 取值为(0-100)

  • 相关阅读:
    将WinServers2019打造成家用系统
    WindowsServers2019上手体验
    【代码模板】不存在的NOIP2017
    NOIP2018初赛翻车总结
    【初赛】各种排序算法总结
    【Luogu1996】约瑟夫问题(模拟,解法汇总)
    【初赛】NOIP2018程序模板
    MongoDB
    非关系型数据库----MongoDB
    用Python来操作redis 以及在Django中使用redis
  • 原文地址:https://www.cnblogs.com/cuiyf/p/3238525.html
Copyright © 2011-2022 走看看