Java基础教程3 --java相关机制

1 、 Java虚拟机

java虚拟机运行时结构如下

Java基础教程3 --java相关机制_第1张图片

2、指针?引用?

对于java来说,一切new的的对象在堆中分配内存,而函数参数的传递则利用栈完成。除了java中的基本类型外,一切都是对象。基本类型的传递通过栈来完成,采用的是拷贝方式。<对于对象传递,实际上是对象地址的赋值传递。也是通过堆栈传递。

3、代码示例

(1)代码如下:

class Insect {
	private int i = 9; 
	protected int j; 
	Insect() {   
		print("i = " + i + ", j = " + j);   j = 39;  
	}  
	private static int x1 =   printInit("static Insect.x1 initialized");  	static int printInit(String s) {   
		print(s);   
		return 47;  } 
}
public class Beetle extends Insect { 
	private int k = printInit("Beetle.k initialized");  
	public Beetle() {   
		print("k = " + k);   
		print("j = " + j);  
	}  
	private static int x2 =    printInit("static Beetle.x2 initialized"); 	//程序入口点  
	public static void main(String[] args) {   
		print("Beetle constructor");   
		Beetle b = new Beetle();  
	} 
}

(2) 程序运行结果如下: 

static Insect.x1 initialized static Beetle.x2 initialized Beetle constructor i = 9, j = 0 Beetle.k initialized k = 47 j = 39

(3) 相关知识:

 [1]java的初始化规则:

1>类加载阶段初始化: (1)静态变量 (2)静态初始化块   对象声明时初始化 (1)变量 (2)初始化块 (3)构造器

2> 在上述两个阶段中 子类的初始化在父类初始化完成后进行

3> 在上述规则满足条件下,初始化顺序和他们在类中定义顺序相同 java只会为类变量进行初始化,所有基本类型都会有一个固定初始值,非基本类型被初始化为NULL.但是方法中的局部变量不会被初始化,必须手动初始化,否则会报如下错 The local variable i may not have been initialized 类中static变量只会被初始化一次

[2]不同关键字声明的访问权限 

访问权限 类内部 package内 子类 其他
public    允许 允许 允许 允许
protected 允许 允许 允许 不允许
default     允许 允许 不允许 不允许
private     允许 不允许 不允许 不允许

[3]java程序的执行过程: 

写好程序后,javac将程序编译成.class(.jar文件是.class文件的打包),存储类字节码。 执行java程序,启动JVM,将调用用本地代码实现的Bootsstrap class loader,用于加载rt.jar中存储的java核心类 核心类中包含两个类装载器,一个负责加载存放在jre/lib/ext中的jar文件中所存储的类。 JVM会搜索main函数,加载该类,并启动一个新线程执行该main函数,如果发现有尚未加载的类,则用核心类中的类加载器去加载。

4 程序运行过程 结合上述知识,我们可以推论 编译完成后,本例子中会形成Insect.class和Beetle.class两个文件。 JVM找到main方法,加载包含main方法的类。此时开始初始化 Beetle,先对父类进行初始化。所以有打印 static Insect.x1 initialized 然后对子类进行初始化,会打印 static Beetle.x2 initialized 然后执行main函数,会打印 Beetle constructor 然后执行Beetle b = new Beetle();先执行父类的构造方法 i = 9, j = 0 然后初始化子类中的变量,会打印 Beetle.k initialized 最后执行子类的构造方法,打印 k = 47 j = 39 后退出。





你可能感兴趣的:(Java基础教程3 --java相关机制)