静态和实例

1.实例 instance

通过类创建对象的过程称为类的实例化。实例化的结果是产生了一个实例,实例也叫对象。

1.1语法

new就是实例化的意思,new也是分配内存的意思

类名 对象名 = new 类名();

示例:

Student s1 =new Student();
Student s2 =new Student();

2.静态 static

用static修饰的叫静态,修饰的方法叫静态方法,修饰的变量叫静态变量,还可以定义块叫静态块

2.1static的作用

在同一个类的对象中共享数据。实现了数据的重复使用,提高了运行效率。

2.2 static的加载过程

首次出现类名时,为类的静态属性分配内存

2.3 程序运行的内存分配

类名首次出现时,先为静态变量分配内存,然后调用静态块,静态块可以为静态变量初始化。还可以干别的事情。
静态块只在类名首次出现时调用一次,以后就不再调用。
例如:

public class Demo{
    //构造为实例变量初始化
    public Demo(int i){
        this.i = i;
    }
    //静态块,为static变量初始化,静态块在首次类名出现时调用,但后于分配静态变量。
    static{
        age = 20;
    }
    static int age=0;
    int i;
}

3.两者的区别:

静态在类中只有一份;而实例,就是new出来的堆的内存空间,实例是每个对象专有的,每new一次就分配一次内存
3.1 实例变量是在new类时在堆中分配内存的。
3.2 构造函数可以为实例属性初始化。构造函数不会为静态属性初始化。
3.3 由于静态属性是所有对象共有的,而所有对象都在类中,因此静态属性也称为类属性,或者类变量,或者类成员。
3.4 静态属性属于类,不属于某个具体的对象,因此在new对象时,不会给静态属性分配内存。
3.5 当在程序运行期间,首次出现类名时,会暂时停止程序运行,去为类的静态属性分配内存,然后继续运行。
3.6 静态变量被分配在方法区中,常驻内存,永不回收。静态变量只有一份。相当于c语言的全局变量。
3.7 静态变量由类名操作,由类名赋值,取值。
3.8 类名调用静态属性时,可以省略类名(最好写上,以便区分)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容