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 }
  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/11610825.html
Copyright © 2011-2022 走看看