JMS, JDBC 提供的都是interface,具体的实现得要用provider。例如ojdbc6.jar就是对JDBC Interface的实现,还有application server里有专门对JMS的实现。Interface和Class区分开来的好处就在于,用interface的人只管用就行了,不用管怎么实现的。如JMS,JDBC的实现涉及大量的网络层之类的底层操作,也是我们操心不来的。

Interface 里的variable都是final static。换言之,常量。

JAVA里的function全部都是pass by value,之所以会造成object是pass by reference的感觉,是因为object的变量本身就是一个指针。在function中对指针所指的object的改变是持续有效的。但是,参考以下代码:

 1 public class PassByValueTest {
 2 
 3     public static void main(String[] args) {
 4         TestData test1 = new TestData("A");
 5         setData(test1);
 6         System.out.println(test1.getData());
 7         setObject(test1);
 8         System.out.println(test1.getData());
 9     }
10 
11     public static class TestData {
12         private String data;
13         
14         public TestData(String data){
15             this.data = data;
16         }
17         
18         public String getData() {
19             return data;
20         }
21 
22         public void setData(String data) {
23             this.data = data;
24         }
25     }
26     
27     public static void setData(TestData test) {
28         test.setData("B");
29     }
30     
31     public static void setObject(TestData test) {
32         TestData test3 = new TestData("C");
33         test = test3;
34     }
35     
36 }

两个结果都是B,说明pass-by-value。

posted on 2016-01-27 23:17  sleepyface  阅读(217)  评论(0)    收藏  举报