这其实是一个基础知识,但在项目还是有遇到不少问题.
例:
Parent.java
public class Parent{
public static void staticMethod(){
System.out.println("Parent static Method");
}
public void noStaticMethod(){
System.out.println("Parent no static method");
}
}
Child.java
public class Child extends Parent{
public static void staticMethod(){
System.out.println("Child static method");
}
public void noStaticMethod(){
System.out.println("Child no static method");
}
}
PcTest.java
public class PcTest{
public static void main(String args[]){
Parent p1 = new Parent();
Parent p2 = new Child(); //塑型
Child c = new Child();
System.out.println("p1.staticMethod:");
p1.staticMethod();
System.out.println("p1.nostaticMethod:");
p1.noStaticMethod();
System.out.println("p2.staticMethod:");
p2.staticMethod();
System.out.println("p2.nostaticMethod:");
p2.noStaticMethod();
System.out.println("c.staticMethod:");
c.staticMethod();
System.out.println("c.nostaticMethod:");
c.noStaticMethod();
}
}
运行后的结果:
1、Parent p2 = new Child();
2、Child c = new Child();
方式1涉及塑型,而静态方法是属于类的,也就是在类初始化就分配了。
方式2是实例化类,实例化后,不管是静态方法,还是非静态方法。当然就是对象的了。
还有一个数据库连接类的例子:
DbConn.java
package Test;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public class DbConn {
private static Connection conn;
public static Connection getDbConn(){
try{
Context ctx = new InitialContext();
String strLookup = "java:comp/env/jdbc/xs_web";
DataSource ds =(DataSource) ctx.lookup(strLookup);
conn = ds.getConnection();
conn.setAutoCommit(false);
if (conn != null){
System.out.print("success");
}else{
System.out.print("failure");
}
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
}
一个静态数据,一个静态方法.
测试类如下:
Test.java
import Test.DbConn
public class Test{
public static void main(String[] args){
DbConn.getDbConn();
//....
}
说明:因为getDbConn是static,所以不必实例类.就可直接调用.
如果不是static,那就不可这样调用了.必须实例化类.