java局部变量重复怎么解决
2023-01-10阅读(292)
问:java局部变量和成员变量名相同
- 答:实际上,java里面,在同一个作用域下,不能定义一样的标识符(也就是你做说的变量名)。为什么呢?因为,他需要保证你在某个作用于下使用某个标识符的时候,JVM能够正确进行区分!所以,实际上,全局变量和局部变量和内存并不存在绝对直接的关系。实际上,不管是全局的还是局部的变量,他的标识都是保存在栈里面的。
成员变量作用域在整个类,方法中为什么可以再重复定义?
因为在java中,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变量一样的名字,我们使用的过程中,调用全局变量的话,会使用this关键字辅助。如:
class A{
int i=10;
void f(){int i=100;
System.out.println(this.i);//全局
System.out.println(i);//局部
}
} - 答:基本的数据类型像,int long char short float double这些都是在栈内存分配空间的,引用的类型像 String 、各种对象都是 在堆内存分配空间的,这个局部变量和成员变量没有关系
局部变量之作用在方法内部,也可以理解为包含它的{}内部,全局变量作用于整个对象,局部变量和成员变量可以重名
举个小例子
class test {
public static void mian(){
int i = 1;//i全局变量作用于整个对象
for(int i = 0;i<1;i++) {//这里定义的i局部变量只作用在{}内
System.out.println(i);//打印局部变量i为0
}
System.out.println(i);//打印全局变量i为1
}
} - 答:实际上,java里面,在同一个作用域下,不能定义一样的标识符(也就是你做说的变量名)。为什么呢?因为,他需要保证你在某个作用于下使用某个标识符的时候,JVM能够正确进行区分!所以,实际上,全局变量和局部变量和内存并不存在绝对直接的关系。实际上,不管是全局的还是局部的变量,他的标识都是保存在栈里面的。
成员变量作用域在整个类,方法中为什么可以再重复定义?
因为在java中,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变量一样的名字,我们使用的过程中,调用全局变量的话,会使用this关键字辅助。
} - 答:(-)局部变量会屏蔽掉同名的全部变量
(二)i为局部变量 他的作用域在整个main函数。。。所以在main函数里面如果还有为i的局部变量声明就会报错
问:Java 类中的成员变量与局部变量重名时,怎么分别出成员变量和局部变量的值
- 答:楼主这样只能输出局部变量,全局变量被隐藏掉了。
可以这样输出全局变量,如下:
static int time=3;
public static void main (String[] args){
int time =4;//局部变量可以和成员变量名相同
System.out.println("Time输出值:"+time);
print();
}
void print(){
System.out.println("Time输出值:"+time);
} - 答:默认输出是局部变量,因为你是在MAIN方法中,而MAIN方法又是STATIC的,所以不能用this关键字,正常如果重名,可以利用this.time来调用成员变量的。
- 答:通过给成员变量名添加前缀的方式
例如 A 类 里面的成员变量 B 和 局部变量 b
访问全局变量即成员变量 直接用类名点变量名 A.B
访问局部变量 可直接打变量名 b 或者 加this 如 this.b - 答:就近原则、作用域两方面去考虑
- 答:可以通过给成员变量名添加前缀的方式。
比如这个题目。如果类名为A.则
System.out.println("Time输出值:"+time);//输出局部变量的值
System.out.println("成员变量Time输出值:"+A.time);//输出成员变量的值 - 答:其实很简单,通俗点说,你只要按就近原则来考虑就清楚了
你在方法中调用的变量,当然就近用的是方法中的局部变量(同名的情况下)
局部变量在方法外不起作用 - 答:你只要弄清楚了,变量的作用域,就好解决了啊,java中,变量的作用域,一般是从定义开始,到该变量所在的花括号结束,出了花括号就不起作用了。
如果在局部变量中,第一了和成员变量相同的变量,局部变量将覆盖掉成员变量。
在这里,你如果想将两个time都输出的话,只要在类中再写一个输出的方法,或者直接 System.out.println("成员变量time:"+time);
就可以了 - 答:使用成员变量时用this.
问:各位大神,我初学java,这个布尔类型为什么我和书上一样它却说我局部变量b重复
- 答:书上的意思是你可以分别使用这三种方式来声明一个布尔类型的变量,但在实际操作中不要重复声明同一个名字的变量。
- 答:boolean b; 出现了两次, 所以是重复的
书上那个是针对于一个语句的例子, 不是整个程序片段的