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方法是歸還連接到連接池,而不是釋放連接。

 

代碼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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM