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 }
  • 相关阅读:
    模拟队列
    代理模式及java简易实现
    归并排序模板(Java)
    快排Java模板
    durid配置jdbc报错 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server
    File类
    数据库范式、多表查询,事务
    valuestack(值栈) 和 actioncontext(上下文)
    Action
    Cookie 和Session
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/11610825.html
Copyright © 2011-2022 走看看