zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    poj 3280 Cheapest Palindrome(区间DP)
    POJ 2392 Space Elevator(多重背包)
    HDU 1285 定比赛名次(拓扑排序)
    HDU 2680 Choose the best route(最短路)
    hdu 2899 Strange fuction (三分)
    HDU 4540 威威猫系列故事――打地鼠(DP)
    HDU 3485 Count 101(递推)
    POJ 1315 Don't Get Rooked(dfs)
    脱离eclipse,手动写一个servlet
    解析xml,几种方式
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/11610825.html
Copyright © 2011-2022 走看看