我在命名我在Java中看到的两种范围时遇到了困难:
class Fun {
int f = 1;
void fun() {
int f = 2;
while(true){
int f = 3;
int g = 1;
}
int g = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
案件主要是f = 3和g = 2;
一个while语句不引入新的范围,所以我不能创建一个名为而局部变量f.但是如果我创建一个名为的局部变量,g那么我可以在循环之后"重新创建"它.为什么?我知道它不再可访问,但如果编译器检查可访问性,那么它几乎检查范围.
所以我想知道这里的交易是什么,这些概念叫做什么?它与C++中的相同吗?
我只是设法安装g ++并自己试了一下:
#include <iostream>
using namespace std;
int main(){
int f = 0;
for(int i=0; i<1; i++){
int f = 1;
cout << f << endl;
{
int f = 2;
cout << f << endl;
}
}
cout << f << endl;
}
Run Code Online (Sandbox Code Playgroud)
显然,C++平等对待所有范围!
一旦你离开了{}循环,你离开它时就会超出范围.然后再次申报g是有效的.
局部变量仅在声明它们的块的持续时间内.
进一步详细说明:
f是对象范围.它始终可以从物体进入.f是本地范围.您可以使用它来访问它f,您仍然可以f使用访问对象范围this.f.第三个f是尝试创建第二个本地范围f.那是无效的.
第一个g是创建本地范围g.
g是创建第二个局部范围,g但第一个范围已经超出范围并消失.所以唯一无效的声明是第三个f.
存在第三种类型的范围,其中声明了静态变量 - 这些是在类的每个实例之间共享的变量.
类型有许多名称,一些最常见的是局部变量,实例变量(也称为字段)和类变量(也称为静态字段).您还有方法参数,但这只是获取局部变量的另一种方式.
进一步阅读:
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |