static 静态的
1.可以修饰什么?
2.修饰后有什么特点?
1.修饰属性 修饰方法 *修饰块 修饰内部类
2.特点:
2.1 静态元素在类加载时就初始化了 创建的非常早 创建时只有类 还没有创建对象
2.2 静态元素存储在静态元素区中 每一个类有自己的区域 与别的类不冲突
2.3 静态元素只加载一次(只有一份) 类的全部对象及类本身共享
2.4 由于静态元素区加载的时候 有可能没有创建对象 它可以通过类名字直接访问 也可以用对象调用
2.5 可以理解为静态元素不属于任何一个对象 和对象没有关系 属于类
而局部变量的作用域只能在它所属的{ }里 所以不能用static修饰变量
2.6 内存管理 (栈内存创建开始用完即回收 堆内存通过GC Garbage Collection回收)
静态元素区GC无法管理 可以粗暴地认为常驻内存
2.7 非静态成员(堆内存对象里)中可以访问静态成员(静态区)
2.8 静态成员中可以访问静态成员(都存在静态区里)
2.9 静态成员不可以访问非静态成员
从个数上来说 一个出发访问一堆相同的名字 分不清
从所属的范畴上 静态元素属于类 非静态成员属于对象自己的
2.10 静态成员中不可以出现this或super关键字
(this代表的是当前调用方法或属性的对象 静态成员在类创建时就有了 和对象没什么关系 静态成员属于类 静态成员没有对象也能调用 )

package teststatic;public class Person {public String name;public static int age;public void test() {System.out.println("我是普通方法" + Person.age);//非静态成员也可以访问静态成员}public static void testStatic(){System.out.println("我是静态方法");//静态元素中不可以出现this或super关键字}public static void main(String[] args){Person p = new Person();p.name = "小明";p.age = 18;Person p1 = new Person();p1.name = "小兰";p1.age = 16;System.out.println(p.name+"今年"+p.age+"岁");System.out.println(p1.name+"今年"+p1.age+"岁");}}
书店买书
package teststatic;public class BookStore {private static final int BOOKSTORE_ADMIN = 0;//静态常量private static final int BOOKSTORE_VIP = 1;private static final int BOOKSTORE_NORMAL = 2;public void buyBook(int price,int identity){switch (identity){case BookStore.BOOKSTORE_ADMIN:System.out.println("尊敬的管理员,您本次购买的书籍价格为"+price*0.5);case BookStore.BOOKSTORE_VIP:System.out.println("尊敬的VIP用户,您本次购买的书籍价格为"+price*0.8);case BookStore.BOOKSTORE_NORMAL:System.out.println("尊敬的用户,您本次购买的书籍价格为"+price);default:System.out.println("对不起,系统查询不到您的身份信息,请重新输入");}}}
