今天繼續研究公司的新項目,據說是京東的架構,研究看了一番,果然很牛逼,大致是Maven+spingmvc+spring+mybatis+ehcache+velocity來搭建的,數據庫用的是mysql,開發工具用的是intelJ IDEA ,這個開發工具就不說了,剛接觸各種懵逼,各種不會操作,但是總體感覺要比myeclipse反映的快,mybatis就更不用說了,但是用到的一個可以根據數據庫表來自動生成mapper類(接口,持久層的dao類)、mapper.xml、pojo,由於mybatis是不需要提供實現類,這下就很是方便了,只用建立數據庫表,然后把表配置在mybatis的相關配置文件中就可以了,但是其中一個自動生成的query類中,竟然還有一個聲明為static的類,就來研究一下。
java里面static一般用來修飾成員變量或函數。但有一種特殊用法是用static修飾內部類,普通類是不允許聲明為靜態的,只有內部類才可以。被static修飾的內部類可以直接作為一個普通類來使用,而不需實例一個外部類(見如下代碼):
1 public class OuterClass { 2 public static class InnerClass{ 3 InnerClass(){ 4 System.out.println("============= 我是一個內部類'InnerClass' ============="); 5 } 6 } 7 } 8 9 10 public class TestStaticClass { 11 public static void main(String[] args) { 12 // 不需要new一個InnerClass 13 new OuterClass.InnerClass(); 14 } 15 }
如果沒有用static修飾InterClass,則只能按如下方式調用:
1 package inner_class; 2 3 public class OuterClass { 4 public class InnerClass{ 5 InnerClass(){ 6 System.out.println("============= 我是一個內部類'InnerClass' ============="); 7 } 8 } 9 } 10 11 public class TestStaticClass { 12 public static void main(String[] args) { 13 // OutClass需要先生成一個實例,然后再new一個InnerClass(); 14 OuterClass oc = new OuterClass(); 15 oc.new InnerClass(); 16 } 17 }