用于修饰成员变量和成员函数
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
静态方法只能访问静态成员;非静态方法也可以访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的
成员变量随着对象的创建而存在,随着对象的回收而释放;
静态变量随着类的加载而存在随着类的消失而消失
2. 调用方式不同
成员变量只能被对象调用
静态变量能被对象调用也能被类名调用(一般建议使用类名调用)
3. 别名不同
成员变量也叫实例变量
静态变量也叫类变量
4. 数据的存储位置不同
成员变量数据存储在堆内存中的对象中,所以是对象的特有数据
静态变量数据存储在方法区(数据区或共享数据区)的静态区中,所以也叫对象的共享数据
以下代码在内存中的执行:
class Person{ PRivate String name; private int age; static String country = "CN"; public Person(String name, int age){ this.name = name; this.age = age; } public void show(){ System.out.println(Person.country+":"+this.name+":"+this.age); } public static void method(){ System.out.println(Person.country); }}class StaticDemo2{ public static void main(String[] args){ Person.method(); Person p = new Person("java",20); p.show(); }}
内存图解为:
说明:
static { System.out.println("这是静态代码块");}
1.静态代码块
随着类的加载而执行,并且执行一次。属于类。
2.作用
用于给类进行初始化。比如像javaAPI提供的Math类,全部为静态的方法,不允许创建对象,这个时候不能用构造 函数进行初始化,因为构造函数一般是给对象初始化,不能创建对象时不可使用。所以就要使用静态代码块来进行一些初始化的操作。
不同于静态代码块,是属于类的代码块,如:
class Demo{ { System.out.println("这是构造代码块"); }
//。。。}
和对象有关
可以给所有对象进行初始化,构造函数是给对应的对象进行针对性的初始化。
每次创建对象时都会执行。静态代码块是在类加载时执行一次。
新闻热点
疑难解答