栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据 ...
java虚拟机通过装载、连接和初始化一个java类型,使该类型可以被一个正在运行的java程序所使用。
装载就是把二进制形式的java类型读入java虚拟机中;
连接就是把已经读入虚拟机的二进制形式的类型数据合并到虚拟机的运行时状态中去,连接阶段分为3个子步骤--验证、准备、解析。
之后就时初始化。
java虚拟机实现必须在每个类或接口首次主动使用时初始化。
下面这六种情形符合主动使用的要求:
1 、当创建某个类的新实例时(或者通过在字节码中执行new指令;或者通过不明确的创建、反射、克隆或者反序列化)。
2、当调用某的类的静态方法时(即在字节码中执行invokestatic指令时)。
...
1 类的初始化顺序:
先静态变量 静态初始化块(两者不分先后)
后变量 初始化块(两者不分先后)
先初始化父类的静态元素再初始化子类的静态元素,这并不说明子类在父类完全初始化后再初始化。
2 属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义的变量的类型。
Integer i = 200;
Integer ii = 200;
System.out.println(ii == i);
Integer iii = 100;
Integer iiii = 100;
System.out.println(iii == iiii);
package cong;
import java.io.IOException;
import java.util.regex.Pattern;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRespon ...
就是为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突
LocalThread跟线程安全好像没有多大关系,他的作用更多的是起到Session,Request的作用,可以实现大范围内的对象共享(本线程中)
package cong;
/**
* @author E-mail:congpeixue@126.com
* @version 创建时间:2008-6-18 下午09:05:56 类说明
*/
public class SystemContext {
public static final ...
package password;
import java.util.Random;
/**
* @author 丛培雪 E-mail:congpeixue@126.com
* @version 创建时间:2008-6-9 下午08:34:37 类说明
*/
public class PasswordGenerator {
public static void main(String[] args) throws Exception {
PasswordGenerator passwordGenerator = new PasswordGenerat ...
import java.util.*;
public class RemoveDoubles {
public static void main(String[] args) {
// illustrating that a set filters doubles
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("c");
System.out.println("li ...
package string;
/**
*
* @author congpeixue
* @version 1.0
*/
public class StringSplit {
/*
* 如果存在正则表达式匹配此字符串中最末位或最前位的情况,则在原有原有拆分字符串(末位或开始位)的基础上加“”。
*/
public static void main(String[] args) {
String str1 = "catcat";
/**************************/
System.out.pri ...
看到别人对jode的大加赞赏,也决定去尝试一把。网络上找来大把资料,貌似很简单,可就是反编译不成功。后才发现,原来版本不对。Jode1.05貌似只支Eclipse3.1 ,Exlipse 3.2. 此路不通,只能另觅他法。JadClipse
下面就简单说下一JadClipse的使用
1 、首先到http://www.kpdus.com/jad.html#download中下载适合本地操作系统的jad.exe。并将此文件放置在jdk的bin文件夹下。
2、下载jadclipse_3.3.0.jar。因为我的Eclipse是3.3的所以需要jadclipse_3.3.0.jar。
3、此 ...
插入排序
package sort;
public class InsertSort {
static void insertSort(int[] array) {
int j = 0;
// Staright insertion Sort
for(int i = 1; i < array.length; ++i)
if(array[i] < array[i - 1]) {
int temp = array[i]; //复制为哨兵
array[ ...
静态库、动态连接库
程序编制一般需经编辑、编译、连接、加载和运行几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在连接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。
为了克服这个缺点可以采用动态连接库。这个时候连接器仅仅是在可执行文件中打上标志,说明需要使用哪些动态连接库;当运行程序时,加载器根据这些标志把所需的动态连接库加载到内存。
另外在当前的编程环境中,一般都提供方法让程序在运行的时候把某个特定的动态连接库加载并运行,也可 ...
回调技巧就是: 定义一个简单接口,并在该接口中声明我们要调用的方法。
package callback;
/**
* @author 丛培雪 E-mail:congpeixue@126.com
* @version 创建时间:2008-6-19 下午11:16:42
* 类说明
*/
public interface ICallBack {
public void print();
}
package callback;
/**
* @author 丛培雪 E-mail:congpeixue@126.com
* @version ...
- 浏览: 8705 次
- 性别:

- 来自: 杭州

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Click framework 的 Page ...
继续~~加油
-- by avaj -
Click framework 导言(一 ...
Tapestry 5 我还没用过 , 有空去看下
-- by congpeixue -
Click framework 导言(一 ...
这个不就是有点模仿Tapestry么?它有一个极大的缺陷:页面的呈现完几乎使用j ...
-- by rrrrutdk -
Click framework 快速入门 ...
对的啊 , 是一个框架, 引用Click is a simple JEE we ...
-- by congpeixue -
Click framework 快速入门 ...
click jee framework 是一个J2EE框架吧?我都没有听说过.
-- by qichunren






评论排行榜