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 类名调用静态属性时,可以省略类名(最好写上,以便区分)。