java类的生命周期
1、 类型装载、链接与初始化
Java虚拟机通过装载、链接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用。其中,装载就是把二进制的Java类型读入Java虚拟机中,而连接就是把这种已经读入虚拟机的二进制形式的类型数据合并到虚拟机的运行状态中去。连接阶段分了三个步骤:验证、准备和解析。验证确保了Java类型数据格式的正确并且适于Java虚拟机使用,而准备步骤则负责为该类型分配它所需的内存,比如为它的类变量分配内存,“解析”步骤则负责把常量池中的符号引用转换为直接引用(也可以在运行中的程序真正使用某个符号引用时再去解析它)。初始化将给类变量赋予适当的初始值。装载、连接和初始化这三个阶段必须按顺序进行。
虚拟机严格定义了初始化的时机:
① 当创建某个类的新实例时(或者通过在字节码中执行new指令,或者通过不明确的创建、反射、克隆或者反序列化)。
② 当调用某个类的静态方法时(即在字节码中执行invokestatie指令时)。
③ 当使用某个类或接口的静态字段,或者对该字段赋值时(在字节码中,执行getstatic或者putstatic指令时),用final修饰的静态字段除外,它被初始化为一个编译时的常量表达式。
④ 当调用JavaAPI中某些反射方法时,比如类Class中的方法或者java.reflect包中类的方法。
⑤ 当初始化某个类的子类时(某个类初始化时,要求它的超类已经被初始化了)。
⑥ 当虚拟机启动时某个标明为启动类的类(即含main()方法的那个类。)
任何一个类的初始化都要求它的所有祖先类(而不是祖先接口)预先被初始化。而一个接口的初始化,并不要求它的祖先接口预先被初始化。
1) 装载阶段由三个基本动作组成:
① 通过该类型的完全限定名,产生一个代表该类型的二进制数据流。
② 解析这个二进制数据流为方法区内的内部数据结构。
③ 创建一个表示该类型的java.lang.Class类的实例。
如果一个类装载器在预先装载时遇到缺失或者错误的class文件,它必须等到程序首次主动使用该类时才报告错误,如果一个类一直没有被程序主动使用,那么该类装载器就不会报告错误。
&n
相关文档:
先来了解一下链表模式的原理:
首先写一个JavaBean,内容是要添加的元素和该元素的节点。
public class NodeBean implements Serializable
{
private Object data; //元素本身
private NodeBean next; //下一个节点
&n ......
-------------------------------oracle--------------------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@<machine_name><:port>:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
&nbs ......
package com.test.For_Each;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ForTest
{
public static void main(String args[])
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
/**
* 新式写法
*/
f ......
玩了一下短信猫:
用.net访问短信猫,并写了发送短信、读短信(这里的读短信是读取SIM卡中接收到的短信)、判断短信猫是否打开、打开等方法。并发布了webservice用于java工程调用。
这里只列出了调用的代码(java)不足之处请指教!
/**
* 初始化call
*/
private void inItCall() {
try {
Service se ......
第一次写这样的博客,感觉自己做的有点像笔记,不过本来就是笔记,我做笔记一般都是把本来不知道的,感觉有用的写下来,而且我也一般用与老师接近的语句写下来,避免自己的误解导致错误。
这次我看了《传智播客_张孝祥_Java基础1_Java开发前奏》这个课程。
1.老师说JAVA的第一个特点是”一次编译,到处运行“, ......