/*
* static:他是一个关键字,用来修饰成员变量和成员方法
* static特点:
* 被所有的对象所共享
* 可以直接使用类名来调用
* 静态所修饰的成员加载优先于对象,随着类的加载而加载
注意事项:
静态方法:
可以调用静态的成员变量
可以调用静态的成员方法
只能在静态的方法中调用静态的成员
不可以调用非静态的成员变量
不可以调用非静态的成员方法
非静态方法:
可以调用静态的成员变量
*/
public class StaticDemo { public static void main(String[] args) { //Person.graduateFrom = "传智"; //static修饰的成员可以直接使用类名来调用。静态所修饰的成员加载优先于对象,随着类的加载而加载
Person p = new Person(); p.age = 18; p.name = "xiaoming"; p.graduateFrom = "cz"; p.speak(); Person p1 = new Person(); p1.age = 20; p1.name = "xiaohong"; // p1.graduateFrom = "cz"; //被所有的对象所共享 p1.speak(); } } class Person { String name; int age; // String graduateFrom; static String graduateFrom;//static修饰的成员可以直接使用类名来调用。静态所修饰的成员加载优先于对象,随着类的加载而加载
public void speak() { System.out.println(name + "----" + graduateFrom); } }
打印结果
public class StaticDemo2 { public static void main(String[] args) { Student.graduateFrom = "cz"; Student.study();//由于方法和参数都是静态的可以直接用类名调用
// Student.method(); Student s = new Student(); s.method(); s.eat(); } } class Student { String name; int age; static String graduateFrom; public static void study() { System.out.println(graduateFrom); //静态方法不能调用非静态的方法和变量 // System.out.println(name); // method(); sleep(); } public static void sleep() { System.out.println("sleep"); } public void eat() { //非静态的方法可以调用静态的方法和变量 System.out.println(graduateFrom); System.out.println(name);
sleep(); } public void method() { System.out.println("method"); } }
打印结果