在翻阅《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高很多。
发表评论
-
根据文件内容排序
2009-01-08 16:17 1152package cn.xbmu.lib.jfly.test; ... -
Java中数字转为中文
2009-01-04 11:12 821在JavaEye上看到一道Java面试题(http://job ... -
模拟提款存款的一个例子
2008-12-23 02:13 1473今天在JavaWorld.tw论坛上看到一个求提款和存款的帖子 ... -
对Java线程的学习
2008-12-22 16:28 0通过对前辈经验的学习,自己简单总结了一下Java Thread ... -
对模糊搜索HashMap继续改进
2008-12-18 16:19 1861直接迭代KeySet即可,速率提升一倍,MyLikeHashM ... -
对模糊搜索HashMap的改写
2008-12-18 02:44 1240在http://wangxuliangboy.iteye.co ... -
《JDK6学习笔记》中关于BinarySearchDemo的理解
2008-12-17 17:01 704《JDK6学习笔记》p524页的BinarySearchDem ... -
Scanner输入与BufferedReader的输入
2008-12-15 17:09 1726【摘】《Java学习笔记(JDK6)》p39 Scanner取 ...
相关推荐
static 关键字的作用是改变变量的生存期和作用域,static 修饰的变量在编译时被初始化,在程序执行时不再被修改。 2. 字符串和字符数组越界问题: 在 C 语言中,字符串和字符数组是非常重要的数据类型。然而,在...
为了改进这一点,PHP引入了static关键字,用于延迟绑定,它允许我们在类的继承体系中按照实际情况引用类名。 下面是一个简单的代码示例,用以展示静态延迟绑定和普通静态绑定的使用方式: ```php class A { ...
这一点体现了Java中对常量定义的标准方式,`public static final`修饰符保证了常量的访问性和不变性,而`MAX`作为常量名,应遵循大写字母命名规则,以体现其作为常量的身份。 接下来,让我们来探讨方法这一概念。在...
题目中的第1题和第2题分别测试了主方法的`static`和`public`修饰符的重要性。如果缺少这些修饰符,程序将无法正常运行。 2. **标识符**:Java中的标识符用于命名变量、类或方法等。合法的标识符应以字母、下划线(_...
- 强调每个关键字的理解:复习时,学生应确保对Java的所有关键字有清晰的理解,知道它们的作用和特性。例如,`public`, `private`, `protected`, `static`, `final`, `abstract`等,不必每个都能熟练运用,但至少要...
5. 变量类型:实例变量是类的成员变量,但它们不是通过`static`关键字声明的。`static`关键字用于声明静态变量,这些变量属于类而不是类的实例。局部变量是在方法内部定义的,它们在方法执行时创建,并且在使用前...
JavaScript ES6引入了模块系统,通过`import`和`export`关键字实现。 6. **响应式设计**:确保网站在不同设备(桌面、平板、手机)上都能良好展示。这可能通过媒体查询(media queries)和灵活的布局技术实现。 7....
在C#中,我们可以通过多种方式来实现单例,但最常见的方法是使用`static`和`lock`关键字。 在描述中提到了“由于不能删除资源,所以只能这么加后缀”,这可能指的是在创建单例时为了避免资源冲突或文件锁定问题。在...
子类也可以通过`static`关键字覆盖或添加静态方法和属性。 5. **访问控制(Access Control)**: ES6提供了`private`和`protected`关键字(但不是所有浏览器都支持),用于限制属性和方法的访问权限。例如,`#`...
虽然Kotlin并没有提供“static”关键字或静态成员的概念,但它通过引入“伴生对象”这一概念,巧妙地实现了类似的功能。 **伴生对象示例** ```kotlin class User private constructor(val account: String) { ...
9. **测试与调试**:在部署到生产环境之前,务必对Web Service进行充分的测试,确保所有功能正常工作,并使用调试工具进行问题排查。 通过以上步骤,我们可以利用C#静态调用Web Service,实现从客户端应用程序访问...
- **定义静态变量**:通过在变量前添加`static`关键字,确保即使在函数退出后,变量的状态也能得以保留。但这会消耗更多的RAM,对于RAM资源有限的小型单片机而言,这可能不是最佳选择。 - **临界区保护**:使用RTOS...
例如,选项B中提到的`static`关键字是用来声明静态成员的,而不是实例变量。 抽象方法是那些没有具体实现的方法,通常在接口或抽象类中声明,用来提供继承的结构。例如,选项B的`public abstract void method();`是...
在神洲数码的程序员面试中,考察的知识点涵盖了多个领域,包括Java、.NET以及基础的编程知识。以下是对这些知识点的详细解析: 1. **Java技术**:题目中提到了J2EE...此外,还测试了考生对问题解决和逻辑思维的能力。
在这个场景下,我们需要编写一个函数,该函数接收一个整型数组作为参数,并对其进行升序排序。这涉及到对数组的理解、函数的使用以及排序算法的应用。 首先,我们要明白数组的基本概念。在C#中,数组是一种引用类型...
2. **static的使用**:合理使用`static`关键字可以控制变量的作用域,减少内存占用。 3. **函数中的代码尺寸**:控制函数的长度,使得函数专注于单一任务,易于理解。 4. **typedef的使用**:通过`typedef`为复杂...
最近一直在做一个项目的前期设计工作,考虑到... 以上是我在windows下对memcached的一点小学习和实践,在以后的项目开发过程中将会更深入的学习和应用这一缓存工具,也希望和有兴趣的同行一起讨论学习该工具的使用~~
在 Java 中,对中文的支持并不是太好,这一点让不少的开发者感到很是头痛。例如,在插入到数据库中的中文问题要转换成编码,从数据库中读到中文又要转换成编码。可以使用以下代码来解决编码问题: public class ...
- `for`:循环结构的一种,允许初始化、测试和更新三个操作在一个单独的语句中。 - `goto`:无条件地跳转到标记的位置。 - `inline`:建议编译器将函数调用处替换为函数体。 - `if`:条件分支语句。 - `register`:...
`synchronized public static Session getSession()`这个方法可能是一个获取数据库连接或管理会话的函数,其中的`synchronized`关键字确保了多线程环境下的安全性,防止并发访问时出现的数据不一致问题。 `Struts`...