踩坑--字符串类型的比较,循环语句中和条件语句中的局部变量的作用域

@踩坑一、字符串类型的比较TOC

欢迎使用Markdown编辑器

public class OrderPizza {

    public OrderPizza() {
        Pizza pizza=null;
        String type = this.getType();
        if (type == "cheese") {
            pizza = new CheesePizza();
            pizza.setName("希腊披萨");
        } else if (type == "prepper") {
            pizza = new PrepperPizza();
            pizza.setName("胡椒披萨");
        }
        pizza.prepare();
        pizza.box();

    }

在调试工程模式发现了,空指针异常的情况,最后是发现在引用类型变量使用了==进行boolen运算,基础不牢,地动山摇
在调试工程模式发现了,空指针异常的情况,最后是发现在引用类型变量使用了==进行boolen运算,基础不牢,地动山摇。应该使用equal方式进行比较

public class OrderPizza {

    public OrderPizza() {
        Pizza pizza=null;
        String type = this.getType();
        if (type.equals("cheese") ) {
            pizza = new CheesePizza();
            pizza.setName("希腊披萨");
        } else if (type.equals("prepper")){
            pizza = new PrepperPizza();
            pizza.setName("胡椒披萨");
        }
        pizza.prepare();
        pizza.box();

    }

改成equals 进行比较后,问题解决

@踩坑二、循环语句中和条件语句中的局部变量的作用域

public class OrderPizza {

    public OrderPizza() {
//        Pizza pizza=null;
        String type = this.getType();
        if (type.equals("cheese") ) {
            Pizza pizza = new CheesePizza();
            pizza.setName("希腊披萨");
        } else if (type.equals("prepper")){
            Pizza pizza = new PrepperPizza();
            pizza.setName("胡椒披萨");
        }
        pizza.prepare();
        pizza.box();

    }

在这里插入图片描述
在条件语句中,定义了局部变量,在循环的大括号外面使用会报错,这是因为条件语句的作用域是其大括号的范围。
所有不要只知道,方法中才存在局部变量的作用域的问题,条件以及循环语句中同样存在局部变量的作用域,需要知道

把局部变量定义在循环体外部,问题解决

public class OrderPizza {

    public OrderPizza() {
        Pizza pizza=null;
        String type = this.getType();
        if (type.equals("cheese") ) {
            pizza = new CheesePizza();
            pizza.setName("希腊披萨");
        } else if (type.equals("prepper")){
            pizza = new PrepperPizza();
            pizza.setName("胡椒披萨");
        }
        pizza.prepare();
        pizza.box();

    }

例2 closeResource(connection,preparedStatement) 这句报错 preparedStatement无法取到,因为前面的preparedStatement声明在了try的大括号内,作用域只是在这个大括号内,finally的大括号无法取到,修正方法:需要把preparedStatement声明在try的外部。

public class CRUDTest {
    @Test
    public void insertTest() {
//  1 获取连接
        Connection connection = null;
        try {
            connection = getConnection();
//  2 编制sql语句
            String sql="INSERT INTO customers (name,email,birth) VALUES(?,?,?)";

//  3 获取PreparedStatement对象,预编译sql语句
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

//  4 填充占位符
            preparedStatement.setObject(1, "饺子");
            preparedStatement.setObject(2,"jiaozi@sina.com" );
            preparedStatement.setObject(3,"1980-01-01" );

//  5 执行sql语句
            preparedStatement.execute();
        } catch (Exception e)  {
            e.printStackTrace();
        } finally {

            closeResource(connection,preparedStatement)
        }

    }

更正后的结果

    public void insertTest() {
//  1 获取连接
        Connection connection = null;
        PreparedStatement preparedStatement=null;
        try {
            connection = getConnection();
//  2 编制sql语句
            String sql="INSERT INTO customers (name,email,birth) VALUES(?,?,?)";

//  3 获取PreparedStatement对象,预编译sql语句
            preparedStatement = connection.prepareStatement(sql);

//  4 填充占位符
            preparedStatement.setObject(1, "饺子");
            preparedStatement.setObject(2,"jiaozi@sina.com" );
            preparedStatement.setObject(3,"1980-01-01" );

//  5 执行sql语句
            preparedStatement.execute();
        } catch (Exception e)  {
            e.printStackTrace();
        } finally {

            closeResource(connection,preparedStatement);
        }

    }

这里可以参考这篇文章:
Java之局部变量的作用域(包括循环语句条件语句的局部变量的作用域,非常经典)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值