JAVA完全参考手册(第8版) 第1章至第5章

写在前面:这部分偏基础知识,部分知识点不是很清晰,list一下。

1、java编译器的输出不是可执行代码,而是字节码。字节码是高度优化的指令集合,由JVM(被设计为字节码解释器)执行。

    原因:易于在可变环境中执行,只需对每种平台实现JVM就可以了;有助于提供安全性;执行速度方面,虽然编译成中间形式,但是JVM执行程序的速度要更快;提升性能方面,如果JVM包含JIT编译器,则可按需将选择的字节码实时编译为可执行代码,即动态即时编译。

2、byte整型数据什么时候使用呢?当操作来自网络或文件的数据流时,当操作与java的其他内置类型不直接兼容的原始二进制数据时,……

3、java中的char与C/C++的是不同的。在C/C++中是8位,在java中是16位(0~65536)。java使用Unicode表示字符(www.unicode.org)。

4、为了标识long字面值,需要明确告诉编译器字面值是long类型的,如0xffffffffL。 

二进制指定整型字面值,0b或者0B作为前缀,如0b0010。  

在整型字面值中还可以嵌入一个或多个下划线,下划线会被忽略,下划线只能用于分割数字,不能位于字面值的开头和结尾,在两个数字之间可以使用多个下划线,如12__44。

浮点型,标准计数法和科学计数法。浮点型字面值默认是双精度的,指定为float时,必须加F/f,如12.78F。下划线同样可以用。支持十六进制浮点型字面量,使用P或p(不是E/e),如0X12.2P2表示72.5。

5、字符转义序列:常用有,\'、 \"(字符串中插双引号注意)、 \\(路径名时)、 \r(回车符)、 \n(换行符)、 \t(制表符)、 \b(回格符);

不常用,\ddd表示八进制字符ddd,\141表示字母a,(\+三个数字),\uxxxx表示十六进制Unicode字符xxxx,\ua432是一个日本片假名字符。

6、java的自动类型转换:类型兼容且扩宽转换。表达式求值时操作数会进行类型转换提升为最高类型,这点易出错

强制转换不兼容的类型,如int转化byte时,结果以byte类型的范围为模减少(取余),浮点型转化为整型时截尾。

7、数组。int A[] = new int[12];   int AB[][] = new int[4][5];  int [] a,b,c;  int a[], b[], c[];

当为多维数组分配内存时,只需要为第一维分配内存。如int twoD[] = new int[4][]; twoD[0] = new int[5];  twoD[1] = new int[4]; twoD[2] = new int[5];  twoD[3] = new int[4]; 。

8、java为什么不允许使用指针?因为如果支持指针,就会使java程序能够突破java执行环境与宿主计算机之间的防火墙(可以将内存中的任何地址赋给指针,甚至超出了java运行时系统的地址)。

9、位(按位)运算符,用于整数类型——long、int、short、char以及byte。常用的,&、 |、 ^、 >>(右移,最左边的位使用的是右移前顶部的值填充)、 <<(左移,高阶位移出丢失,右补0)、 &=、 |=、 ^=、 >>=、 <<=;不常用的,~(按位一元取反)、 >>>(右移零填充,不管高阶位初始值是什么,一律补0)、 >>>=。

java使用2的补码(取反加一)表示负数。原因是什么?具体可以分析“0交叉问题”。即byte型的0表示为0000 0000,如果简单取反,则1111 1111,创建-0,如果使用2的补码,则为1 0000 0000超出范围,从而得到所期望的行为,即-0和0相等,而-1被编码为1111 1111。

当左移byte或short型数值时,自动类型提升会导致意外结果,此时应当强制类型转化截取缩小范围。如,byte a=64, b; int i; i = a<<2; b = (byte)(a<<2); 结果为,i=256,b为0。

左移相当于乘2,但要注意如果将二进制1移进高阶位(第31或63位时),结果会变为负数。

对-1进行右移,结果仍是-1。对数值右移时有时可能不希望得到符号扩展后的值,此时可与0x0f进行按位与操作进行位屏蔽(byte类型)。

10、赋值链。int x,y,z; x = y = z = 100;

    ?运算符。expression1?expression2:expression3,其中expression2与expression3都需要返回相同或兼容(会进行自动转化,这里需要注意)的类型,并且不能为void。

    运算符的优先级。++/--(后缀);

    ++/--(前缀)、~、!、+/-(一元运算符)、(类型转换);

    *、/、%;

   +、-;

     >>、 >>>、 <<;

   >、 >= 、<、 <=、 instanceof

  ==、!=

  &

  ^

  |

  &&

  ||

  ?:

  =

ps:instanceof(测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。可以用在继承中的子类的实例是否为父类的实现。

11、switch语句。switch(exp) {case value1:  ... break;  case value2: ... break; ... default: ... }

其中,exp为byte、short、int、char或枚举类型,也可以是String类型。case语句中每个值不同,且类型与exp类型兼容。default与break语句可选。如果不是必须,在switch语句中不要使用字符串。switch语句可以嵌套。

在编译switch语句时,java编译器会检查每个case常量,并创建一个“跳转表”,该跳转表用于根据表达式的值选择执行路径,所以相较于if/else语句,运行速度更快。

12、一些做法。  while(++i < --j);   do{...}while(--n>0);  当条件表达式可以处理所有细节本身时,会经常使用没有循环体的短循环。

13、for-each语句。for(int x : collection){...}。可以使用break语句提前终止循环。迭代变量是“只读”的,不能为迭代变量修改值来改变数组集合的内容。

多维数组进行迭代时,int nums[][]...  for(int x[] : nums) { for(int y : x){ ... } }。

当操作由集合框架定义的集合时,for-each语句特别有用。

13、break语句等。内层循环中的break语句只会导致内层循环终止,对外层循环没有影响。(与C/C++中break是终止整个循环,continue是终止本次循环,不同)

break label;可以跳出由标签命名的代码块,此标签代码块必须含有该语句。continue label同。


于2013/04/08




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值