java内部类引用外部类中的变量 必须是final

本文介绍如何使用DBCP数据库连接池,并演示了通过Java代码进行连接池的基本配置及测试过程,包括设置连接池的最大连接数、最小连接数等参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Test
//数据库连接池DBCP
public void testDBCP(){

//创建连接池
BasicDataSource ds=new BasicDataSource();
//给连接池添加必要的属性
//可以将这些属性去掉set首字母小写,写在.properties文件中
ds.setUsername("root");
ds.setPassword("");
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///jsd");
//初始连接数
ds.setInitialSize(5);
//指定最大连接数,同一时刻可以向数据库申请的连接数
ds.setMaxActive(5);
//指定最小连接数:在数据库连接池中保存的最少的空闲的连接数量 
ds.setMinIdle(5);
//等待数据库连接池,连接最长时间 ,单位为毫秒,超出该时间 将抛出异常
ds.setMaxWait(1000*5);

try {
String sql="select * from person where id=2";
//用5个线程,测试5秒后,MaxWait()的效果 
Connection con=ds.getConnection();
con=ds.getConnection();
con=ds.getConnection();
con=ds.getConnection();
new Thread(){
public void run(){
try {

Connection con=ds.getConnection();

//Connection con=ds.getConnection();这段代码 ,报如下错误


} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}.start();

PreparedStatement ps=con.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
if(rs.next()){
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}



-----------------------------

根据查找资料:百度:内部类访问外部变量;

如果内部类调用了外部类中的变量,那么该变量必须申明为final类型,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,也就会自动被消除,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值