Java学习——类的加载、连接和初始化

  • JVM和类
      当调用java命令运行某个java程序时,该命令将会启动一个java虚拟机进程,同一个JVM里的所有线程、所有变量都处于同一个进程里,他们都使用该JVM进程的内存区。
      
       当系统出现以下几种情况时,JVM进程将被终止。
       ->程序运行到最后正常结束。
      ->程序运行到使用System.exit()或Runtime.getRuntime().exit()处结束程序。
       ->程序运行过程中遇到未捕获的异常或错误而结束。
      ->程序所在平台强制结束了JVM进程。

    当java程序运行结束时,JVM进程结束,该进程在内存中的状态将丢失。

定义一个包含类变量的类

public class Test{
    //定义一个类变量
    public static int a = 6;
}

定义一个类创建Test类的实例,并访问类变量a

public class Test1{
	public static void main(String [] args){
		Test a = new Test();
		a.a++;
		System.out.println(a.a);
	}
}

下面也创建Test对象,并访问其类变量a的值

public class Test2{
	public static void main(String [] args){
		Test b = new Test();
		System.out.println(b.a);
	}
}

运行结果:
在这里插入图片描述
  Text类里的a成员变量是静态变量,同一个类的所有实例的静态变量共享同一块内存区,运行Test1时改变了第一个Test实例的成员变量a,那么第二个Test实例的成员变量a也将搜狐都爱影响,其实并不是这样,因为两次运行java程序处于两个不同的JVM进程中,两个JVM之间不会共享数据。

  • 类的加载
      类的加载指的是通过类加载器将类的class文件读入内存,并为之创建一个java.lang.Class对象。

  • 类的连接
      类被加载后,接着将会进入连接阶段,连接阶段负责把类的二进制数据合并到jre中。类连接飞卫如下三个阶段。
      (1)验证:检验被加载的类是否有正确的内部结构,并和其他类协调一致。
      (2)准备:负责为类的类变量分配内存,并设置默认初始值。
      (3)解析:将类的二进制数据中的符号引用替换成直接引用。

  • 类的初始化
      主要对类变量进行初始化。对类变量指定初始值有两种方式:
      (1)声明类变量时指定初始值;
      (2)使用静态初始化块为类变量指定初始值。

猜你喜欢

转载自blog.csdn.net/weixin_43574957/article/details/84888040