昨天有事情竟然没有花时间刻苦,今天就多学了两个多小时,边工作边学习就是不容易啊。
之前学过C语言和C++,据说java在其基础上有发展,有很多优势,现在还没有什么深刻体会,现学习过程中主要关注这些区别。先做部分笔记如下:
1、Java的基本语法
2、Java中数据的各种属性,如变量和数据的标识符,常量的类型、变量类型和及其作用域与生存周期等
1):java程序有三种注释方式:
“//注释单行/”;
*注释。。。*/”;
“/**注释。。。*/”专业注释;
2):与C(C++)不同,java中的标识符,可以美元符号($)组成,但标识符不能以数字开头, java 无sizeof ,goto, const 关键字,但不能用goto const作为变量名
3):‘/r‘表示接受键盘输入,相当于按下了回车键; ‘/t‘是制表符,相当于table键;
‘/b‘是退格键,相当于Back Space;‘/‘‘是单引号,而‘/“‘是双引号;
4)3:变量字节大小及有效取值范围:
n byte占用一个字节,数字大小为-27—27-1
n short占用两个字节,数字大小为-215—215-1
n int占用四个字节,数字大小为-231—231-1
n long占用八个字节,数字大小为-263—263-1
n float占用四个字节,数字大小为1.4E-45~3.4E+38 , -1.4E-45~-3.4E+38 。用二进制的指数形式表示一个浮点数的格式,如:101*22 , 101*2-3
n double占用八个字节,数字大小为4.9E-324~1.7E+308, -4.9E-324~-1.7E+308 。
n char占两个字节,数字大小为0—216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。
n Boolean占一个字节,其取值只有两个,true和false。
5):浮点数在内存中的表示方式
在JDK文档中查找Float. intBitsToFloat的说明
打印出最大数和最小数及它们的二进制格式
打印出无穷大与NaN及它们的二进制格式
分析0x50000000所对应的浮点数
6):类型转化 自动类型转换(也叫隐式类型转换)强制类型转换(也叫显式类型转换)
System.out.println(‘a’+1)与 System.out.println(“”+’a’+1) 的区别:后者为 a1;前者是a的数值加1;
7):变量的生命周期与作用域:变量要先定义,后使用,变量只能在定义它的复合语句中使用。Java中不允许有变量的嵌套定义;
8、函数:函数的调用
n 函数调用的格式
n 在函数中使用return提前返回
n 如何理解函数返回值类型为void的情况
n 函数调用的过程分析
n 函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可
9、java中的运算符
运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成 。运算符有:算术运算符、赋值运算符、比较运算符、逻辑运算符、移位运算符
9.1算术运算符的注意问题
n “+”除字符串相加功能外,还能把非字符串转换成字符串 ,如: “x”+123;是“x123” 。
n 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。
n 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
n 算术运算符的应用技巧
思考题1:某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他们要住的房间数?
答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上: 其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。
n 思考题2:假设你要让x的值在0至9之间循环变化,请写出相应的程序代码。
答案:
int x=0;
while(true)
{
x = (x+1)%10;
}
9.2赋值运算符
注1:在JAVA里可以把赋值语句连在一起,如:x = y = z = 5 ;
注2 :x += 3等效于x = x + 3,等于*= ,-=,/=依此类推
9.3比较运算符
注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=”
9.4逻辑运算符
注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型 。
注2:“&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右边的表达式。
9.5移位运算符
任何信息在计算机中都是以二进制的形式保存的,&,|,^除了可以作为逻辑运算符,也可以做为位算符,它们对两个操作数中的每一个二进制位都进行运算。
– 只有参加运算的两位都为1,&运算的结果才为1,否则就为0。
– 只有参加运算的两位都为0,|运算的结果才为0,否则就为1。
– 只有参加运算的两位不同,^运算的结果才为1,否则就为0。
n 我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:
– << 左移
– >> 右移
– >>> 无符号右移
“>>”和“>>>” 区别的实例分析
public class ShiftTest
{
public static void main(String [] args)
{
int x=0x80000000;
int y=0x80000000;
x=x>>1;
y=y>>>1;
System.out.println(“0x80000000>>1 = ” + Integer.toHexString(x));
System.out.println(“0x80000000>>>1 = ” + Integer.toHexString(y));
}
}
运行结果如下:
0x80000000>>1 = c0000000
0x80000000>>>1 = 40000000
十六进制与二进的对比
0x8000000016 =1000,0000, 0000, 0000, 0000, 0000, 0000, 00002
0xc000000016=1100,0000, 0000, 0000, 0000, 0000, 0000, 00002
0x4000000016 =0100,0000, 0000, 0000, 0000, 0000, 0000, 00002
移位运算的注意事项及小技巧
n 移位运算符适用类型有byte、short、char、int、long
n 对低于int型的操作数将先自动转换为int型再移位。
n 对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字。
n 对于long型整数移位时a>>b ,则是先将移位位数b对64取模。
n 移位不会改变变量本身的值。如a>>1;在一行语句中单独存在,毫无意义 。
n x>>1的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y = 1<< x;
运算符的优先级
我们可以使用括号改变运算赋的优先级,分析int a =2;int b = a + 3*a;语句的执行过程 与int a =2;int b =( a + 3)*a;语句的执行过程的区别 。
如何避免多个运算符带来的问题
n 对于int a =2; int b= a + 3 * a++;这样的语句,b最终等于多少呢?
作者试验得到的结果是8。
n 对于int a =2; int b= (a ++)+ 3 * a;这样的语句,b最终等于多少呢?
作者试验得到的结果是11。
如何避免多个运算符带来的问题
与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。
不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算
在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。
对于优先级顺序,读者不用刻意去记,有个印象就行如果你实在弄不清这些运算先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,
这也是软件编码规范的一个要求。
10程序的流程控制
n 顺序结构
n 选择结构
n 循环结构
顾名思义,顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。
if语句的选择结构
变量 = 布尔表达式?语句1:语句2;
If语句还可以嵌套使用
switch语句判断条件可接受int, byte, char, short型,不可以接受其他类型 一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的代码都会被执行,直到碰到break语句为止。
while循环语句
do-while循环语句
do 语句
while (表达式);
public class TestDo
{
public static void main(String[] args)
{
int x=3;
while(x==0)
{
System.out.println("ok1");
x++;
}
int y=3;
do
{
System.out.println("ok2");
y++;
}
while(y==0);
}
}
do-while循环语句
编写一个程序,这个程序不断地读取从键盘上输入的字符,直到读到字符’q’时,程序结束。
提示:调用System.in.read();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,体会到在什么样的情况下,用do-while循环语句比while循环语句方便
for循环语句
break语句
break语句可以中止循环中的子语句和switch语句。一个无标号的break语句会把控制传给当前(最内)循环(while,do.for或Switch)的下一条语句。如果有标号,控制会被传递给当前方法中的带有这一标号的语句。如:
continue语句
continue语句只能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句块,接着执行下一次循环。 用continue语句的打印出 0到10之间的所有奇数的程序例子。
先做初步总结,明天将对红色部分做详细总结。