引言
通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员声明前面加上static关键字就能创建这样的成员。static翻译过来是静态的,他可以用来修饰变量和方法。被static修饰的变量称为静态变量或类变量。被static修饰的方法称为静态方法或类方法。
main方法解析
static成员最常见的例子就是main()。因为在程序开始执行时必须调用main()方法。
public static void main(String[] args){}
- public被jvm调用,访问权限足够大。
- static被jvm调用,不用创建对象,直接类名访问。
- void被jvm调用,不需要给jvm返回值。
- main一个通用的名称,虽然不是关键字,但是被jvm识别。
- String[] args 以前用于接收键盘录入的。
通过对main方法的解析,我们大概对static有一个了解。接下来我们引用一些例子来认识一下static。
static的特点
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象共享
- 可以通过类名调用
- 注意:
- 在静态方法中不可以使用this关键字。
- 静态方法只能访问到静态的成员变量和静态的成员方法
例:
public class Demo{
String name="tom";
static int age=20;
}
public static void main(String[] args){
Demo d1=new Demo();
d1.name="tim";
d1.age=18;
Demo d2=new Demo();
d2.name="tian";
d2.age=30;
System.out.println(d1.name);
System.out.println(d1.age);
System.out.println(d2.name);
System.out.println(d2.age);
}
这道题的输出结果为:
tim
30
tian
30
静态变量和成员变量的区别
- 二者所属不同
- 静态变量属于类,所以也称为类变量
- 例:
static int a;
- 例:
- 成员变量属于对象,所以也称为实例变量(或对象变量)
- 例:
int a;
- 例:
- 静态变量属于类,所以也称为类变量
- 二者在内存中所处位置不同
- 静态变量存储于方法区的静态区
- 成员变量存储于堆内存
- 二者在内存中出现的时间不同
- 静态变量随着类的加载而加载,随着类的消失而消失(与类同生共死)
- 成员变量随着对象的创建而存在,随着对象的消失而消失
- 二者调用不同
- 静态变量可以通过类名调用,也可以通过对象调用
- 成员变量只能通过对象调用
静态代码块
- 在了解静态代码块之前我们可以先了解一下代码块。在java中,用{}括起来的代码被称为代码块,根据其位置和声明不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块。
- 局部代码块在方法中出现,限定变量生命周期,及早释放,提高内存利用率。
- 构造代码块在类中方法外出现,多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行。
- 静态代码块在类中方法外出现,用static修饰,用于类的初始化,在加载的时候执行,并且只执行一次。
- 三者的执行顺序是:静态代码块>构造代码块>构造方法
例:
public class Demo{
static{
System.out.println("大哈");
}
{
System.out.println("大哈真帅");
}
public Demo(){
System.out.println("大哈真的很帅");
}
}
public class De{
static{
System.out.println("DaHa");
}
public static void main(String[] args){
System.out.println("DaHa帅");
Demo d1=new Demo();
Demo d2=new Demo();
}
}
这道例题答案是
DaHa
DaHa帅
大哈
大哈真帅
大哈真的很帅
大哈真帅
大哈真的很帅
按照静态代码块>构造代码块>构造方法的执行顺序,先执行De中的静态代码块“DaHa”,再执行main方法,先输出“DaHa帅”,再执行d1,d1即Demo,在Demo中先执行静态代码块,输出“大哈”,再执行构造代码块,输出“大哈真帅”,最后是构造方法,输出“大哈真的很帅”,最后执行d2,依然是Demo,但是因为已经执行过静态代码块,所以本次不再执行,只用执行后两个。
本期到此结束,欢迎补充~
标签:java,变量,静态,Demo,代码,关键字,static,println From: https://www.cnblogs.com/daha123/p/16725914.html