java中一般有三种变量:类变量,成员变量和局部变量。类变量
1.下面先看类变量,看下面这个例子
public class Demo6{
public String name;
public int age;
public static String sex="男"; public Demo6(String name, int age){
this.name = name;
this.age = age;;
} public void say(){
System.out.println("我的名字是"+name+",我今年"+age+"岁.");
} public static void main(String args[]){
Demo6 obj = new Demo6("alex",25);
obj.say();
System.out.println("我是"+sex+"生");
// System.out.println("我今年"+age+"岁");
}
}
类变量可以无需实例化便可访问(ps:如果一个实例改掉了类变量的值,其他实例调用此类变量值时也是改动后的)
如果去掉注释
System.out.println("我今年"+age+"岁");
,则会报错:Error:(19, 34) java: /Users/lsf/IdeaProjects/JavaPractice/src/Demo6.java:19: 无法从静态上下文中引用非静态 变量 age
2.接下来来看成员变量和局部变量,还是看这个例子,做一点小改动
public class Demo6{
public String name;
public int age;
public static String sex="男"; public Demo6(String name1, int age){
this.name = name1;
this.age = age;;
} public void say(){
System.out.println("我的名字是"+name+",我今年"+age+"岁.");
// System.out.println("我的名字是"+name1+",我今年"+age+"岁.");
} public static void main(String args[]){
Demo6 obj = new Demo6("alex",25);
obj.say();
System.out.println("我是"+sex+"生");
}
}
当执行下面这句时结果是正确的:
System.out.println("我的名字是"+name+",我今年"+age+"岁.");
这是因为name是成员变量,在整个实例中有效。而name1是局部变量,只在方法体内有效,如果像下面这样直接调用name1,则会报错
System.out.println("我的名字是"+name1+",我今年"+age+"岁.");
报错信息为:
Error:(13, 36) java:找不到符号
符号: 变量 name1
位置: 类 Demo6