0
点赞
收藏
分享

微信扫一扫

Java通过接口或者抽象类调用方法的时候,怎么知道调用的是哪个实现类里的方法?

用对象的 ​​getClass()​​ 方法获得它的类,之后就可以随意去判断这是哪个实现类了。

比如代码1-1所示的JDBC连接池的代码,我们想要知道conn调用的close方法是释放连接还是归还连接,

我们可以打印conn.getClass()::

Connection conn = JDBCUtils.getConnection();
System.out.println(conn.getClass());

结果为class com.alibaba.druid.pool.DruidPooledConnection,所以这个Connection的实现类其实是DruidPooledConnection,查看源码可以知道DruidPooledConnection的close方法是归还连接到连接池,而不是释放连接。

 

Java通过接口或者抽象类调用方法的时候,怎么知道调用的是哪个实现类里的方法?_Java

代码1-1:

1 package cn.itcast.utils;
2
3 import com.alibaba.druid.pool.DruidDataSourceFactory;
4
5 import javax.sql.DataSource;
6 import java.io.IOException;
7 import java.sql.Connection;
8 import java.sql.ResultSet;
9 import java.sql.SQLException;
10 import java.sql.Statement;
11 import java.util.Properties;
12
13 public class JDBCUtils {
14 private static DataSource ds;
15
16 static{
17 Properties pro = new Properties();
18 try {
19 // 1.加载配置文件
20 pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
21 // 2.获取DataSource
22 ds = DruidDataSourceFactory.createDataSource(pro);
23 } catch (IOException e) {
24 e.printStackTrace();
25 } catch (Exception e) {
26 e.printStackTrace();
27 }
28 }
29
30
31 public static DataSource getDataSource(){
32 return ds;
33 }
34 /**
35 * 获取连接
36 * @return
37 * @throws SQLException
38 */
39 public static Connection getConnection() throws SQLException {
40 return ds.getConnection();
41 }
42
43
44 public static void close(Statement stmt, Connection conn){
45 if(stmt != null){
46 try {
47 stmt.close();
48 } catch (SQLException e) {
49 e.printStackTrace();
50 }
51 }
52
53 if(conn != null){
54 try {
55 conn.close();
56 } catch (SQLException e) {
57 e.printStackTrace();
58 }
59 }
60 }
61
62
63 public static void close(ResultSet rs, Statement stmt, Connection conn) {
64 if (rs != null) {
65 try {
66 rs.close();
67 } catch (SQLException e) {
68 e.printStackTrace();
69 }
70 }
71 if (stmt != null) {
72 try {
73 stmt.close();
74 } catch (SQLException e) {
75 e.printStackTrace();
76 }
77 }
78
79 if (conn != null) {
80 try {
81 conn.close();
82 } catch (SQLException e) {
83 e.printStackTrace();
84 }
85 }
86 }
87
88
89 }

 


举报

相关推荐

0 条评论