基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。
在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:
Object ob = new Object();
这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。
有了Object对象的大小,我们就可以计算其他对象的大小了。
Class NewObject { int count; boolean flag; Object ob; }
其大小为:空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小(4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此此对象的大小为24byte。
这里需要注意一下基本类型的包装类型的大小。因为这种包装类型已经成为对象了,因此需要把他们作为对 ......
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
基本类型包括:byte, short, int, long, char, float, double, Boolean, returnAddress
引用类型包括:类类型,接口类型和数组。
堆与栈
堆和栈是程序运行的关键,很有必要把他们的关系说清楚。
栈是运行时的单位,而堆是存储的单位。
栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。
在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。
为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得 ......
public class Sort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arry = { 19, 10, 5, 45, 100, 30, 35, 29 };
int[] sortArry = mergeSort(arry);
for (int i = 0; i < sortArry.length; i++) {
System.out.println(sortArry[i]);
}
}
/**
* 前后颠倒顺序
*
* @param arry
* @param i
* @param j
*/
private static void swap(int[] arry, int i, int j) {
int temp = arry[i];
arry[i] = arry[j];
arry[j] = temp;
}
/**
* 冒泡排序
*
* @param arry
* @return
*/
private static int[] bubbleSort(int[] arry) {
for (int i = 0; i < arry.length; i++) {
for (int j = 0; j < arry.length - i - 1; j++) {
if (arry[j] > arry[j + 1]) {
swap(arry, j ......
一. Proxy模式定义:
为其他对象提供一种代理以控制这个对象的访问.
二.模式解说
Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上.
在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),
直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层,这个访问层也叫代理。
Proxy模式是最常见的模式,在我们生活中处处可见,比如现在有个什么哥,特别的火,但是性别一般人看不出来,你去问"他",人家是
大腕,不和你直接对话,只有经纪人出面,这个经纪人就可以看成他的代理.
三.结构图
传统的结构图如下:
java动态代理结构图如下:
四.实现:
public interface Person {
public void ownSex();
public String isBoolean(String str);
}
public class SpringBrother implements Person {
public void ownSex() {
System.out.println("Female!");
}
public String isBoolean(String str) {
return "yes!";
}
}
public class MyInvocationHandler impl ......
Java
类库和常用类库介绍——序
作者:
zccst
Java
类库概念:
Java
的应用程序接口
(API)
以包的形式来组织,每个包提供了大量的相关类、接口和异常处理类,这些包的集合就是
Java
的类库
包名以
Java
开始的包是
Java
核心包
(Java Core Package)
;
包名以
Javax
开始的包是
Java
扩展包
(Java Extension Package)
,例如
javax.swing
包;
常用的
Java
核心包
(Java Core Package)
1.
java.lang
Java
编程语言的基本类库
2.
java.applet
创建
applet
需要的所有类
3.
java.awt
创建用户界面以及绘制和管理图形、图像的类
4.
java.io
通过数据流、对象序列以及文件系统实现的系统输入、输出
5.
java.net &nbs ......
软回车(Soft Return):软回车是在字处理程序中作为自动移行功能的一部分自动插入的,也叫换行符,在word中看不见。如果文本一行的长度超过文档所定义的右边距时,即当前行没有足够的空间放置下一个字符时,文字处理软件将在这一行文本的末尾自动插入一个软回车符,文本另起一行。这个软回车符是由编辑程序自动产生的,叫做软回车。当重新设置文档的右边距并做重新排版时,软回车出现的位置就会自动改变。
在网页中按Shift+Enter(回车键)为软回车。↓
硬回车(Hard Return):硬回车是段落标记,表示一个段落,也称回车符。硬回车是用户键入的回车符,它是实际插入正文的符号。它通常包括两个字符,即分别表示回车和换行。如果要在文本段落的末端换行或者在文本中增加空行,可按回车键。硬回车是文件的一部分,它不能自动消除,除非删除它。
按Enter(回车键)为硬回车。
简言之,软回车是字处理软件为了换行自动插入的,而硬回车是用户按Enter键键入的回车符,是实际插入正文的符号,是文件的一部分。
java转义字符:
\ddd 1到3位8进制数据所表示的字符(ddd)
\uxxxx 1到4位16进制数所表示的字符(xxxx)
\' 单引号字符
\\ 反斜杠字符
\r 回车
\n 换行 ......