this.getClass()得到什么?
this 表示當前對象的引用;
getClass() 是 java.lang.Object 中的方法,它返回一個對象的運行時類;
this.getClass() 就是返回當前對象的運行時類。
Logger.getLogger(this.getClass())又得到什么?
他得到一個Logger對象,這個Logger將監視this.getClass()這個運行時類,這個運行時類里面你可能創建了log.info(""), log.debug(""),……等語句,那么這些語句就會根據你預先定義的Logger級別來輸出你的日志。就跟你寫System.out.print("")一樣,不同的是Logger可以根據需要按級別進行日志輸出控制。(當然這只是一方面)
Logger.getLogger(this.getClass())這樣寫,有什么好處?
這樣一來你只需要在基類中寫一行代碼就可以了,子類可以直接使用,這也是復用的原則。
- package com.zhaipuhong.j2se.keywords;
- public class ThisKeywordsA {
- protected String className = this.getClass().toString();
- public ThisKeywordsA(){
- System.out.println("ThisKeywordsA className == " + className);
- }
- }
- package com.zhaipuhong.j2se.keywords;
- public class ThisKeywordsB extends ThisKeywordsA{
- public ThisKeywordsB(){
- System.out.println("ThisKeywordsB className == " + className);
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ThisKeywordsB b = new ThisKeywordsB();
- }
- }
運行結果:
ThisKeywordsA className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB
ThisKeywordsB className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB
由於B繼承A,A對象首先被創建(請不要考慮抽象類和接口^_^)然后作為B對象的字對象創建B 對象. 此時的Logger就是B對象的一部分,可以為B對象所用。
this指的是子類的對象
