Java初始化详解

三十九、代码块
(1)、代码块:静态代码块、构造代码块。
(2)、都在类里面写。
(3)、若在main方法里面写构造代码块(只有一对大括号和代码语句组成)的样式的代码,则是普通代码块。

四十、静态的东西属于类
类Class与类变量。
静态数据成员在第一次主动使用这个类的时候初始化。
x

四十一、类的生命周期
装载:
通过一个类的全限定名来获取此类的二进制字节流。
将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
在java堆中生成一个代表本类的Class对象,作为方法区这些数据的访问入口。
验证:
保Class文件的字节流中包含的信息符合当前虚拟机的要求,确并且不会危害虚拟机自身的安全
准备:
正式为类变量分配内存并设置类变量初始值(各数据类型的默认值)的阶段,这些内存将在方法区中进行分配。
但是如果类字段的字段属性表中存在常量属性,那在准备阶段变量值就会初始化为常量属性指定的值。
解析:
在虚拟机将常量池内的符号引用替换为直接引用的过程。

四十二、执行顺序
首先需要加载类,然后在创建对象
Student s=null;只是创建变量,不算使用类 。
(1)、加载类时,首先执行静态代码块或静态属性。
(2)、类只加载一次,即静态代码块只执行一次。
(3)、Test t2=new Test(a);当通过new创建对象时,由于类只能被加载一次,所 以不执行静态代码块,直接执行构造代码块,即创建对象时就执行构造代码块。
(4)、创建对象时先将a的值传入构造器中,再执行构造代码块,再执行构造器。
(5)、创建几个对象, 构造代码块就执行几次,构造器也是。
(6)、然后继续执行main方法中的代码。

四十三、初始化
(1)、类初始化
             加载类时,静态属性先被加载。
(2)、对象初始化
先静态,后非静态。
对象的具体属性赋值:先属性,后方法(构造方法)。
属性赋值:先声明(同时赋默认值),再赋值。
静态语句块只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块中可以赋值,但是不能访问。
对象初始化与创建对象的个数有关,创建几个对象, 对象就初始化几次。

四十四、静态方法或者静态代码块中不能使用非静态数据和this
(1)、java保证了对象在使用其成员属性时,其属性都被初始化过。
(2)、但是加载类时,首先初始化静态数据,所以非静态数据还没被初始化,对象也没被初始化,而this代表当前类对象,由于对象没被初始化,所以不能使用。

四十五、在程序中,静态变量的初始化有两种途径
         遵循先声明后赋值原则
(1)在静态变量的声明处进行初始化。
(2)在静态代码块中进行初始化。

四十六、虚拟机类加载机制
        虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。

四十七、final属性初始化
下列初始化方式只能选择其中一种
(1)、属性为final的变量、类、接口等在声明时不赋值,只声明,且final 修饰变量时为常量。
(2)、可以在声明的时候直接赋值。
(3)、可以在代码块中赋值。
(4)、可以在构造方法中赋值,非静态数据在构造方法中初始化,如果有多个构造方法,需要在每个构造方法中给final属性初始化。

public Test() {
			a=10; 		
}
public Test(int i) {
	a=15;		
} 

四十八、垃圾回收机制
(1)、一旦垃圾收集机制准备好释放对象占用的存储空间,首先调用finalize()。
(2)、垃圾收集只跟内存有关。
(3)、finalize()方法在垃圾清理之前执行。
(4)、System.gc();通知jvm该清理垃圾,但是不一定什么时候执行。

四十九、堆区
(1)、存储的全部是对象,每个对象都包含一个与之对应的class的信息(class的目的是得到操作指令) ;
(2)、jvm只有一个堆区(heap),且被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身和数组本身;

五十、栈区
(1)、每个线程包含一个栈区,栈中只保存基础数据类型本身和自定义对象的引用;
(2)、每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问;
(3)、栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令);

五十一、方法区(静态区)
(1)、被所有的线程共享,方法区包含所有的class(class是指类的原始代码,要创建一个类的对象,首先要把该类的代码加载到方法区中,并且初始化)和static变量。
(2)、方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

五十二、java类型
基础类型只占一块内存,可一次定位。
引用类型占用两块内存,需定位两次。

五十三、非原始类型的声明
非原始类型声明的变量只分配变量的存储空间,不分配对象存储器空间

五十四、引用数据和对象数据
声明的引用变量不是数据本身, 而是对象的引用。引用变量在栈区,对象在堆区。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值