java编程问题,紧急求助。
importjava.sql.*;importorg.sqlite.JDBC;classDemo{publicstaticvoidmain(String[]args){S...
import java.sql.*;import org.sqlite.JDBC;
class Demo{ public static void main(String[] args) { String str1; String str2; String str3; String str4; String str5; String str6; try { //连接SQLite的JDBC
Class.forName("org.sqlite.JDBC"); //建立一个数据库名zieckey.db的连接,如果不存在就在当前目录下创建之
Connection conn = DriverManager.getConnection("jdbc:sqlite:tiku.db"); Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("select * from shitiku order by random() limit 1 "); //查询数据
//将查询到的数据打印出来
str1="题目: " + rs.getString("题目"); str2="A:"+rs.getString("A"); str3="B:"+rs.getString("B"); str4="C:"+rs.getString("C"); str5="D:"+rs.getString("D"); str6="答案:"+rs.getString("答案");
rs.close(); conn.close(); //结束数据库的连接
} catch( Exception e ) { e.printStackTrace ( ); }
System.out.println(str1);
}}
为啥报错,上面那个不算初始化吗。 展开
class Demo{ public static void main(String[] args) { String str1; String str2; String str3; String str4; String str5; String str6; try { //连接SQLite的JDBC
Class.forName("org.sqlite.JDBC"); //建立一个数据库名zieckey.db的连接,如果不存在就在当前目录下创建之
Connection conn = DriverManager.getConnection("jdbc:sqlite:tiku.db"); Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("select * from shitiku order by random() limit 1 "); //查询数据
//将查询到的数据打印出来
str1="题目: " + rs.getString("题目"); str2="A:"+rs.getString("A"); str3="B:"+rs.getString("B"); str4="C:"+rs.getString("C"); str5="D:"+rs.getString("D"); str6="答案:"+rs.getString("答案");
rs.close(); conn.close(); //结束数据库的连接
} catch( Exception e ) { e.printStackTrace ( ); }
System.out.println(str1);
}}
为啥报错,上面那个不算初始化吗。 展开
展开全部
需要在catch中也进行初始化!
方法里的局部变量必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。
如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译不通过。如果在catch或finally里也有,则可以通过编译。
总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要初始化成什么值好,就用上面的默认值吧!
方法里的局部变量必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。
如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译不通过。如果在catch或finally里也有,则可以通过编译。
总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要初始化成什么值好,就用上面的默认值吧!
展开全部
楼主的需求很简单,就是在try里赋值,外面用没错吧,只需把上面的String str1;改为String str1 = "";就可以了,至于原因就是像上面他们说的,String str1;这句只是定义,没有初始化,而在try语句里面赋值因为有可能抛异常,也就是有可能执行不到,所以不算初始化的,像我说的这样改就没问题了,望楼主采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你str1没有初始化啊,你那个只能算是命名,为了防止String没有初始化,命名的时候你可以String str1 = ""这样就可以了,估计你try里面有错误,没走到赋值那边吧
追问
赋值倒是赋了。
我就是想在try外面用String的
怎么实现里面赋值,外面用?
追答
定义成全局变量,只要在同一个类里面,全局变量任何地方都可以获取到啊,不过你那边应该能获取到str1吧,因为你str1都是指向同一个地址的,你在你里面str1下面打印下看值是不是赋上去了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把输出语句写进try{ }里。
追问
我的目的是在try外面用那几个String的
有什么方法让我在外面可以用吗。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String str1叫定义,不叫初始化.String str1="";或者String str1=new String();才叫初始化
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询