1 static静态的,用来修饰属性,方法,代码块,内部类
2 当其中一个变量对此属性进行修改,会导致其他对象对此属性的一个调用
vs 实例变量:对象各有一套副本
3 静态变量和方法随着类的加载而加载,可以直接用类调用或对象调用,因为类加载早于对象。
4. static方法(类方法)中不能调用非静态的属性或方法。而非静态的方法可以调用静态的属性或方法。由于静态的结构生命周期早于非静态的结构,死亡还晚。所以在静态方法中调用时对象还没创建,自然不能调用非静态结构。反之亦然。静态方法中不能有this或super。
5 static的应用:使用静态变量可以实现“累加”的效果,因为静态变量在内存中独一份。
package lianxi3;public class TestStatic {public static void main(String[] args) {Account user1 = new Account("123", 3000);Account user2 = new Account("456", 5000);Account user3 = new Account("789", 8000);System.out.println(user1.toString());System.out.println(user2);System.out.println(user3);}}class Account {private int id;private String password;private static int rate;private double balance;private static double minbalance;private static int init = 1200; // 初始化账号public Account(String password, double balance) { // 注意:不用再写int id,已经设置初值了this.id = init++;this.password = password;this.balance = balance;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public static int getRate() {return rate;}public static void setRate(int rate) {Account.rate = rate;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}public static double getMinbalance() {return minbalance;}public static void setMinbalance(double minbalance) {Account.minbalance = minbalance;}public static int getInit() {return init;}public static void setInit(int init) {Account.init = init;}public int getId() {return id;}@Overridepublic String toString() {return "Account [balance=" + balance + ", id=" + id + ", password="+ password + "]";}}
结果:
Account [balance=3000.0, id=1200, password=123]
Account [balance=5000.0, id=1201, password=456]
Account [balance=8000.0, id=1202, password=789]