其他数据类型和运算符

来源:互联网 发布:软件体系结构课后答案 编辑:程序博客网 时间:2024/06/05 11:10
1.数组:Java中数组和其他程序设计语言用法相似,但有一个特殊的属性:Java把它们作为对象来实现;
  a.一维数组:其声明形式为:type array-name[]=new type[size];因为数组是作为对象来实现的,故声明数组要两个步骤:首先要声明一个数组引用变量,第二可以向数组变量赋给一个对内存的引用,从而为数组分配内存,所以java中所有数组都是由new来动态分配的;创建数组时可以初始化数组,其形式为:type array-name[]={var1,var2,var3,...varN};,这里java自动分配一个足够大的数组存储指定的初始值,不必要显式的用new运算符了;java中数组的界限是必须遵守的,超出数组范围就产生一个运行错误,在运行时检查数组溢出。
  b.多维数组:多维数组是数组的数组;(1)、二维数组:本质上它就是一个一维数组列表,声明举例:int table[][]=new int[10][20];注意要把每个维数包含在方括号中;(2)、不规则数组:java中可以只为第一维分配内存,而其余的维可以单独分配(手动分配),当手动分配时,不必为每一维分配同等数量的元素,例如航班周一至周五每天飞行10次,而周六、周日每天两次,这种情况可以手动分配了;多数情况下不推荐用不规则数组,但某些情况下使用不规则数组效率非常高。(3)、三维以上:声明形式:type name[][]...[]=new type[size1][size2]...[sizeN];,初始化时可以把每一维的初始值都包含在花括号中来完成;
  c.另一种声明数组的方法:type[] var-name;方括号前面是类型指示符,而不是数组变量名。
  d.数组引用赋值:当把一个数组引用变量赋给另一个时,只需简单的修改一下该变量引用的对象即可,没有生成数组副本,也没有使一个数组的内容复制到另一个数组中,而只是两个数组引用变量都指向了同一个对象,所以通过其中任一变量的改变将使得两者指向的值同时改变。
  e.由于数组是通过对象来实现的,所以每个数组都有一个包含数组元素数量的实例变量length,由于二维数组是数组的数组,故length用法为table.length包含了存储在table中的数组的数量,
table[i].length获取了第i-1个数组的长度,使用length常常可以防止数组溢出的及其带来的运行时的异常,使得特定类型的数组执行起来更简单、更安全。
  f.使用数组时,经常遇到要从头到尾检查每个数组元素的情况,在J2SE 5中提供了增强型for-each循环,它能够以严格的顺序从头到尾迭代对象集合,其基本格式是:for(type itr-var : collection) statement-block,其中type指定类型,itr-var指定将要从集合 中从头到尾,每次接收一个元素的迭代变量名,collection指定要循环迭代的集合名,而且type必须与保存在集合中的元素相同或者兼容;最有用的一种for-each循环就是迭代由Collections Framework定义的集合的内容,Collections Framework是一组实现各种数据结构,如列表、向量、集和映射的类(超出了讨论范围);for-each循环也可以使用break提前终止循环,通过其中的itr-var来控制;另外,for-each中的迭代变量对内部数组是只读的,赋值给迭代变量对于内部数组无效;增强型for循环也可以用于多维数组,例如二维:for(int x[] : nums){ for(int y : x){ } }。
2.字符串:在许多其他程序设计语言中,字符串是一个字符数组,而在java中,字符串是对象;
  a.构造字符串:可以像构造其他类型的对象那样构造一个字符串:即使用new并调用String构造函数,如String str=new String("Hello");,也可以从另一个String创建String,如String str2=new String(str);,另一种简单方法为String str="Java Strings are powerful.";,一旦创建就可以在任何允许使用字符串的地方使用它。
  b.操作字符串常用方法:(1)、boolean equals(String str);(2)、int length();(3)、char charAt(int index);(4)、int compareTo(String str);(5)、int indexOf(String str);(6)、int lastIndexOf(String str);注意equals()方法和==的区别:前者用于比较两个字符串对象的字符序列是否相等,而后者用于两个字符串引用中简单决定两个引用所指的是否是同一对象。
  c.String对象的内容是不能改变的,即一旦创建了String对象,组成字符序列的字符串就是不能改变的;当需要对已有的字符串进行改变时,只要创建一个新的字符串即可,此时无用的String对象会被自动回收;然而String引用变量是可以改变它们引用的对象的,创建对象后,不能改变的只是特定String对象的内容。
  d.Java提供了一个StringBuffer的类,它创建的字符串是可以改变,除了提供charAt()方法外,还提供了setCharAt()方法用于在字符串中设置字符。
3.命令行变元:是在程序运行时,在命令行中直接跟在程序后面的信息。
4.位运算符:&:按位与;| :按位或;^ :按位异或;>> :右移;>>> :无符号右移;<< :左移;~ :补(二进制非)。&可以看作一中将二进制位置0的操作;| 将二进制位置1;^ 的一个有趣的属性是一个值以同一个值异或两次,结果就为原值,可以用来创建简单的密码程序;~ 就是把所有二进制位置成相反的状态;位运算符基本形式为 value<<num-bits,value>>num-bits,value>>>num-bits;;在对byte和short值进行位移时要小心,因为java会自动把这些类型转换为int类型,当负值在转换时就会出现符号位溢出,整数值的高阶位就会被填充,在充零移位时就有问题。
5.“?”运算符:常用来替代if-else语句,基本形式为Exp1 ? Exp2 : Exp3;Exp1是一个boolean类型表达式,Exp2和Exp3是void以外的任何类型的表达式,但两者类型必须一致;不必把“?”生成的值赋给某些变量,可以把该值作为对方法的调用中的一个变量或若表达式都是boolean型的,可以将其作为循环或if语句的条件表达式。