------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、数据、数值类型和运算符
1:常量
(1)在程序的运行过程中,其值是不可以发生改变的量。
(2)常量的分类:
1:字面值常量
1:整数常量
12,-23
2:实数常量
12.5,-65.43
3:字符常量
'a','A','0'
4:字符串常量
"hello"
5:布尔常量
true,false
6:空常量
null
2:自定义常量
(3)常量可以直接被输出。
2:进制
(1)是一种进位的方式。X进制,表示逢x进1。
(2)Java中整数常量的表示
1:二进制 由0,1组成。以0b开头。JDK7以后的新特性。
2:八进制 由0-7组成。以0开头。
3:十进制 由0-9组成。默认就是十进制。
4:十六进制 由0-9,A-F(不区分大小写)组成,以0x开头。
(3)进制转换:
1:其他进制到十进制
系数:就是每一位上的数据。
基数:X进制,基数就是X。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
结果:把系数*基数的权次幂相加即可。
二进制:1011
十进制:
八进制:74
十进制:
十六进制:a3
十进制:
2:十进制到其他进制
除基取余,直到商为0,余数由下向上取值。
十进制:60
结果:
二进制
八进制
十六进制
3:快速转换
1:8421码。
2:二进制--八进制(3位组合)
3:二进制--十六进制(4位组合)
3:变量
(1)程序的运行过程中,在指定范围内发生改变的量。
(2)格式:
数据类型 变量名 = 初始化值;
变形格式:
数据类型 变量名;
变量名 = 初始化值;
举例:
方式1: byte b = 10;
方式2: byte b;
b= 10;
4:数据类型
(1)分类
基本类型:4类8种。
引用类型:类(string),接口,数组。
(2)基本类型(白茶尹少,浮字不精)
整型:
byte 1
short2
int 4
long 8
浮点型:
float 4
double 8
字符型:
char 2
布尔型:
boolean不明确。可以认为是1个字节。
注意:
整数默认是int类型。long类型需要加L或者l后缀(注意)。
浮点数默认是double类型。float类型需要加F或者f后缀(注意)。
(3)类型转换
1:boolean类型不参与转换。
2:隐式转换(从小到大)
byte,short,char-- int -- long -- float -- double
3:强制转换(从大到小)
格式:
(数据类型) 数据;
(4)经典题
byteb1 = 3;
byteb2 = 4;
byteb3 = b1 + b2;
byteb4 = 3 + 4;
5:运算符
(1)就是把常量和变量连接的符号,一般参与运算使用。
(2)分类:(自我识记:三罗汉(逻算),关护卫(赋位))
算术运算符
赋值运算符
关系运算符
逻辑运算符
位运算符
三元运算符
(3)算术运算符
+,-,*,/,%,++,--
+:正号,加法,字符串连接符。
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
%:取得余数
左边如果大于右边,结果是余数。
左边如果小于右边,结果是左边。
左边如果等于右边,结果是0。
正负号跟左边一致。
++/--:
++其实相当于把数据+1
单独使用:
在数据的前后,结果一致。
参与操作使用:
如果在数据的后边,数据先操作,在++/--
如果在数据的前边,数据先++/--,在操作。
(4)赋值运算符
=,+=,-=,*=,/=,%=
inta = 10;
把10赋值给int类型的变量a。
a+= 20;
把左边和右边的和赋值给左边。
注意事项:
a= a + 20;
a+= 20;
结果是等价的,理解不是等价的。
因为+=这种运算符,内含了强制类型转换功能。
比如:
shorts = 2;
s+=3;
等价于
s= (short)s+3
(5)关系运算符
==,!=,>,>=,<,<=
特点:关系运算符的结果都是boolean类型。
请千万注意:== 不要写成 =
(6)逻辑运算符
&,|,!,^,&&,||
&:有false则false—0
|:有true则true—1
!:true变false,false变true
^:相同false,不同true
&&:有false则false
||:有true则true
&&和&的区别是:如果左边有false了,右边将不再执行。
||和|的区别是:如果左边有true了,右边将不再执行。
开发中常用:
&&,||,!(s+3);
二、运算符&程序流程控制语句
1:运算符
(1)位运算符(了解)
^: 一个数据对同一个数据^两次,结果还是数据本身。
举例:a ^ b ^ b = a
(2)条件运算符(三目运算)
格式:
条件表达式?表达式1:表达式2
执行流程:
根据条件表达式返回的是true还是false,决定结果是什么。
如果是true,就把表达式1作为结果。
如果是false,就把表达式2作为结果。
举例:
inta = 100;
intb = a > 50 ? 200 : 100;
请问b的值?200
2:经典题
(1)请用最有效率的代码写出2乘以8(位运算是最快的方法,计算机底层支持)
2<<3
(2)请交换两个变量。
inta = 10;
intb = 20;
开发:临时变量
inttemp = a;
a= b;
b= temp;
考试:位^运算符
a= a ^ b;
b= a ^ a;
a= a ^ b;
3:if语句
(1)用于做判断使用的。
常见于对某个范围进行判断,或者几个变量进行判断,还有就是boolean表达式的判断。
(2)格式:
A:第一种格式
if(条件表达式)
{
语句体;
}
执行流程:
如果条件表达式为true,就执行语句体;
否则,什么都不执行。
B:第二种格式
if(条件表达式)
{
语句体1;
}
else
{
语句体2;
}
执行流程:
如果条件表达式为true,就执行语句体1;
否则,就执行语句体2;
特殊:
可以和条件表达式在某些情况下进行替换。
一般是在赋值的情况下可以。
举例:
获取两个数中的最大值。
C:第三种格式
if(条件表达式1)
{
语句体1;
}
elseif(条件表达式2)
{
语句体2;
}
...
else
{
语句体n;
}
执行流程:
如果条件表达式1为true,就执行语句体1;
如果条件表达式2为true,就执行语句体2;
...
否则,就执行语句体n;
D:注意事项
a:什么时候时候哪一种if语句。
第一种格式在判断条件为一种情况下使用。
第二种格式在判断条件为两种情况下使用。
第三种格式在判断条件为多种情况下使用。
b:每一种if语句其实都是一个整体,如果有地方执行了,
其他的就不执行了。
c:如果if或者else里面控制的语句体是一条语句,是可以省略大括号的,
但是,如果是控制多条语句,就必须写上大括号。
建议:永远写上大括号。
d:大括号和分号一般不同时出现。
E:作用域
所有变量的定义只在它所属的大括号内有效。
(3)案例:
A:根据键盘录入的成绩,判断等级。
B:根据键盘录入的月份,输出该月份所对应的季节。
4:switch语句(掌握)
(1)用于做选择使用的。一般用于几个常量的判断。
switch会把几个常量值直接加载到内存,在判断的时候,效率要比if高。
所以,针对几个常量的判断,一般选择switch语句。
(2)switch语句的格式:
switch(表达式)
{
case值1:
语句体1;
break;
case值2:
语句体2;
break;
case值3:
语句体3;
break;
...
default:
语句体n;
break;
}
注:swhich(表达式)在JDK1.5中表达式可为枚举,在JDK1.7中表达式可为字符串(String)
A:针对格式的解释
switch:表示这里使用的是switch语句,后面跟的是选项。
表达式:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case:表示这里就是选项的值,它后面的值将来和表达式的值进行匹配。
case后面的值是不能够重复的。
break:
switch语句执行到这里,就结束了。
default:
当所有的case和表达式都不匹配的时候,就走default的内容。
它相当于if语句的else。一般不建议省略。
B:执行流程
进入switch语句后,就会根据表达式的值去找对应的case值。
如果最终没有找到,那么,就执行default的内容。
C:注意事项:
a:default整体可以省略吗?
可以,但是不建议。
b:default的位置可以放到前面吗?
可以,但是不建议。
c:break可以省略吗?
可以,但是不建议。
default在最后,break是可以省略的。
case后面的break可以省略,但是结果可能有问题。
d:switch语句什么时候结束呢?
就是遇到break或者执行到程序的末尾。
5:Scanner的使用
(1)Scanner是JDK5以后设计的用来接收键盘录入数据使用的。
(2)目前我们要通过键盘录入int类型数据,必须按照如下步骤:
A:导包
importjava.util.Scanner;
B:创建对象,封装键盘录入
Scannersc = new Scanner(System.in);
C:调用方法,获取数据
intnumber = sc.nextInt();
三、循环结构
1:循环
(1)如果我们发现有很多重复的内容的时候,就该考虑使用循环改进代码。
让我们代码看起来简洁了。
(2)循环的组成
A:循环体,就是要做的事情。
B:初始化条件。一般定义的是一个初始变量
C:判断条件。用于控制循环的结束。
D:控制条件。用于控制变量的变化。一般都是一个++/--操作。
(3)循环的分类:
A:for
for(初始化条件;判断条件;控制条件)
{
循环体;
}
执行流程:
a:先执行初始化条件;
b:执行判断条件
c:根据判断条件的返回值:
true:执行循环体。
false:就结束循环。
d:最后执行控制条件。返回到b继续。
B:while
初始化条件;
while(判断条件)
{
循环体;
控制条件;
}
执行流程:
a:先执行初始化条件;
b:执行判断条件
c:根据判断条件的返回值:
true:执行循环体。
false:就结束循环。
d:最后执行控制条件。返回到b继续。
C:do...while
初始化条件;
do{
循环体;
控制条件;
}while(判断条件);
执行流程:
a:先执行初始化条件;
b:执行循环体和控制条件;
c:执行判断条件
d:根据返回值
true:返回b。
false:就结束循环。
注意:
a:一般使用for循环或者while循环。而且这两种循环是可以等价转换的。
b:do...while循环至少执行一次循环体。
(4)案例:
A:请在控制台输出5次"我爱Java"
class WhileDemo
{
publicstatic void main(String[] args)
{
//需求:把一句话打印5次:我爱Java
for(intx=0; x<5; x++)
{
System.out.println("我爱Java");
}
//System.out.println(x);
System.out.println("************");
//用while改进
inty = 0;
while(y<5)
{
System.out.println("我爱Java");
y++;
}
System.out.println(y);
}
}
B:求1-10的和,改进位求1-100的和。
/*
请用while求1-100之和。
*/
class WhileTest
{
publicstatic void main(String[] args)
{
//先用for
intsum = 0;
for(intx=1; x<=100; x++)
{
//sum= sum + x;
sum+= x;
}
System.out.println("1-100之和:"+sum);
System.out.println("***************");
//用while
intresult = 0;
inty = 1;
while(y<=100)
{
result+=y;
y++;
}
System.out.println("1-100之和是:"+result);
}
}
C:统计叠多少次,能叠成珠穆朗玛峰的高度。
/*
需求:我国最高山峰是珠穆朗玛峰,8848米。现在我有一张足够大的纸,它的厚度是0.01米。
请问,我折叠多少次,可以折成珠穆朗玛峰的高度。(思考题)
思路:
A:知道初始化条件是厚度0.01米,也就是1cm。
最终条件是8848m,也就是884800cm。
循环体的内容是厚度每次变为以前的2倍。
判断条件是厚度有没有超过最大值。
B:定义一个统计变量,用于记录次数。
每当判断条件成立,我就++。
统计变量的初始化值是0。
C:因为我不知道多少次,所以用while循环。
*/
class WhileTest2
{
publicstatic void main(String[] args)
{
//定义统计变量
intcount = 0;
//定义初始化条件
intstart = 1;
//定义最终条件
intend = 884800;
while(start<=end)
{
//统计一次
count++;
//厚度变化
start*=2;
}
System.out.println("我需要折叠次数是:"+count);
}
}
(5)循环嵌套:
A:也就是循环语句的循环体是一个循环语句。
B:通过输出
****
****
****
for(int x=0; x<6; x++)
{
for(inty=0; y<5; y++)
{
System.out.print("-");
}
System.out.println();
}
我们不断的改进。发现了一个问题:
外循环控制行数,内循环控制列数。
(6)案例:
A:正三角形
内循环的判断条件:y<=x
for(intx=0; x<5; x++)
{
for(inty=0; y<=x; y++)
{
System.out.print("*");
}
System.out.println();
}
B:倒三角形
内循环的初始化条件:y=x
for(intx=0; x<5; x++)
{
for(inty=x; y<5; y++)
{
System.out.print("*");
}
System.out.println();
}
2:break和continue(重点)
(1)有些时候,我们需要对循环进行一些控制终止,这个时候,就出现了两个关键字:
break和continue
(2)特点:
A:它们都必须在循环中(break还可以在switch中。)。
一般在循环的判断中。
B:如果单独使用break和continue,后面是不能有语句的。
(3)区别:
A:break结束当前循环。
B:continue结束本次循环,进入下一次循环。
(4)如何退出嵌套循环:
用带标签的循环。
格式:
标签名:for(){
for(){
if()
{
break标签名;
}
}
}
3:应用场景
(1)变量:发现有一个数据是变化的时候,就要用变量。
(2)if语句:如果是一个范围的判断,boolean类型的表达式的判断,几个数据的判断。
(3)switch语句:几个数据的判断。一般这种情况,有限选择switch。
(4)for语句:如果次数或者范围特别明确。(水仙花)
(5)while语句:如果次数或者范围不明确。(珠穆朗玛峰)
/*
需求:
九九乘法表:
1*1=1
1*2=22*2=4
1*3=32*3=6 3*3=9
1*4=42*4=8 3*4=12 4*4=16
...
1*9=92*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
转义字符:
\n 换行
\r 回车
\t tab键位置
*/
class ForForTest
{
publicstatic void main(String[] args)
{
for(intx=1; x<=9; x++)
{
for(inty=1; y<=x; y++)
{
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}
/*
打印出所有的"水仙花数"。
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
思路:
A:"水仙花数"是指一个三位数,告诉我们范围了。100-999
B:153=1的三次方+5的三次方+3的三次方通过这个例子
一个数据的个位立方+十位立方+百位立方=该数据
C:如何获取个位,十位,百位的数据?
对于任意的数据x。获取个位怎么办呢?
153:
个:153%10 = 3
十:153/10%10 = 5
百:153/10/10%10 = 1
千:x/10/10/10%10 -- .........
*/
class FlowerDemo
{
publicstatic void main(String[] args)
{
for(intx=100; x<1000; x++)
{
//x就是任意数据
intge = x%10;
intshi = x/10%10;
intbai = x/10/10%10;
if((ge*ge*ge+shi*shi*shi+bai*bai*bai)==x)
{
System.out.println(x);
}
}
}
}