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("对不起,系统查询不到您的身份信息,请重新输入");
}
}
}