java局部变量和全局变量,看我的补充说明

在一个方法内部如果局部变量与类成员变量的名字相同,则局部变量隐藏类变量,在这种情况下如果要访问类成员变量,必须使用this。 这是ppt上的话,能给我举例子说明下吗
刚帮我回答的那个捏!!!刚要采纳就没了,奇怪

一楼的回答有些许漏洞,楼主的提问也不严谨。首先要区分下类成员变量和对象成员变量。
类成员变量就是被关键字static修饰的变量,它的存在不需要依赖实例(对象)。反过来就是对象成员变量。访问类成员变量直接 类名.成员变量名。如果使用this关键字编译会发出警告。给一个简单的例子:
public class Test{
private static int i=0;//类成员变量
public static void main(String[] args ){
int i=1;
System.out.println(i);//输出1.
System.out.println(Test.i);//输出0.

}
}
楼主说到关键字this,这里应该是指对象成员。示例如下:
public class Test{
private int i=0;//成员变量
public void print( ){
//这个方法不能加关键字static,因为被它修饰后,那么此方法只能访问外部类成员变量。即被关
//键字static修饰的变量,为什么呢?一会揭晓答案。
int i=1;
System.out.println(i);//输出1.
System.out.println(this.i);//输出0.
}
}
现在说下关键字static。凡是被static修饰的变量或者方法,在虚拟机加载类的时候就会给其分配内存空间。而且这些内存空间相对其他的实例是共享的。如下:
public class T{
public static int n=0;
}

public class TestMain{
public static void main(){
T t1=new T();
T t2=new T();
//结果:t1.n=t2.n=T.n=0
//改变其值
t1.n=100;
//结果:t1.n=t2.n=T.n=100

}

}
有了以上例子,现在说下为什么被static修饰的方法只能访问外部的被static修饰的变量。就是因为你可以 类名.方法名(这个调用是不依赖实例的),所以变量在这个时候应该被初始化了(拥有一片内存空间),即被static修饰。而不需要依赖实例,不需要new关键字来开辟一片内存空间。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-12
先看这个例子
--------------------------------------------------------------
public class Variable {
// 成员变量
String name = "成员变量";

public static void main(String[] args) {
// 新建类对象
Variable variable = new Variable();
// 调用对象的方法local方法
variable.local();
}

void local() {
// 局部变量
String name = "局部变量";
// 在方法体内打印变量name
System.out.println(name);
// 用this指向对象本身.this.name,为对象(Variable类对象)
System.out.println("打印:" + this.name);
}

}
---------------------------------------------------------
再看这个例子
----------------------------------------------------
public class Variable {
// 成员变量
String name = "成员变量";

public static void main(String[] args) {
// 新建类对象
Variable variable = new Variable();
// 调用对象的方法local方法
variable.local();
variable.local2("不知道");
}

void local() {
// 局部变量
String name = "局部变量";
// 在方法体内打印变量name
System.out.println(name);
// 用this指向对象本身.this.name,为对象(Variable类对象)
System.out.println("打印:" + this.name);
}

void local2(String name) {
// 成员变量name的值,等于传进来的namn值
// 也就是方法传参,这个参数名实际上是可以随意改变的
// this同样指向了当前对象,比如main方法中实例化的variable对象
// 在这里只是改变了当前对象中name变量的值,但是并没有影响到局部变量name的值
this.name = name;
// 这里打印的name还是局部变量
//也就是方法传入的参数
System.out.println("我打印的还是局部变量的值" + name);
}
}
----------------------------------------------------------
分析一下你给的例子
----------------------------------------------
import java.io.*;
public class A {
int i = 1;

void Fun() {
int i = 0;
i = this.i;
// A q=new A();
// System.out.println(this.i);
System.out.println(i);
}

public static void main(String args[]) {
A a=new A();
a.Fun();
}
}结果为1追问

可以把全局的赋值给局部的吗

追答

可以
---------------------------------------------------
郁闷刚才莫名的不显示了!
main方法是static静态方法,不可以直接写Fun();具体的就不解释了
可以让局部变量等于成员变量值

本回答被提问者采纳
第2个回答  2011-12-12
this代表就是本类的对象。this.属性名-表示使用本类的属性。没加this表示使用的是变量。变量使用的原则是就近原则,在方法内不使用this调用类属性,默认是调用方法变量,如果方法内没有声明,则调用类属性。那么方法内的name=name;实际就是局部变量等于局部变量。
第3个回答  2011-12-12
this代表该类本身, 所以可以this.出全局变量.
这个还需要例子吗 很简单,创建一个类 定义一个属性, 创建一个方法,方法中创建一个属性.this类中的属性 = 方法中的属性, 注明:两个属性的类型要相同.追问

import java.io.*;
public class A
{ int i=1;
static void Fun()
{
int i=0;
i=this.i;
// A q=new A();
// System.out.println(this.i);
System.out.println(i);
}
public static void main(String args[])
{

Fun();
}
}输出结果为0

追答

对这丫 . 如果你是this.i=i 那输出结果就是1了.
i指的是 方法中的变量,this.i指的是 class A中的变量属性

static方法中是不可以使用this关键字的 你可以把static去掉 测试下.

第4个回答  2011-12-12
class Test{
private int i =0;这个标注为①

public void Xxxx(int i:这个先标注为②){
//如果你要取①的i的值 访问: this.i
//如果你要取②的i的值 直接访问: i
}
}