Java中的語法樹結構


 

 

1、JCTypeParameter

1
class  B<T extends CA&IA&IB> { ...}

截圖如下:  

 

接口繼承了StatementTree接口,而實現類實現了JCStatement類,不過有一個例外,如:

CaseTree 實現了JCStatement,但接口JCCase是繼承了Tree。 

 

1、JCContinue

語法樹結構舉例如下: 

1
2
3
4
stop:  while  ( get ()) {
             a = 3;
             continue  stop;
}

截圖如下:

 

2、JCEnhancedForLoop

語法樹結構舉例如下:

1
2
3
4
String[] strArray =  null ;
for (String a:strArray){
            System.out.println(a);
}

截圖如下:  

 

3、JCSwitch

語法樹結構如下: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static  enum  E {
         A, B
     }
 
public  static  void  main(String args[]) {
         E e = E.B;
         switch  (e) {
             case  A:
                 System. out .println( "A" );
                 break ;
             case  B:
                 System. out .println( "B" );
             default :
                 System. out .println(0);
         }
}

如下截圖:

關於JCSwitch再舉一個例子,如下:

1
2
3
4
5
6
7
8
9
10
11
switch  (c) {
case  1:
     int  aaa = 1;
     int  bbb = 2;
case  2:
     aaa = 2;
default : {
 
}
     bbb = 4;
}  

語法樹截取后圖如下所示.

 

 

接口實現了ExpressionTree,而實現類實現了JCExpression,如下:

 

1、LetExpression

語法樹結構如下: 

1
2
Integer foo = 0;
foo++;

截圖如下:

 

 

2、JCAnnotation

語法樹結構如下: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.test11;
 
public  class  Test1 {
 
     @MzTargetPackage(isCanNull = true ,
             num=100,
             version =  "1.1.0" ,
             fruitColor=MzTargetPackage.Color.BULE,
             value={ "a," , "b" , "c" },
             compoundTest=@Code(author =  "closedevice" ,date= "20161225" )
     )
     private  void  process() {
 
     }
}

如下截圖:

3、JCNewArray

語法樹結構如下: 

1
2
3
4
5
private  void  process() {
        int [] a =  new  int [2];
        int [] b =  new  int []{};
        int [] c = {1,2,3};
    }

如下截圖:

 

JCNewClass的語法樹結構如下:

1
2
3
4
5
6
7
class  Outer<T>{
     class  Inner<D>{
         public  <X> Inner(String a,Integer ...ems){
             
         }
     }
}

 

1
2
3
4
5
new  Outer<String>(). new  <Number>Inner<Integer>( "arg" ,1,2,3){
             public  void  m1(){
                 
             }
};

 

實例類與類聲明時的兩個值不太一樣。

下面來看JCNewClass的語法結構,如下截圖。

  

  

 

 

4、JCMethodInvocation

語法結構舉個例子,如下: 

1
2
3
4
5
6
7
8
9
10
11
12
13
class  Father {
     public  <T>  void  m1( int  a) {
     }
}
 
public  class  Test3  extends  Father {
 
     class  C {
         public  void  m() {
             Test3. super .<String>m1( 1 );
         }
     }
}

查看調用方法m1()的語法結構如下:

 

接口實現了ParameterizedTypeTree,而實現類實現了JCExpression,如下:

1
2
3
4
5
6
7
8
/**
      * A parameterized type, T<...>
      */
     public  static  class  JCTypeApply  extends  JCExpression  implements  ParameterizedTypeTree {
         public  JCExpression clazz;
         public  List<JCExpression> arguments;
         // ...

 

5、JCTypeApply

語法結構舉個例子,如下:  

1
2
3
4
5
class  X<T1  extends  InputStream,T2>{
     public  void  test(){
         X<FileInputStream,?> x =  null ;
     }
}  

如果截圖展示了語法樹結構:

 

6、JCWildcard

 

7、JCInstanceOf

舉個例子,如下:

1
2
Object o =  null ;
if  (o instanceof A){}  
截圖如下:

 

8、JCPrimitiveTypeTree

 當為 Object  o = int.class.toString();

 

9、JCUnary

如++a的樹節點如下:

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM