static关键字
-
概念
static被称为静态,可以用来修饰类的属性,方法,代码块,内部类.
特点:
- 随着类的加载而加载
- 优先于对象的存在
- 修饰的成员,被所有对象所共享
- 可不创建对象,直接被类调用
-
静态类与非静态类之间的区别
静态变量:被static修饰的变量,加载类的时候被创建,不随对象的创建而改变,静态变量位于方法区,类消失对应的变量消失。
非静态变量:不被static修饰的变量,每创建一次对象,就会为变量分配一次内存,存放在堆内存中,对象消失对应的变量消失。
JAVA中初始化的顺序:
加载类;
静态变量初始化
静态代码块;【其只能调度静态的,不能调度非静态的】
成员变量
构造代码块
构造方法
普通代码块
-
static关键字
static属性
静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个.
public class Chinese { /** * 成员变量,创建对象时复制一份 */ String name ; int age ; //country1 成员变量 ,每个中国人的国籍都是中国,每当有对象创建时都复制一份到堆中,浪费内存空间. String country1 = "中国"; /** * 当所有对象中的某个属性值都一样时,这个属性值可以采用static静态修饰,在内存中只有一份(这个属性放在方法区中),对所有对象共享, */ static String country2 = "中国"; }
public static void main(String[] args) { Chinese zs = new Chinese(); zs.name = "张三"; zs.age = 18; System.out.println(zs.country1);//只能通过对象来进行调用 System.out.println(zs.country2);//country2被static修饰,可以通过对象调用 System.out.println(Chinese.country2);//被static修饰,可以通过类调用,省去创建对象,例如 Math.PI }
static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用
在static方法内部只能访问类的static属性,不能访问类的非static属性.
成员方法可以访问成员变量,也可以访问静态变量和静态方法.
public class StaticMethod { String mame; static String country = "中国"; //被static修饰的方法也是存在方法区 public static void testStatic(){ System.out.println("静态方法"+country);//静态方法只能访问 静态的变量 } public void test(){ System.out.println(mame); //成员方法可以访问 成员变量 testStatic(); System.out.println(country);// 成员方法可以访问静态方法 还可以访问静态变量 } public static void main(String[] args) { StaticMethod.testStatic();//可以直接通过类名调用 } }
public class TicketSeller { //所有的窗口票数都是同样的 static int ticket=11; //出票的方法只有一个 public static void sellticket(){ System.out.println("卖票的静态方法"+ticket); ticket=ticket-1; } public static void main(String[] args) { TicketSeller.sellticket(); TicketSeller.sellticket(); TicketSeller.sellticket(); TicketSeller.sellticket(); } }/*输出结果为 卖票的静态方法11 卖票的静态方法10 卖票的静态方法9 卖票的静态方法8*/