java学习笔记
1 Java起源
2 Java语言概述
1.面向对象编程的3个原则:封装(encapsulation)、继承(inheritance)、多态性(polymorephism)
封装:将代码及其处理的数据捆绑在一起的一种机制;
继承:一个对象获得另一个对象的属性的过程;
多态性:一个接口,多种方法。
2.System.out.println(“dfjdfjdf”);
System.out.print(“dfdfdfdf”);
这两种写法输出基本一样,只是print不换行
3.基本词汇:空白分隔符(whitespace)标识符(identifiers)常量(literal)注释(comments)分隔符(separators)java关键字 java类库
3 数据类型、变量、数组
1.Java语言是强类型语言,java定义了8个简单数据类型:byte short int long char float double Boolean
2.如果一个数据类型占8位那么他的范围为-(2的7次方)到2的7次方-1,一共2的8次方个数字(别忘记0),其中最高为作为符号位,是1就为负值。
其中:(2的8次方-1)等于2的0次方+2的1次方+……+2的7次方
所以IP地址中若地址为00000000则代表可以有256个地址,0次方+2的1次方+……+2的7次方=255,但是别忘记0 !!!
3.标准的ASCII字符集的范围为0~127(共2的7次方个,因为最高位没用),扩展的ASCII字符集范围为0~255(共2的8次方个)
UNICODE字符集占16位,范围为:0~65535(共2的16次方个)
4. System.out.println(“The value is”+ (10>9)); 结果为true,10>9加括号,因为+的优先级大于”>”
System.out.println(“10>9”); 结果为10>9
5.Octal------8进制 ,前面加0表示
Hexadecimal------16进制,前面加0x 或0X表示
6.Java中的浮点字面量默认是双精度的,占64位
1234.333f(orF)---------float
1234.343434d(or D)-------double
所以:float m=20.3将编译出错,应该写为float m=(float)20.3
7.自动类型转换:
满足以下两个条件:这2种类型是兼容的; 目的类型的范围比源类型的范围大
强制类型转换:
2种不兼容类型之间的转换,格式为:(target-type) value,例如:将整形转为字节型,若整形的值超出byte的取值范围,则转化后的值为对256取摸。Byte b; int i=300; b=(byte)i; 则b的值为44。
例如:将323.234强制转为byte的步骤:去掉小数点后的数为323,在执行323%256得到67。
8.自动类型提升,用在表达式中,byte和short自动提升为int型
例如:
byte b=50;
b=b*2;//编译将出错!因为b*2为整形
应该写为
b=(byte)(b*2)//括号的优先级大于*,所以b*2要加括号
又例如:
short mm=(short)0x8000;//此处的(short)也必须写,否则编译出错!!!
9.数组,声明格式:
int array[]=new int[3];
或者
int array[];
array=new int[3];
//初始化
array[0]=1;
array[1]=2;
array[2]=3;
或者
int array[]={1,2,3};//此时自动分配内存,而不用new操作符
注意:[]之内不可写进长度,否则编译出错!!!
另外Java进行数组越界检查,而C/C++没有
多维数组:
int Dshuzu[][]=new int[2][3];
初始化
Dshuzu[0][0]=1;……………
或者 int Dshuzu[][]={
{12,13,14},
{20,21,22}
};//[]之内不可写进长度,否则编译出错!!!
可以先个第一维分配内存,第二维手工分配内存。例如:
int Dshuzu[][]=new int[3][];
Dshuzu[0]=new int[1];
Dshuzu[1]=new int[2];
Dshuzu[2]=new int[3];
第二维的大小不相等,图例:
Dshuzu[0][0]
Dshuzu[1][0] Dshuzu[1][1]
Dshuzu[2][0] Dshuzu[2][1] Dshuzu[2][2]
另外的数组声明方法:
int[] mm = new int[12];
int[][] nn = new int[3][4];
在java中数组是作为对象来使用的。数组有一个实例变量length,存储的是数组能够包含的元素的个数。
例如:
char arr[]=new char [10];//不论字符数组,还是整形数组,元素个数最多为10个,下标从0-9
arr.length;//他的值为10
int arr1[20]={1,3,4,5};
arr1.length//他的值为20
char str[][]=new char[2][3]//此二维数组的length为2。即第一维 的长度
10.Java中方法内部声明的变量必须赋初值,虽然它有自己的默认值。例如:
int i;
system.out.println(i);//编译将出错,提示i没有初始化,解决:int i=0;
但是实例变量不存在这种情况。
4 运算符
四大运算符:算术运算符、位运算、关系运算、逻辑运算
另外还有比较运算符(instanceof)
4. 1算术运算符号
算术运算符不能用在boolean上,但是可以用在char上,因为在Java中char 类型是int 类型的一个子集。
对整数进行“/”运算,余数将被舍去。例如:int i=6/4;结果为1。
%运算符也可以用在浮点数(C/C++中不允许)例如:
42.25%10的结果为2.25
注意递增递减运算 ++m和m++的区别
++m 的值和m保持同步,而m++的值比m小1。例如int m=0;
++m;//则m的值为1,++m表达式的值也为1
m++;//则m的值为1,m++表达式的值为0
有一个例子:
int i=100;int j=200;
while(++i< --j);//空循环体,i大于或等于j则循环结束
system.out.println(“:i is “ + i);//求出i和j的中间值150
算术赋值运算 例如:a+=4;等价于a=a+4;
4.2位运算符(bitwise operators)
直接对整数类型的位进行操作,包括:byte short int long char 。
理解 反码、补码。负数的2进制表示是:将原码做反码后加1。
整型都是有符号的,(除了char),所以用他们的最高位来表示符号位。
注意:对byte和short 移位运算时(不论左移还是右移),byte和short 都先被自动提升到int型。再执行移位运算。如果byte和short为负数的时候,也就是说符号位也要扩展,高位全部用1填充,随后再做移位!
例如:
byte b=01000000;
int i;
i=b<<2;
//结果为256,2进制为00000000 00000000 00000001 00000000
b=(byte)(b<<2);//结果为0,byte只有8位,高位被截断
例如: byte b=11111111;//十进制为-1
b=(byte)(b<<2);
//变为11111111 11111111 11111111 11111100,10进制为-4
b=(byte)(b>>2);
//变为11111111 11111111 11111111 11111111,10进制为-1
b=(byte)(b>>>2);
//变为00111111 11111111 11111111 11111111,b还是-1,因为b先被扩展为int型
注意:左移(<<)时,如果将1移进高位(31或63)那么值就变为负的。
高位移出,低位补0
右移运算(>>):低位移出,高位填充原来高位的值。
无符号右移(>>>):低位移出,高位用0填充。
注意:因为short 和byte 总被扩展到32位,所以符号位扩展和移动总是发生在32和64位。
掌握位赋值运算符,例如:a=a>>4;等价于 a>>=4;
a^=b; 等价于a=a^b;
4.3关系运算符
== > < <= >= !=
关系运算的结果为boolean,只有true和false,不像C/C++中,非0为true,0为false。
boolean flag= a
4.4布尔逻辑运算符
布尔逻辑运算的运算数只能是布尔型,结果也为boolean型
注意:
标准的逻辑与(&)和逻辑或(|)不论第一个表达式为true or false,都计算第二个表达式。例如:
if (c==0 | e++ < 100) d=12;//不论c是否等于0,e都被自增量。
短路AND(&&)和短路OR(||):
A&&B,当A为false时,不去计算B的值而直接返回false;当A为true时,计算B的值。
A||B,当A为true时,不去计算B的值而直接返回true; 当A为false时,计算B的值。
4.5赋值运算符(=)
int x,y,z;
x=y=z=100;//允许对一连串的变量赋值
4.6 ?运算符
三元运算符(ternary),经常用于取代if- else语句。格式:
expression1?expression2:expression3
//expression1是一个布尔表达式, expression2和expression3是除了void类型以外的任何类型的表达式,并且它们的类型必须相同。
例如:
rado=denom==0?0:num/denom;
//如果denom等于0则?表达式的值为0,否则为num/denom。最后将?表达式的值赋给rado
4.7运算符的优先级
掌握运算符的优先级。适当的运用()可以提高程序的可读性,澄清含义,而不至于降低程序的运行速度。