静态属性、静态代码块、静态方法、构造方法、普通方法的执行顺序

时间:2021-10-14 19:32:34

一、

静态代码块:

是在当类被载入(内存)时,(最先被调用的),静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。执行类的载入之前就会调用。

 

非静态代码块:

是在当类的对象被创建载入(内存)时,(最先被调用的),每创建一个对象,即每载入一个对象,非静态代码块都执行一次。执行类对象的载入之前就会调用。

 

对象载入之前,一定要是类先被载入。

 

静态方法、非静态方法:都是调用时,才执行的。静态方法属于类的,加载完类就可以调用静态方法;非静态方法是属于对象的,加载完对象就可以调用非静态方法。

 

加载类的动作没有什么标志性,但是加载对象的标志动作就是new动作,会去执行

 

更精简:

静态代码块:类每次加载到内存中调用一次,并最先调用

非静态代码块:类的对象每次加载到内存中调用一次,并最先调用,然后是调用对应的构造方法

静态方法、非静态方法:都是进行方法调用时才执行,调用静态方法,前提是:类已经加载到内存中;调用非静态方法,前提是类的对象已经加载到内存中。

 

那么,

类什么时候被加载/类加载时机:【即类被使用时,就会加载】
第一:生成该类对象的时候,会加载该类及该类的所有父类;
第二:访问该类的静态成员的时候;
第三:class.forName("类名");

 

代码块是自动的,方法是被动的。

作用:静态代码块可以用来初始化一些项目最常用的变量和对象;静态方法可以用作不创建对象也可以能需要执行的代码。

 

引申:JVM(内存)主要分区:程序计数器、本地方法栈、堆(heap)虚拟机栈(stack)方法区(method)     

堆:放对象实例

栈:局部变量表、操作数栈、动态链接、方法出口(程序上下文)

方法区:被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码。

http://www.tuicool.com/articles/eyI73u

 

有类继承的情况也一样分析:先加载子类的类,那么要加载父类的类,之后new一个子类,那么之前也要new一个父类

 

 

 

 

 二、

iterable接口:集合类实现了iterable接口,调用接口的iterator()方法可以生成一个迭代器。iterator迭代器也是一个接口,集合类不直接实现它的原因是调用iterator()方法可以生成下标从0开始的迭代器。

enumeration接口:迭代器接口,类似于iterator。

区别:enumeration只有hasMoreElements()、nextElement()两个方法,而iterator有hasNext()、next()、remove()三个方法,多了一个删除功能。

vector可以使用enumeration,所有集合类都可以使用iterator。

 

 

http://www.blogjava.net/seaairland/articles/44367.html

 

 三、

在Java里面参数传递都是按值传递:(由不同角度考虑)

按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,可以统称为按值传递。

 

四、date

 

五、

java回调:

就是说,被调用方在被调用时也会调用对方,这就叫回调。“If you call me, i will call back”。

 

http://www.brieftools.info/

http://www.hztarena.org/Html/soft/201212/1762.html

http://www.51cto.com/specbook/24/6720.htm