Java中的常量
(Lesson02A.rmvb)
●字符常量
‘\r’表示接受键盘输入,相当于按下了回车键;
‘\n’是换行;
‘\t’是制表符,相当于table键;
‘\b’是退格键,相当于BackSpace;
‘\’’是单引号
‘\”’是双引号;
‘\\’是一个斜杠
变量的概念与作用
● 变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存储的数据类型的不同,有各种不同类型的变量。变量名代表这块内存中的数据。
● int x=0,y;
y=x+3;
x在被取值前必须被初始化。
Java的变量类型
变量的字节大小
byte占用1个字节
Boolean占用1个字节
short占用2个字节
char占用2个字节
int占用4个字节
float占用4个字节
long占用8个字节
double占用8个字节
类型转化
● 自动类型转换(也叫隐式类型转换)
● 强制类型转换(也叫显式类型转换)
● 类型转换的原理,及什么时候要用强制类型转换
● 表达式的数据类型自动提升
◆ 所有byte型、short型和char的值将被提升到int型
◆ 如果一个操作数是long型,计算结果就是long型;
◆ 如果一个操作数是float型,计算结果就是float型;
◆ 如果一个操作数是double型,计算结果就是double型;
算术运算符的应用技巧
● 思考题1:某个培训中心要为新到的学员安排房间,假设共有X个学员,每个房间可以住6个,让你用一个公式计算他们要住的房间数?
答案:(x+5)/6。这种算法还可用在查看留言板的分布显示上:其中x是总共的留言数,6是每页显示的留言数,结果是总共有多少页。
● 思考题2:假设你要让x 的值在0至9之间循环变化,请写出相应的程序代码。
class A
{
public static void main(String[]args)
{
int i=0;
while(true)
{
i=(i+1)%10;
System.out.println(i);
}
}
}
逻辑运算符
运算符 运算
& AND(与)
|
范例
False & True
|
结果
False
|
| OR(或)
^ XOR(异或)
|
False | true
False ^ true
|
True
True
|
! NOT(非)
&& AND(短路)
|
!TRUE
False && True
|
False
False
|
|| OR(短路)
|
False !! True
|
True
|
注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。
注2:”&”和”&&”的区别在于,如果使用前者连接,那么无论任何情况,”&”两边的表达式都会参与计算。如果使用后者连接,当”&&”的左边为false,则将不会计算其右边的表达式。”|”和”||”的区别与”&”和”&&”的区别一样。
位运算符
● 任何信息在计算机中都是以二进制的形式保存的,&|^除了可以作为逻辑运算符,也可以做为位运算符它们对两个操作数中的每一个二进制位都进行运算。
◆ 只有参加运算的两位都为1,&运算的结果才为1,否则就为0。
◆ 只有参加运算的两位都为0,|运算的结果才为0,否则就为1。
◆ 只有参加运算的两位不同,^运算的结果才为1,否则就为0。
● 我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:
◆ <<左移
◆ >>右移
◆ >>>无符号右移
移位运算的注意事项及小技巧
● 移位运算符适用数据类型有byte、short、char、int、long。
● 对低于int型的操作数将先自动转换为int型再移位。
● 对int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32结果还是a原来的数字。
● 对于long型整数移位时a>>b,则是先将移位位数b对64取模。
● 移位不会改变量本身的值。A>>1;在行语句中单独存在,毫无意义。
● x>>1的结果和x/2的结果是一样的,x<<2和X*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y=1<<x;
(Lesson02B.rmvb)
程序的流程控制
● 顺序结构
● 选择结构
● 循环结构
if语句的选择结构
● if(表达式)语句
● if(表达式)语句1;else语句2;
● if(表达式1)语句1;
else if(表达式2)语句2;
else if(表达式3)语句3;
……
else语句n;
● 每个语句可以是使用{}组成的复合语句
● 变量=布尔表达式?语句1:语句2;
● if语句还可以嵌套使用
if(表达式1)
if(表达式2)语句1;
else语句2;
else
if(表达式3)语句3;
else语句4;
嵌套时使用{}确定层次界限,举例说明
switch语句的选择结构
Switch(表达式)
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
……
case 常量表达式n:语句n;
default:语句n;
}
● default语句是可选的,它接受除上面接受值有其他值,通俗的讲,就是谁是也不要的都归它。
● case后面可以跟多个语句,这些语句可以不用在括号括起来。
● switch语句判断条件可以接受int,byte,char,short型,不可以接受其他类型。
● 一旦碰到第一次case匹配,就会开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,后面case条件下的代码都会被执行,直到碰到break语句为止。我们可以利用这个特点来用同一段语句处理多个case条件。
While循环语句
While(表达式)
语句;
int x=1;
while(x<3)
{
System.out.println(“x=”+x);
X++;
}
脚下留心:while表达式的括号后面一定不要加“;”
do-while循环语句
do 语句
while(表达式);
do..while 循环则先执行,再判断是否要继续执行,也就是说循环至少执行一次,有点像是先斩后奏的方法。只有条件计算结果为 true
时语句才会执行。
public class TestDO
{
public static void main(String[]args)
{
int x=3;
while(x==0)
{
System.out.println("ok1");
x++;
}
int y=0;
do
{
System.out.println("ok2");
y++;
}
while(y==0);
}
}
编写一个程序,这个程序不断地读取从键盘上输入的字符,直到讲到字符’q’时,程序结束。提示:调用System.in.read();可以读取到一个从键盘上输入的字符对应的整数。通过这个程序,你一定体会到在什么样的情况下,用do-while循环语句经while循环语句方便。
public class TestWhile
{
public TestWhile()
{
}
public static void main(String[] args)
{
// TODO code application logic here
int ch=0;
/* try
{
ch=System.in.read();
while(ch!='q')
{
System.out.println((char)ch);
try
{
ch=System.in.read();
}catch(Exception e){}
}
}
catch(Exception e)
{
e.printStackTrace();
//e.getMessage();
}
*/
do
{
try
{
ch=System.in.read();
}
catch(Exception e)
{
e.printStackTrace();
//e.getMessage();
}
System.out.println((char)ch);
//System.out.println(ch);
}
while(ch!='q');
}
}
for循环语句
for(表达式1, 表达式2, 表达式3) 语句
break与continue语句
break语句可以中止循环中的子语和switch语句。一个无标号的break语句会把控制传给当前(最内)循环(while,do,for或switch)的下一条语句。如果有标号,控制会被传递给当前方法中的带有这一标号的语句。
St:while(true)
{
while(true)
{
break st;
}
}
continue语句在能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句块,接着执行下一次循环。用continue语句的打印出0到10之间的所有奇数的程序例子。
public class TestContinue
{
public TestContinue()
{
}
public static void main(String[] args)
{
// TODO code application logic here
for(int i=0;i<10;i++)
{
if(i%2==0)
continue;
System.out.println(i);
}
}
}
数组
● 静态数组
▂int ia[]={1,2,3,4};
▂int[]ia=new int[]{3,4,5};
▂int a[5];//声明数组时,不能指定其长度,编译时将出错
▂a=null;
● 使用数组时要注意的问题
▂空指针异常
▂如何计算数组长度
▂数组越界异常
多维数组
● java中并没有真正的多维数组,只有数组的数组,Java中多维数组不一定是规则矩阵形式。
● 定义一个多维数组
int [][]xx;
xx=new int [3][];
xx[0]=new int[3];
xx[1]=new int[2];
xx[2]=new int[8];
public class hello
{
public static void main(String[] args)
{
int[][]xx=new int[2][3];
xx[0][0]=2;
xx[1][2]=6;
for(int i=0;i<xx.length;i++)
{
for(int j=0;j<xx[i].length;j++)
{
System.out.println("xx["+i+"]["+j+"]="+xx[i][j]);
}
}
}
}
数组的排序:
class ArrayTest
{
public static void main(String[]args)
{
int []x=new int[]{1,5,2,7,4};
for(int i=0;i<x.length;i++)
{
System.out.println("x["+i+"]="+x[i]);
}
java.util.Arrays.sort(x);
for(int i=0;i<x.length;i++)
{
System.out.println("x["+i+"]="+x[i]);
}
}
}
数组的拷贝:
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
class ArrayTest
{
public static void main(String[]args)
{
int []x=new int[]{1,5,2,7,4};
for(int i=0;i<x.length;i++)
{
System.out.println("x["+i+"]="+x[i]);
}
int[]y=new int[10];
System.arraycopy(x,0,y,1,4);
for(int i=0;i<y.length;i++)
{
System.out.println("y["+i+"]="+y[i]);
}
}
}