Dataflow Anomaly Analysis

【原因分析】
原因分为三种:
UR 已定义的变量未初始化(赋值)就使用,例如:
                String name;
                System.out.println(name);
 
DU  变量定义以后仅在后面的某个分支中使用,例如:
                String name = "sam";
                if ("a".equals(argumentName)) {
                        System.out.println(name);
                }
        或者变量在某个分支中赋值后未使用过,例如:
                public void test1(int i) {
                        String name;
                        if (i > 0) {
                                name = "张三";
                                System.out.println(name);
                        } else {
                                name = "李四"; // 从这里开始到方法结束,未使用过此变量。
                                ......
                        }
                }
 
DD 已赋值的变量在未使用的情况下重新赋值,例如:
                String name = "张三";
                ......
                name = "李四";
                System.out.println(name);
 
【影响分析】
会导致运行时异常,或执行一些不必要的代码,降低程序运行效率。
 
【修改建议】
需要修改。
UR类型的,先初始化再使用,例如:
                String name = "sam";
                System.out.println(name);
                
DU类型的,将仅在某分支中使用的变量的定义移动到该分支中去,例如:
                String name = "sam";
                if ("a".equals(argumentName)) {
                        String name = "sam";
                        System.out.println(name);
                }
                
在某个分支中赋值后未使用过的情况,则去掉该赋值语句:
                public void test1(int i) {
                        String name;
                        if (i > 0) {
                                name = "张三";
                                System.out.println(name);
                        } else {
                                name = "李四"; // 从这里开始到方法结束,未使用过此变量。
                                ......
                        }
                }
 
DD类型的,定义变量时先不要初始化:
                String name = "张三";
                ......
                name = "李四";
                System.out.println(name);

你可能感兴趣的:(Data)