大多数程序设计语言都提供了“作用域”(Scope)的概念。

对于在作用域里定义的名字,作用域同时决定了它的“可见性”以及“存在时间”。在C,C++和Java里,作用域是由花括号的位置决定的。
变量的作用域
例子:
{
int x = 12;
/* only x available */
{
int q = 96;
/* both x & q available */
}
/* only x available */
/* q “out of scope” */
}
Java用一对大括号作为语句块的范围,称为作用域,作为在作用域里定义的一个变量,它只有在哪个作用域结束之前才可使用。
在Java中不能像下面这样书写代码:
{
int x = 12;
{
int x = 96; /* illegal */
}
}
Java编译器会认为变量已被定义,所以作用域中的变量不能重复定义,但是在C和C++中能将一个变量“隐藏”在一个更大的作用域里,在C和C++中被允许,在Java中是不允许的,因为Java的设计者认为这样做使程序产生了混淆。
再来看两个例子,为了让大家看到效果这里使用截图的方式:
①
②
我们再来看这段代码,大家思考一个问题,第11行和第12行为什么没有语法错误?代码如下:
如果我们交换一下位置呢,代码如下:
离开作用域,变量所分配的内存空间将被JVM回收,所以语法不会有错误,而第二种写法name并没有离开{}作用域,所以会语法错误。
上述的变量都是局部变量,那么如果是在有全局变量的情况下又是怎样一种结果呢?我们来用代码说话,代码如下:
大家仔细的观察并结合代码思考,可以得出变量的作用域结论如下:
在同一作用域范围的包裹下全局变量名和局部变量名是可以变量名相同的,在同一个作用域范围的包裹下局部变量和局部变量不可以变量名相同(作用域内不能重复命名),使用变量的时候如果不指明使用全局变量还是局部变量,那么默认的就是使用局部的那个变量,但是如果局部变量超出了它本身的作用域范围则会失效,被JVM垃圾回收,那么则可以重复命名此变量,并使用最新定义的这个局部变量。
对象的作用域
Java对象不具备与朱类型一样的存在时间。用new关键字创建一个Java对象的时候,它会超出作用域的范围之外。所以假若使用下面这段代码:
{
String s = new String("a string");
} /* 作用域的终点 */
那么句柄s,也就是引用会在作用域的终点处消失。然而,s指向的String对象依然占据着内存空间。在上面这段代码里,我们没有办法继续使用这个对象,因为指向它的唯一一个句柄已经超出了作用域的边界。
这样造成的结果是:对于用new创建的对象,只要我们愿意,它们就会一直保留下去。这个编程问题在C和C++里特别突出。在C++里遇到的麻烦最大:由于不能从语言获得任何帮助,所以在需要对象的时候,根本无法确定它们是否可用。而且最麻烦的是,在C++里,一旦完成工作,必须保证将对象手动清除。
这样便带来了一个有趣的问题。假如 Java 让对象依然故我,怎样才能防止它们大量充斥内存,并最终造成程序的“凝固”呢。在 C++里,这个问题最令程序员头痛。但 Java 以后,情况却发生了改观。 Java 有一个特别的“垃圾收集器”,它会查找用 new 创建的所有对象,并辨别其中哪些不再被引用。随后,它会自动释放由那些闲置对象占据的内存,以便能由新对象使用。这意味着我们根本不必操心内存的回收问题。只需简单地创建对象,一旦不再需要它们,它们就会自动离去。这样做可防止在 C++里很常见的一个编程问题:由于程序员忘记释放内存造成的“内存溢出”。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# java变量的作用域
# java对象的作用域
# Java中继承、多态、重载和重写介绍
# java方法重载示例
# 解析Java继承中方法的覆盖和重载
# Java方法的可变参数类型实例分析
# 浅谈Java中的可变参数
# Java中支持可变参数详解
# Java的访问修饰符与变量的作用域讲解
# JavaBean四个作用域范围的详解
# 简单介绍Java 方法的重载、可变参数、作用域
# 这段
# 它会
# 变量名
# 就会
# 句柄
# 这样做
# 再来
# 的是
# 都是
# 全局变量
# 是在
# 依然故我
# 又是
# 是由
# 不可以
# 已被
# 只需
# 更大
# 会在
# 这个问题
相关文章:
网站制作公司排行榜,抖音怎样做个人官方网站
建站之星如何实现五合一智能建站与营销推广?
建站主机选虚拟主机还是云服务器更好?
如何用AWS免费套餐快速搭建高效网站?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何选择高性价比服务器搭建个人网站?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何实现建站之星域名转发设置?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
微信小程序 五星评分(包括半颗星评分)实例代码
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何批量查询域名的建站时间记录?
Python如何创建带属性的XML节点
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
专业网站建设制作报价,网页设计制作要考什么证?
建站之星伪静态规则如何正确配置?
如何生成腾讯云建站专用兑换码?
网站制作公司,橙子建站是合法的吗?
建站之星logo尺寸如何设置最合适?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
实例解析angularjs的filter过滤器
如何在服务器上三步完成建站并提升流量?
如何在阿里云通过域名搭建网站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何通过远程VPS快速搭建个人网站?
红河网站制作公司,红河事业单位身份证如何上传?
如何通过可视化优化提升建站效果?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
宁波免费建站如何选择可靠模板与平台?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何通过虚拟主机快速完成网站搭建?
如何设计高效校园网站?
兔展官网 在线制作,怎样制作微信请帖?
如何选择高效便捷的WAP商城建站系统?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
如何在腾讯云服务器上快速搭建个人网站?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何在阿里云完成域名注册与建站?
如何选择适配移动端的WAP自助建站平台?
建站之星伪静态规则如何设置?
建站之星后台管理系统如何操作?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
建站之星如何助力网站排名飙升?揭秘高效技巧
高端建站三要素:定制模板、企业官网与响应式设计优化
Python lxml的etree和ElementTree有什么区别
公司网站制作价格怎么算,公司办个官网需要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。