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