对Java中变量作用域理解

昨天写一个java小程序测试与oracle数据库的连接,小程序如下:

package com.test;
import java.sql.*;
public class procedure {
	public static void main(String[] args) {

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@10.8.2.73:1521:orcl","scott","123456");
			CallableStatement cs=ct.prepareCall("{call pro_book(?,?,?)}");
			cs.setInt(1, 10);
			cs.setString(2, "华尔街之狼");
			cs.setString(3, "中信出版社");
			cs.execute();
			cs.close();
			ct.close();
		} 
		  
		catch (ClassNotFoundException e) {

			e.printStackTrace();
		} 
		catch (SQLException e) {

			e.printStackTrace();
		}

	}

}

变量cs和ct在try{}之外就无法使用,当时就懵了,首先想到的就是超出作用域了,查过资料之后发现确实是超出作用域了,ct和cs的声明都是在try{}里面进行的,作用局就是在{}之内,把ct和cs的声明放在try{}之外就可以使用了。总结:变量的作用域开始于“{”,结束于“}”。修改之后的代码为:

package com.test;
import java.sql.*;
public class procedure {
	public static void main(String[] args) {
		Connection ct=null;
		CallableStatement cs=null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			ct=DriverManager.getConnection("jdbc:oracle:thin:@10.8.2.73:1521:orcl","scott","58764899");
			cs=ct.prepareCall("{call pro_book(?,?,?)}");
			cs.setInt(1, 10);
			cs.setString(2, "华尔街之狼");
			cs.setString(3, "中信出版社");
			cs.execute();
		} 
		  
		catch (ClassNotFoundException e) {

			e.printStackTrace();
		} 
		catch (SQLException e) {

			e.printStackTrace();
		}
		finally{

			try {
				cs.close();
				ct.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}

	}

}
时间: 2024-10-28 23:31:30

对Java中变量作用域理解的相关文章

畅销书对Java中Iterator的理解误区

声明:本博客为原创博客,未经允许,不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/28110615 最近放假,闲来无事,便翻看以前看过的一些书,竟然发现有些书本(甚至是一些畅销书)对Java中Iterator有很大的误解,比如某畅销书在Collection那一章有这么一句话:"当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集

沉淀再出发:关于java中的AQS理解

沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的,但是AQS的底层其实也是使用了大量的CAS,因此我们可以看到CAS的重要性了,但是CAS也是有缺陷的,但是在大部分使用的情况下,我们往往忽略了这种缺陷. 二.AQS的认识 2.1.AQS的基本概念 AQS(AbstractQueuedSynchronizer)就是抽象的队列式的同步器,AQS定义了

java中的作用域有哪些?

java中变量主要有3中类型:成员变量.静态变量(java中没有全局变量一说).局部变量 成员变量:作用范围与类的实例化对象的作用范围相同,类被实例化时成员变量才会在内存中分配空间并初始化,生命周期和被实例化对象的生命周期一样. 静态变量:用static修饰,不依赖于任何特定的实例,被所有实例共享,类被加载的时候JVM就会给类的静态变量分配存储空间. 局部变量:作用域为花括号内. 2.成员变量的4种作用域 作用域和可见性 当前类 同一个package 子类 其他package public √

java中变量命名和引用变量的一个坑

这次有两个主题,第一个太简单啦,就是java中变量的命名规则,纯记忆性东西.第二个主题,就是讨论一下对象引用变量的一个注意点. 如果你对命名规则很熟啦,就直接看第二个内容吧.(上边的图稍微有点顺序紊乱啊) 一.java中变量的命名规则 大多数语言的命名规则是相似的,只有一些微小的差别. 变量的第一个位置,可以是字母,下划线(_),美元符($) (这个在c/c++,python中是不行的)(注意:不能是数字哦,一想就知道啦为什仫) 其他的位置可以是数字,字母,下划线 不能使用java中的关键字 j

java中变量运算细节 (2)

/* 目的:测试变量的运算方式 结果:byte a, b, c; a = b+c; 或者 a = b+10 形如这种形式的算式, 等式的右边的运算结果默认的都是int型的!因为等式右边有变量, 编译器无法确定变量的内容 ,因为它是变量!所以相加之后得到的int再默认强制转换成byte可能会损失精度. 而形如 a=4+5:这种常量的赋值,虽然 4 和 5 都默认的是int, 但都是常量,它们的值是确定的!所以如果 4+5的值超过了 byte的最大值的范围, 那就会编译出错!(也就是等式右边都是常量

PHP和JS中变量作用域

一,PHP中变量作用域 对于大多数PHP的变量只有一个作用域.在用户自定义函数里采用局部变量作用域.所有的函数内使用的变量被设置为局部变量.例如: <?php $a=1; function test() { echo $a; } test(); ?> 这段程序不会输出任何的东西因为echo语句要输出局部变量 $a ,而函数内的 $a 从未被赋过值.你可能注意到和C语言有点小小的区别,C中全局变量可以直接在函数内引用,除非它被一个局部变量所覆盖.因为这使得人们可能不注意修改了全局变量的值.在PH

Java基础---Java中变量使用规则(六)

Java中变量的使用规则 不得不接受的变量小脾气: 1.Java 中的变量需要先声明后使用 2.变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值 3.变量中每次只能赋一个值,但可以修改多次 4.main 方法中定义的变量必须先赋值,然后才能输出 关于 String :表示变量中存储的数据的类型为字符串,后面小节中会详细讲到,小小期待吧~~ 代码: public class HelloWorld{    public static void main(String[] args) { 

谈谈我对Java中CallBack的理解

谈谈我对Java中CallBack的理解 http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallBack是回调的意思,熟悉Windows编程的人对"回调函数"这四个字一定不会陌生,但是Java程序员对它可能就不太了解了."回调函数"或者"回调方法"是软件设计与开发中一个非常重要的概念,掌握"回调函数"的思想对程序员来说(不管用哪种语言)

Java中String的理解

Java中String的理解 最近在读String的源码,看了些String的文章,自己对String作了下总结记录下来. 1.String为什么是不可变的? String是final类,不可继承,其方法也不可被覆盖,避免从子类操纵父类属性:String的值保存在private final char[]数组中,本质是一个字符数组,私有则外部不可访问和修改,final引用则引用(或说引用的值)不变.引用可以简单地认为是堆上对象的首地址.String内部的private int hash,缓存has