java综述 (三)

2014-11-24 11:49:47 · 作者: · 浏览: 26
tion)。
java程序员应该都知道滥用String的串接操作符是会影响程序的性能的。性能问题从何而来呢?归根结底就是String类的非可变性。既然String对象都是非可变的,也就是对象一旦创建了就不能够改变其内在状态了,但是串接操作明显是要增长字符串的,也就是要改变String的内部状态,两者出现了矛盾。怎么办呢?要维护String的非可变性,只好在串接完成后新建一个String 对象来表示新产生的字符串了。也就是说,每一次执行串接操作都会导致新对象的产生,如果串接操作执行很频繁,就会导致大量对象的创建,性能问题也就随之而来了。
为了解决这个问题,jdk为String类提供了一个可变的配套类,StringBuffer。使用StringBuffer对象,由于该类是可变的,串接时仅仅时改变了内部数据结构,而不会创建新的对象,因此性能上有很大的提高。针对单线程,jdk 5.0还提供了StringBuilder类,在单线程环境下,由于不用考虑同步问题,使用该类使性能得到进一步的提高。

三、String的长度
我们可以使用串接操作符得到一个长度更长的字符串,那么,String对象最多能容纳多少字符呢?查看String的源代码我们可以得知类String中是使用域 count 来记录对象字符的数量,而count 的类型为 int,因此,我们可以推测最长的长度为 2^32,也就是4G。
不过,我们在编写源代码的时候,如果使用 Sting str = "aaaa";的形式定义一个字符串,那么双引号里面的ASCII字符最多只能有 65534 个。为什么呢?因为在class文件的规范中, CONSTANT_Utf8_info表中使用一个16位的无符号整数来记录字符串的长度的,最多能表示 65536个字节,而java class 文件是使用一种变体UTF-8格式来存放字符的,null值使用两个字节来表示,因此只剩下 65536- 2 = 65534个字节。也正是变体UTF-8的原因,如果字符串中含有中文等非ASCII字符,那么双引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错。

Java数组


3)一维数组


1、一维数组的定义


type arrayName[];


其中类型(type)可以为Java中任意的数据类型,包括简单类型组合类型,数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量。例如:


int intArray[];


声明了一个整型数组,数组中的每个元素为整型数据。与C、C++不同,Java在数组的定义中并不为数组元素分配内存,因此[]中不用指出数组中元素个数,即数组长度,而且对于如上定义的一个数组是不能访问它的任何元素的。我们必须为它分配内存空间,这时要用到运算符new,其格式如下:


arrayName=new type[arraySize];


其中,arraySize指明数组的长度。如:


IntArray=new int[3];


为一个整型数组分配3个int型整数所占据的内存空间。


通常,这两部分可以合在一起,格式如下:


type arrayName=new type[arraySize];


例如:


int intArray = new int[3];


2、一维数组元素的引用


定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。数组元素的引用方式为:


arrayName[index]


其中:index为数组下标,它可以为整型常数或表达式。如a[3],b[i](i为整型),c[6*I]等。下标 从0开始,一直到数组的长度减1。对于上面例子中的in-tArray数来说,它有3个元素,分别为:


intArray[0],intArray[1],intArray[2]。注意:没有intArray[3]。


另外,与C、C++中不同,Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。


3、一维数组的初始化


对数组元素可以按照上述的例子进行赋值。也可以在定义数组的同时进行初始化。


例如:


int a[]={1,2,3,4,5};


用逗号(,)分隔数组的各个元素,系统自动为数组分配一定空间。


与C中不同,这时Java不要求数组为静态(static)。


二、二维数组


1、二维数组的定义:


type arrayName[][];


例如:


int intArray[][];


与一维数组一样,这时对数组元素也没有分配内存空间,同要使用运算符new来分配内存,然后才可以访问每个元素。


对高维数组来说,分配内存空间有下面几种方法:


1)直接为每一维分配空间,如:


int a[][]=new int[2][3];


2)从最高维开始,分别为每一维分配空间,如:


int a[][]=new int[2][];

a[0]=new int[3];

a[1]=new int[3];


完成1中相同的功能。这一点与C、C++是不同的,在C、C++中必须一次指明每一维的长度。


2、二维数组元素的引用


对二维数组中每个元素,引用方式为:arrayName[index1][index2] 其中index1、index2为下标,可为整型常数或表达式,如a[2][3]等,同样,每一维的下标都从0开始。


3、二维数组的初始化


有两种方式:


1、直接对每个元素进行赋值。


2、在定义数组的同时进行初始化。


如:int a[][]={{2,3},{1,5},{3,4}};


定义了一个3×2的数组,并对每个元素赋值。

知识:

I/O操作 I /O流 Java文件操作

数据库数据库基本操作 JDBC

多线程 网络编程(Socket TCP/IP)

Java集合类 Collection接口 List Set Map的用法


附件:

1.Java命名规则

命名是尽量按以下约定,以显的你更加专业


1.使用完整描述符来准确地描述变量、字段或类。


例如,使用的名称可以是 FirstName、GrandTotal 或 Corporate Customer。虽然像 x1、y1 或 fn 这样的名称较短轻易输入,但是它们并不提供任何信息指出它们所代表的内容。这样对代码的理解、维护和增强会造成一定困难。


2.使用适用于领域内的术语。


假如您的用户将他们的客户称为顾客,则对这个类使用术语Customer来代替Client。许多开发人员曾经犯了这样一个错误:当业界或领域中已存在更贴切的术语时,他们还冥思苦想,预备为一些概念创建通用术语。


3.巧妙节俭地使用缩写。


这表示您应该维护一份标准短格式(缩写)的列表,应该明智地选择它们,并在使用时保持一贯性。例如,假如要使用字 arithmetic 的短格式, 选择 ar、ari 或 art 中的一个,记录下所选的缩写(到底是哪个并不重要),并只使用这一个。


4.使用大小写混合增强名称的可读性。


通常应该使用小写字母,但是将类名和接口名称的第一个字母写成大写,将所有非起始单词的第一个字母也写成大写。


5.将标准首字母缩写词的第一个字母大写。


名称会经常包含标准缩写,如 SQL 表示“Standard Query Language”。诸如表示属性的