栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

局部变量范围问题。怎么解决呢?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

局部变量范围问题。怎么解决呢?

确实存在范围问题,因为

statement
这里定义了一个本地方法变量:

protected void createContents() {    ...    Statement statement = null; // local variable    ...     btnInsert.addMouseListener(new MouseAdapter() { // anonymous inner class        @Override        public void mouseDown(MouseEvent e) { ... try {     statement.executeUpdate(query); // local variable out of scope here } catch (SQLException e1) {     e1.printStackTrace(); } ...    });}

当您尝试在

mouseDown()
方法内部访问此变量时,您尝试从匿名内部类内部访问局部变量,并且作用域不够。因此,它肯定是
final
(不可能给出您的代码)或声明为类成员,以便内部类可以访问此
statement
变量。


怎么解决呢?

你可以…

使

statement
一个类成员而不是一个局部变量:

public class A1 { // Note Java Code Convention, also class name should be meaningful       private Statement statement;    ...}

你可以…

定义另一个最终变量,并使用该变量,如@HotLicks建议:

protected void createContents() {    ...    Statement statement = null;    try {        statement = connect.createStatement();        final Statement innerStatement = statement;    } catch (SQLException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    ...}

但是你应该…

重新考虑您的方法。如果在按下按钮

statement
之前不使用变量,
btnInsert
那么 实际发生 之前
创建连接是没有意义的。您可以这样使用所有局部变量:

btnInsert.addMouseListener(new MouseAdapter() {   @Override   public void mouseDown(MouseEvent e) {       try {Class.forName("com.mysql.jdbc.Driver");try (Connection connect = DriverManager.getConnection(...);     Statement statement = connect.createStatement()) {     // execute the statement here} catch (SQLException ex) {    ex.printStackTrace();}       } catch (ClassNotFoundException ex) {e.printStackTrace();       }});


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号