由于某些原因,我正在查看rt.jar,在那里我看到了一些像java.sql。*等软件包。
在我们编写的典型jdbc程序中(例如,对于Connection类):
final Spinner spinner_year= (Spinner)findViewById(R.id.spinner_year);
根据文档,java.sql.Connection是接口,不是具体实现,java.sql.Connection是rt.jar。
当我们编写jdbc程序时,我们需要jdbc驱动程序,并从我读取的jdbc驱动程序实现接口(例如java.sql.Connection)。
所以当我们在典型的java程序中编写:(并加载jdbc驱动程序)
import java.sql.Connection;
- > java.sql.Connection是来自rt.jar还是来自驱动程序类。
根据我的猜测,在这种情况下,java.sql.Connection必须来自rt.jar(作为接口),实际的实现来自驱动程序类。
如果我的假设是正确的,我们通常需要包含具有接口定义的jar,以便包含导入。
例如,考虑这种情况:
import java.sql.Connection;
如果我们将上面的接口打包为interface1.jar。
假设Concrete1.java实现了这个接口:
package com.vipin.myinterface;
public interface Interface1 {
public void print();
}
这包装在罐子里 - > concrete1.jar。
现在,假设我正在编写一个使用print()方法的应用程序,那么我是否需要包含这两个jar?
答案 0 :(得分:2)
java.sql.Connection
的情况是驱动程序为此和其他接口(如java.sql.Statement
,java.sql.ResultSet
和on)提供实现类。将接口绑定到正确的类实现的所有 magic 都发生在方法DriverManager#getConnection
中,该方法调用内部方法private static Connection getConnection(String url, java.util.Properties info, Class<?> caller) throws SQLException
,该方法将初始化{{1}的正确实例}。
当然,您可以在代码中使用类似的方法,将反射用于:
请不要认为只创建一个包含接口的jar和另一个包含此接口的实现类的jar会自动为你动起来,但这不会发生。