数据类型:java对于每一种数据定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
oolean数据类型后面的取值只能有两种:ture和 false
数据类型用long时,取值后面常常加个“l”
数据类型演示:
byte b = 2
short s = 30000
long l = 4l
float f = 2.3f
double d = 3.14
char ch = ‘a’ char ch1 = ‘4’ char ch2 = ‘+’ char ch3 = ‘ ’
boolean b0 = ture Boolean b2 = false
什么时候定义变量:当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作。
如:int a = 4;
a = a + 6;
类型转换:不同数据类型发生转换时会有自动提升的过程,表现为小的向大的提升
例:执行语句System.out. println(‘a’+1);的结果是对少?
运算过程为将字符a通过编码表提升到int数据类型得到对应的int数值再与1想加后得到输出结果,即98。
如果需要将98转换为字符类型即b,操作就是System.out.println((char)(‘a’+1)),同理c就是System.out.println((char)(‘a’+2))。
注意字符与数字之间的+号是运算,而字符串与任何数据之间用+号都是想连接,最后都会变成字符串!
运算符:
算术运算符;赋值运算符;比较运算符;逻辑运算符;位运算符;三元运算符
算术运算符包括 +(正号); - (负号); *(乘) ; /(除); +(加); -(减);
%(取模); ++(自增(前)); --(自减(后)); +(字符串相加)
例:int x = 4270;
x = x / 1000 * 1000
结果是4000,注意数据类型!
取模规则:右边是1结果是0 ; 左边如果小于右边结果是左边;如果出现负数则结果是左边。
例:int a = 3,b;
b = a++
则结果是b=3,a=4
注意:++叫做给a这个变量中的值进行一次加1操作,并把加1后的值赋给a;b = a++的运算过程是把a的值赋给b,然后a自增;b = ++a的运算过程是a先自增再将自增后的值赋给b,即a = 4 ,b = 4。
例:只用字符5打印5+5=55 和5+5=10
答案是System.out.println(“5+5=”+5+5) 和 System.out.println(“5+5=”+(5+5))
转义字符:通过\来转变后面字母或符号的含义,注意其中的字母或符号是指定的
\n:换行
\b:退格,相当于backspace
\r:按下回车键。Windows系统。回车符由两个字符来表示\n\r
\t:制表符,相当于tab
例:System.out.println(“hello \nworld”);----àhello
world
System.out.println(“\”hello world\””);----à”hello world”
System.out.println(“\\hello world\\”);-----à\hello world\
char ch = ‘\n’--------------------------------à回车键
char ch = ‘\’’--------------------------------à’
赋值运算符包含 = += -= *= /= %=
+=:把左右两边的和赋给左边
以此类推
这些都是一个符号哦
例:a = a + 5 与 a+=5 的区别
a = a + 5 是两次运算,右边先做完加法运算后再将值赋给左边,可能会有个自动类型提升的过程,a+=5只是一次赋值运算,如
short a = 4;
a = a + 5;
会编译失败,而
short a = 4;
a+=5;
则编译通过。
比较运算符包含 > = < >= <= == !=
“==”是相等于;“!=”是不等与
比较运算符的结果只有两种:ture 或者 false
逻辑运算符包含 &; | ; ^ ; ! ; && ||
意义:连接布尔类型的表达式,如数学表达式3<x<6在java里面的表达式为x>3&x<6;
& :与,只要布尔表达式结果有一个为false,那么结果就是false,只有两边都是ture就过才是ture
| :或,只要布尔表达式结果有一个为ture,那么结果为ture,只有两边结果都有false,结果为false
^ :异或,两边相同结果是false,两边不同结果是ture
! :非,
&& :and短路,左边布尔表达式为false时,右边不运算,只有左边结果为ture是才读右边
|| :or短路,当左边为ture是,右边不运算,结果肯定为ture。
位运算符包含 << >> >>> & | ^ ~
<< :左移。移动的时候空缺补0,其实就是乘以2的移动的位数次幂。
>> :右移。移动的时候空位由原有数据的最高位而定,如果最高位是0,右移后用0补,如果最高为是1,右移后用1补,就是除以2的移动的位数次幂。
>>>:无符号右移。右移的时候无论最高位是什么都用0补。
&:与
| :或
^ :异或
~ : 反码
细节:一个数异或同一个数两次,结果还是那个数。
练习:
最有效的方式算出2*8等于几?
System.out.println(2<<3),即将2左移三位
将两个整数变量的值进行互换
法1:通过第三方变量
int n = 3, m = 4,z;
z = m;
m = n;
n = z;
System.out.println(“m=”+m +”,n=”+n);
法2:(有局限性,如果m、n的值非常大,容易超出int范围)
int n = 3,m = 4;
n = n + m;
m = n – m;
n = n – m
System.out.println(“m=”+m+”,n=”+n);
法3:异或法
int n = 3,m = 4;
n = n ^ m;
m = n ^ m;
n = n ^ m;
System.out.println(“m=”+m+”,n=”+n);
例:打印60的十六进制表现形式
思路:
解法:
int num = 60;
//获取60的最低四位,通过&15,即60&1111(15的二进制)
int n1 = num & 15
System.out.println((char)(n1–10+‘A’));
//获取下一组四位,将60右移四位
int n2 = num>>>4;//用>>>是要将原有的数据移光
//对n2的值进行最低四位获取
int n3 = n2 & 15;
System.out.println(n2) ;
三元运算符:三个元素参与的运算
特点:一定有结果
格式 (条件表达式)?表达式1:表达式2;
如果条件为ture,运算后结果是表达式1;如果条件为false运算后的结果就是表达式2。
如:int x = 1;y;
y = (x<3)?100:2000;
System.out.println(y);
程序流程控制(语法结构,语句):
判断结构、选择结构、循环结构
判断结构 :
第一种:if语句
三种格式:
1.if (条件表达式)
{
执行语句;
}
2.if (条件表达式)
{
执行语句;
}
else
{
执行语句;
}
3.if (条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
……
else
{
执行语句;
}
注意:if else 结构简写格式:变量 = (条件表达式)?(表达式1):(表达式2);
三元运算符好处在于简化if else 代码,但是也有弊端,因其本身是一个运算符,所以运算必须要有一个结果。
1.如:int x=3;
if (x<3)
{
System.out,println(“hello world”)
}
2.int x =1;
if (x>3)
{
System.out.println(“hello world”);
}
else
{
System.out.println(“hello world”);
}
需求1:根据用户数值的不同,打印相应的星期英文。
int x = 2
if (x == 1)
{
System.out.println(“Monday”)
}
else if (x == 2)
{
System.out.println(“Tuesday”);
}
…
else
{
System.out.println(“nono”);
}
需求2:根据用户指定月份,打印该月份所属季节。
法1:
int x = 4
if (x==3 || x==4 || x==5)
{
System.out.println(x+“春季”);
}
else if (x==6 || x== 7 || x==8)
{
System.out.println(x+“夏季”);
}
else if (x==9 || x==10 || x==11)
{
System.out.println(x+“秋季”);
}
else if (x==12 || x==1 ||x==2)
{
System.out.println(x+“冬季”);
}
else
{
System.out.println(x+“月份不存在”);
}
法2:
int x = 4;
if (x<1 || x>12)
{
System.out.println(x+“月份不存在”);
}
else if (x>=3 && x<=5)
{
System.out.println(x+“春季”);
}
else if (x>=6 && x<=8)
{
System.out.println(x+“夏季”);
}
else if (x>=9 && x<=11)
{
System.out.println(x+“秋季”);
}
else
{
System.out.println(x+“冬季”);
}
法3:
int x = 4
switch (x)
{
case 3:
case 4:
case 5:
System.out.println(x+“春季”);
break;
case 6:
case 7:
case 8:
System.out.println(x+“夏季”);
break;
case 9:
case 10:
case 11:
System.out.println(x+“秋季”);
break;
case12:
case1:
case2:
System.out.println(x+“冬季”);
break;
default :
System.out.println(x+“月份不存在”);
}
选择结构:语句格式
switch(表达式)
{
case 取值1 :
执行语句;
break;
case 取值 2:
break;
…
default:
执行语句;
break;
}
注意:被选择的表达式的值只能有4种:
byte short int char
例如:if 表达转换为switch
int x = 4;
if (x==4)
System.out.println("hello java");
else if (x==1)
System.out.println("Hello World!");
else
System.out.println("hello man");
解法:
class Switch
{
public static void main(String[] args)
{
int x = 4;
switch (x)
{
case 4:
System.out.println("hello java");
break;
case 1:
System.out.println("Hello World!");
break;
default :
System.out.println("hello man");
}
}
int a =4,b = 2;
char ch = '+';
switch (ch)
{
case '+':
System.out.println(a+b);
break;
case '-':
System.out.println(a-b);
break;
case '*':
System.out.println(a*b);
break;
case '/':
System.out.println(a/b);
}
break;
default :
System.out.println("非法")
注意:
if 和switch 语句很像;
具体什么场景下应用那个语句呢?
如果判断的具体数值不多,而且符合byte、short、int、char 这四种类型。
虽然两个语句都可以使用,建议使用switch语句,因为效率高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的适用范围更广。