标题两者都是在 class紧跟的括号里面
静态变量类型说明符是static。不属于某个实例对象,而是属于整个类。可以直接类名加点调用静态变量名使用。(无需使用new关键字实例化类)并且是项目或程序一启动运行到该类时就直接常驻内存堆。`
//又创建了一个类
public class demo {
public static void main(String[] args) {
Student zhangsan = new Student("张三");
Student lisi = new Student("李四");
zhangsan.staticSale();
lisi.staticSale();
zhangsan.staticSale();
lisi.staticSale();
zhangsan.staticSale();
//实例全局变tickets量票不共享
Student.staticSickets可以访问
System.out.println(Student.staticSickets);
}
}
**输出:**售票员张三售票一张,当前剩余4
售票员李四售票一张,当前剩余4
售票员张三售票一张,当前剩余3
售票员李四售票一张,当前剩余3
售票员张三售票一张,当前剩余2
5
public class demo {
public static void main(String[] args) {
System.out.println(Student.tickets);
}
}
实例变量则不需要关键词修饰。属于某个实例对象,必须使用new关键字访问。
//又创建了一个类
public class demo {
public static void main(String[] args) {
Student zhangsan = new Student("张三");
Student lisi = new Student("李四");
zhangsan.sale();
lisi.sale();
zhangsan.sale();
lisi.sale();
zhangsan.sale();
//实例全局变tickets量票不共享
}
}
**输出:**售票员张三售票一张,当前剩余4
售票员李四售票一张,当前剩余4
售票员张三售票一张,当前剩余3
售票员李四售票一张,当前剩余3
售票员张三售票一张,当前剩余2
//Student.tickets编译出错
System.out.println(Student.tickets);
java: 无法从静态上下文中引用非静态 变量 tickets
通用代码
public class Student {
public String name;
public Student(String name) {
this.name = name;
}
//静态全局变量
public static int staticSickets = 5;
//一般全局变量(实例变量)
public int tickets =5;
//使用静态变量售票
public void staticSale() {
if (--staticSickets > 0)
System.out.println("售票员" + name + "售票一张,当前剩余" + staticSickets);
else
System.out.println("售票员" + name + "售票一张,票已售完");
}
public void sale() {
if (--tickets > 0)
System.out.println("售票员" + name + "售票一张,当前剩余" + tickets);
else
System.out.println("售票员" + name + "售票一张,票已售完" );
}
}