Java中的语法树结构

本文深入解析Java语法树的各种节点类型,包括类型参数、循环、增强型for循环、switch语句、表达式、注解、数组创建、方法调用、泛型应用等,通过具体示例阐述每个节点的结构及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、JCTypeParameter

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

截图如下:  

 

接口继承了StatementTree接口,而实现类实现了JCStatement类,不过有一个例外,如:

CaseTree 实现了JCStatement,但接口JCCase是继承了Tree。 

 

1、JCContinue

语法树结构举例如下: 

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

截图如下:

 

2、JCEnhancedForLoop

语法树结构举例如下:

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

截图如下:  

 

3、JCSwitch

语法树结构如下: 

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再举一个例子,如下:

switch (c) {
case 1:
	int aaa = 1;
	int bbb = 2;
case 2:
	aaa = 2;
default: {

}
	bbb = 4;
}  

语法树截取后图如下所示.

 

 

接口实现了ExpressionTree,而实现类实现了JCExpression,如下:

 

1、LetExpression

语法树结构如下: 

Integer foo = 0;
foo++;

截图如下:

 

 

2、JCAnnotation

语法树结构如下: 

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

语法树结构如下: 

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

如下截图:

 

JCNewClass的语法树结构如下:

class Outer<T>{
	class Inner<D>{
		public <X> Inner(String a,Integer ...ems){
			
		}
	}
}

 

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

 

实例类与类声明时的两个值不太一样。

下面来看JCNewClass的语法结构,如下截图。

  

  

 

 

4、JCMethodInvocation

语法结构举个例子,如下: 

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,如下:

 /**
     * A parameterized type, T<...>
     */
    public static class JCTypeApply extends JCExpression implements ParameterizedTypeTree {
        public JCExpression clazz;
        public List<JCExpression> arguments;
        // ...
} 

 

5、JCTypeApply

语法结构举个例子,如下:  

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

如果截图展示了语法树结构:

 

6、JCWildcard

 

7、JCInstanceOf

举个例子,如下:

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

 

8、JCPrimitiveTypeTree

 当为 Object  o = int.class.toString();

 

9、JCUnary

如++a的树节点如下:

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/extjs4/p/7118730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值