`
selinazzx
  • 浏览: 26272 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于java 运行顺序的问题

阅读更多

打算做一个数据库连接池的实现,结果遇到了对java运行顺序理解的困惑。麻烦大家帮忙看看,具体问题在下面给出。

 

这个是工具类。

package com.jdbc.comm;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.jdbc.connection.DataSource;

public class JdbcUtils {

                //非常不解,这一步为什么要在static块前运行!!!
	//初始化的时候应该是静态方法(包括静态块)要在非静态属性前面嘛!
	private  DataSource dataSource = new DataSource();

	private JdbcUtils() {

	}

	private static JdbcUtils instance = new JdbcUtils();

	public static JdbcUtils getInstance() {
		return instance;
	}
    
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public Connection getConnection() throws SQLException {
		Connection conn = dataSource.getConnection();
		return conn;
	}

	public void free(Connection conn, PreparedStatement ps, ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (ps != null) {
					ps.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally {
				if (conn != null) {
					dataSource.free(conn);
				}
			}
		}
	}
}

 

这个是自己写的一个DataSource。

package com.jdbc.connection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;

public class DataSource {
	private Connection conn = null;
	private String url = "jdbc:mysql://localhost:3306/jdbc";
	private String username = "root";
	private String password = "zzx";
	private int maxCount = 5;
	private int currentCount = 0;

	private LinkedList<Connection> connectionPool = new LinkedList<Connection>();
	
	public DataSource(){
		this.createConnection();
	}

	private LinkedList<Connection> createConnection(){
	
		try {
			for(int i=0;i<maxCount;i++){
				conn = DriverManager.getConnection(url, username, password);
				currentCount++;
				connectionPool.addLast(conn);
			}
			return connectionPool;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public Connection getConnection(){
		if(conn != null){
		conn = connectionPool.removeFirst();
		currentCount--;
		}
		return conn;
	}
	
	public void free(Connection conn){
		if(currentCount < maxCount){
			connectionPool.addLast(conn);
			currentCount++;
		}
	}
}

 

 下面这个是测试代码

package com.jdbc.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.jdbc.comm.JdbcUtils;

public class DataSourceTest {

	public static void main(String[] args) throws SQLException{
		
		
		Connection conn = null;
		PreparedStatement ps =null;
		ResultSet rs = null;
		JdbcUtils jdbcUtils = JdbcUtils.getInstance();
		
		for(int i=0;i<10;i++){
			conn = jdbcUtils.getConnection();
			System.out.println(conn);
			
		}
		
	}
}

  

 这个程序运行出错,我已经知道出错的地方,简单来说就是Class.forName("com.mysql.jdbc.Driver")出现在conn = DriverManager.getConnection(url, username, password)后面,所以抛了异常。我也知道怎么改,但是我非常想不通的一点就是,当条用jdbc的构造函数的时候,为什么不先执行JdbcUtils里的静态块,而是先实例化了DataSource。

     本人很菜,麻烦各位指点一下。

1
0
分享到:
评论

相关推荐

    Java类的基本运行顺序

    本文将详细解析Java类的基本运行顺序,包括加载、初始化、执行等阶段,以及相关工具的运用。 首先,我们从类的生命周期开始。一个Java类的生命周期可以分为以下几个阶段: 1. **加载(Loading)**:当Java虚拟机...

    java简单方法顺序调用注解

    标题中的“java简单方法顺序调用注解”是指使用注解来控制类中方法的执行顺序。这在某些场景下非常有用,比如初始化逻辑、测试脚本或者需要特定顺序执行的任务。下面我们将深入探讨如何实现这一功能。 首先,我们...

    Java类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

    Java类的执行顺序是编程过程中一个非常重要的概念,特别是在深入理解和优化代码性能时。本文将详细探讨Java类的加载、初始化、执行等步骤,并通过实例分析阿里面试中可能涉及的相关问题,结合流程图帮助理解这一过程...

    java 按顺序创建文件

    在Java编程语言中,按顺序创建文件涉及到一系列的文件操作步骤。主要使用到的类是`java.io`包中的`File`和`BufferedWriter`。`File`类用于处理文件路径,创建、删除文件等操作,而`BufferedWriter`则用于向文件中...

    Java学习~求三角形面积的顺序结构

    在Java编程语言中,顺序结构是最基础的程序控制结构之一,它按照代码的书写顺序逐行执行。在“Java学习~求三角形面积的顺序结构”这个主题中,我们将深入探讨如何利用Java来计算三角形的面积,并了解相关概念。 ...

    java实现顺序栈

    Java实现顺序栈是一种常见的数据结构操作,主要用于存储和管理元素序列。栈是一种后进先出(LIFO,Last In First Out)的数据结构,通常用于执行回溯、递归等算法。在Java中,我们可以使用数组或ArrayList来实现顺序...

    java读取csvjava 按顺序创建文件

    最后,关于给定的压缩文件"java读取csv.rar"和"java 按顺序创建文件.zip",它们可能是包含相关示例代码或数据的压缩包。你可以解压这些文件,查看其中的Java源代码或CSV数据,以便于学习和实践上述概念。记住,实践...

    java程序初始化顺序

    在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...

    数据结构(Java语言描述) 案例01 顺序表的就地逆置.docx

    运行这段代码,我们将会看到原始顺序表和逆置后的顺序表,从而验证算法的有效性。 这个简单的案例展示了数据结构中的基本操作,以及如何在Java中实现这些操作。对于理解和应用数据结构来说,这样的实践案例是非常有...

    Java类的基本运行顺序-Java教程共1页.pdf.zi

    这个"Java类的基本运行顺序"教程可能还涵盖了如何通过自定义类加载器来扩展类的加载行为,以及如何调试类加载问题等内容。了解这些基础知识对于理解和优化Java应用程序的性能至关重要,尤其是在大型企业级应用中。 ...

    Drools规则执行顺序

    标题 "Drools 规则执行顺序" 涉及的是一个业务规则引擎——Drools 的核心概念。Drools 是一个开源的Java决策管理平台,它允许开发者使用规则语言来编写业务逻辑,这些规则可以按特定顺序执行,以处理复杂的业务场景...

    Java类的完整构造执行顺序

    在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...

    java jre 1.8 java运行环境

    Java JRE 1.8,全称为Java Runtime Environment,是Oracle公司提供的用于执行Java应用程序的必备组件。它包含了Java虚拟机(JVM)、类库以及其他支持Java程序运行的必要组件。JRE 1.8是Java发展过程中的一个重要版本...

    顺序线性表的java实现代码

    顺序存储结构线性表的java实现代码,要在jdk1.6以上环境下运行

    java10个线程按照顺序打印1-100

    在Java编程中,多线程同步是一个常见的挑战,特别是在需要线程按照特定顺序执行任务时。本主题聚焦于如何使用Java实现10个线程按照顺序打印数字1到100。这种问题通常通过线程间通信和同步机制来解决,如`...

    对java for 循环执行顺序的详解

    总结来说,Java的for循环执行顺序是:初始化 -&gt; 条件检查 -&gt; 循环体 -&gt; 更新 -&gt; 重新检查条件。`break`语句可以在满足特定条件时提前结束循环,避免执行后续的循环体和更新部分。了解这个执行顺序对于编写高效的循环...

    掌握java开发环境的搭建、java应用程序的编写、运行;掌握java中顺序结构、选择结构和循环结构的程序设计方法。.docx

    首先,你需要下载Java Development Kit (JDK),这是Java编程的基础,包含了编译器、Java运行时环境和其他工具。安装JDK后,你需要配置环境变量,包括JAVA_HOME、PATH和CLASSPATH,使得操作系统能够识别并执行Java...

    java面试题静态加载顺序构造方法

    记住,面试有可能会标出一些语句的,让你选择这些语句的执行顺序。不过只要知道原理,就没什么难的了。 执行先后顺序: 1、类加载到内存时static 加载进内润 2、调用类的构造方法时先调用父类的构造方法,在调用...

    java面试题-类的初始化顺序.doc

    类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。

Global site tag (gtag.js) - Google Analytics