对static关键字的一点测试

在翻阅《JDK6学习笔记》时,看到static关键字用法,虽然很早就知道大概,但自己没有动手试过,遂决定试试到底static关键字能否带来好处。举个例子,一般情况下,可能在连接数据库时,首先会在自己的类中做一些初始化动作,那么我们假设利用static block来初始数据库的连接与一般数据库连接有什么不同呢,写了如下粗略测试代码:

package cn.xbmu.lib.jfly.test;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 测试Static Block用法,在Static Block中初始化一个数据库连接
 * @author JFly
 */
public class TestStaticBlock {

    private static Connection conn = null;
    static String CLASSFORNAME = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    static String CONN_STR = "jdbc:sqlserver://localhost:1433;databaseName=oblog";
    static String DB_USER = "sa";
    static String DB_PWD = "";
    private static ResultSet rs = null;


    static {
        try {
            Class.forName(CLASSFORNAME);
            conn = DriverManager.getConnection(CONN_STR, DB_USER, DB_PWD);
            System.out.println("数据库连接已建立!");
        } catch (SQLException ex) {
            Logger.getLogger(TestStaticBlock.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(TestStaticBlock.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public String getRecord(Connection aConn, int id) {

        try {
            rs = aConn.prepareStatement("select * from oblog_user where userid = " + "'" + id + "'").executeQuery();
            if (rs.next()) {
                System.out.println("rs=" + rs);
                System.out.println("username=" + rs.getString("username"));
                return rs.getString("username");
            }
        } catch (SQLException ex) {
            Logger.getLogger(TestStaticBlock.class.getName()).log(Level.SEVERE, null, ex);
        } 
        
        return "没有记录";
    }

    public static Connection getConn() throws SQLException {
        if (conn != null) {
            return conn;
        }
        return DriverManager.getConnection(CONN_STR, DB_USER, DB_PWD);
    }

    public static void closeConn() throws SQLException {
        if(rs != null) {
            rs.close();
        }
        if(conn != null) {
            conn.close();
        }
    }

    public static void main(String[] args) throws SQLException {
        long beginTime = System.currentTimeMillis();
        TestStaticBlock tsb = new TestStaticBlock();
        //TestStaticBlock.conn = null;
        System.out.println("conn1 = " + TestStaticBlock.conn);
        System.out.println("conn2 = " + TestStaticBlock.getConn());
        System.out.println("username = " + tsb.getRecord(getConn(), 3));
        long endTime = System.currentTimeMillis();

        TestStaticBlock tsb_1 = new TestStaticBlock();
        System.out.println("conn1 = " + TestStaticBlock.conn);
        System.out.println("username = " + tsb_1.getRecord(getConn(), 4));
        
        closeConn();
        System.out.println("执行时间:" + (endTime - beginTime));
    }
}

 

输出执行时间大致为63,而如果静态方法呢,代码如下:

package cn.xbmu.lib.jfly.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 测试static方法
 * @author JFly
 */
public class TestStaticMethod {

    public static void getUser(int id) {
        String CLASSFORNAME = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String CONN_STR = "jdbc:sqlserver://localhost:1433;databaseName=oblog";
        String DB_USER = "sa";
        String DB_PWD = "";
        Connection conn = null;

        long beginTime = System.currentTimeMillis();
        try {
            Class.forName(CLASSFORNAME);
            conn = DriverManager.getConnection(CONN_STR, DB_USER, DB_PWD);

            System.out.println("数据库连接已建立!");

            ResultSet rs = null;
            try {

                rs = conn.prepareStatement("select * from oblog_user where userid = " + "'" + 3 + "'").executeQuery();
                if (rs.next()) {
                    System.out.println("username = " + rs.getString("username"));
                }
            } catch (SQLException ex) {
                Logger.getLogger(TestStaticBlock.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                if (rs != null) {
                    rs.close();
                }
                if (conn != null) {
                    conn.close();
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        long endTime = System.currentTimeMillis();
        System.out.println("执行时间:" + (endTime - beginTime));
    }

    public static void main(String[] args) {
        TestStaticMethod.getUser(3);
    }
}

 

程序执行时间大致为297,可见static block带来的效率要比static method高很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值