3.偏头痛杨的Java入门教学系列之表达式&运算符&关键字&标识符&表达式篇

复习
1.Java有多少种数据类型,数据类型的分类?
2.Java的工作机制?
3.自定类型转换与强制类型转换的规则?
4.什么是变量,如何定义变量?
5.整型从小到大排序并且说出大小?
6.数据类型的默认值?
7.整型与浮点型的默认数据类型是什么?
8.基本数据类型的包装类型分别是什么?
9.如何定义一个常量? 
10.JDK&JRE&JVM分别是什么以及他们的关系?

前文链接
1.偏头痛杨的Java入门教学系列之认识Java篇
http://blog.csdn.net/piantoutongyang/article/details/70138697
2.偏头痛杨的Java入门教学系列之变量&数据类型篇
http://blog.csdn.net/piantoutongyang/article/details/70193622


前戏
Java中包含了许多的运算符、标识符、关键字、表达式等知识点,
正是由于这些基础的知识点才有可能允许让我们编写出“绚烂”的程序。


运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较。
用于操作一个或多个参数以得出结果。

算术运算符
符号
含义
备注
+
加法
a+b
-
减法
a-b
*
乘法
a*b
/
除法
a/b
两个整数相除,只保留整数部分。
有小数参与,则保留小数。
0除以任何数都等于0,任何数除以0会造成不同的错误
(整数会报异常,浮点数会出正无穷和负无穷)。
%
取余
a%b
取余数,例如6%4=2
++
自增
操作数的值增加1
++放在变量前或后是有区别的
++变量名:变量在参与其他操作前先将自己加1
变量名++:先用原来的值参与其他操作后,再将自己加1
--
自减
操作数的值减少1,其余同上
+
字符串连接
当操作数中只要有一个是String类型,
系统会自动将另一个操作数转换成字符串类型,
然后进行连接。
注意:如果String是在后面做的连接,则前面先进行整数计算。
2+3 + "你好"->5你好
"你好"+2+3->你好23
int x,y,z;
x = 18;
y = x++;//++运算符放在变量后面表示后加1,先把18赋值给y,然后x再加1,此时x=19,y=18
z = ++x;//++运算符放在变量前面表示先加1,x加1后为20,然后x再赋值给z,此时x=20,y=18,z=20

int d = 5%3; //输出2
int e = -5%3;//输出-2
int f = 5/2;//输出2
double g = 5.0/2;//输出2.5

比较运算符&关系运算符
符号
含义
备注
==
相等于
检查如果两个操作数的值是否相等,如果相等则条件为真。
会返回一个true或false,注意不要写成"="。
对于基本数据类型比较的是值;
对于引用数据类型比较的是内存地址;
!=
不等于
检查如果两个操作数的值是否相等,如果值不相等则条件为真。
<
小于
检查左操作数的值是否小于右操作数的值,如果是那么条件为真。
>
大于
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
<=
小于等于(不大于)
检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。
>=
大于等于(不小于)
检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。
boolean a = true;
boolean b = false;
System.out.println(a==b);//输出false
System.out.println(a!=b);//输出true

int c = 10;
int d = 8;
System.out.println(c>d);//输出true

int a = 10;
int b = 10;
System.out.println(a==b);//输出true

String a = new String("123");
String b = new String("123");
System.out.println(a==b);//输出false

逻辑运算符(逻辑运算符两端的操作数必须是布尔类型的值)
符号
含义
备注
&&
逻辑与
当且仅当两个操作数都为真,条件才为真。
相当于“且”,如果用&&连接表达式时,如果左面的表达式为false,
则将不会计算其右边的表达式,又称"短路逻辑与"。
||
逻辑或
如果任何两个操作数任何一个为真,条件为真。
相当于“或”,如果左面的表达式为true,则将不会计算其右边的表达式,
又称"短路逻辑或"。
!
逻辑非
用来反转操作数的逻辑状态。如果条件为true,
则逻辑非运算符将得到false。
boolean a = true;
boolean b = false;
System.out.println(a&&b); //输出false
System.out.println(a||b); //输出true
System.out.println(!(a&&b)); //输出true

int c = 2;
int d = 1;
boolean e = (c!=2 && d==d++);//猜猜e,d输出什么?
boolean f = (c==2 && d==d++);//猜猜f,d输出什么?

int x = 5;
boolean y = (x<4)&&(x++<10);
System.out.println(y); //输出false,因为短路了
System.out.println(x);//输出5

位运算符
位运算符只对byte、short、char、int、long有效,涉及到二进制编程&位运算,新手PASS。
符号
含义
备注
&
按位“与”
相当于“且”,如果用&连接表达式时,无论左面的表达式为true还是false,
都会计算其右边的表达式,即左右两边都需要进行计算。

位运算:如果相对应位都是1,则结果为1,否则为0
|
按位“或”
相当于“或”,如果用&连接表达式时,无论左面的表达式为true还是false,
都会计算其右边的表达式,即左右两边都需要进行计算。

位运算: 如果相对应位都是0,则结果为0,否则为1
^
异或
所组合的两个布尔表达式有相反的值时,才会产生true。
如果两边都是true或都是false,则返回false。

位运算:如果相对应位值相同,则结果为0,否则为1
~
翻转
位运算:按位补运算符翻转操作数的每一位,即0变成1,1变成0。
<<
左移
a<
左移运算相当于实现整数乘以2的n次方。
位移后不会改变操作数本身的结果。
>>
右移
a>>b,将a的二进制数据右移b位,如果最高位是0,则左边移空的部分补0,
如果最高位是1,则左边移空的部分补1。
右移运算相当于实现整数除以2的n次方。
>>>
无符号右移
不管最高位是0或1,左边移空部分都补0。
(新手可以暂时忽略左移、右移、无符号右移等位运算部分,因为涉及到二进制编程。)
A = 0011 1100
B = 0000 1101

A&b   = 0000 1100
A | B   = 0011 1101
A ^ B  = 0011 0001
~A      = 1100 0011

boolean c = true;
boolean d = false;
System.out.println(c^d);

int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b;       /* 12 = 0000 1100 */
System.out.println("a & b = " + c ); //输出12

c = a | b;       /* 61 = 0011 1101 */
System.out.println("a | b = " + c ); //输出61

c = a ^ b;       /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c ); //输出49

c = ~a;          /*-61 = 1100 0011 */
System.out.println("~a = " + c ); //输出-61

c = a << 2;     /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c ); //输出240

c = a >> 2;     /* 15 = 1111 */
System.out.println("a >> 2  = " + c ); //输出15

c = a >>> 2;     /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c ); //输出15

赋值运算符
符号
含义
备注
=
x=y;
将右操作数的值赋给左侧操作数,把变量y的值赋给x
+=
x+=y;
加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数
-=
x-=y;
减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数
*=
x*=y;
乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数
/=
x/=y;
除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数
%=
x%=y;
取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数
<<=
x<<=y
左移位赋值运算符
>>=
x>>=y
右移位赋值运算符
&=
x&=y
按位与赋值运算符
^=
x^=y
按位异或赋值操作符
|=
x|=y
按位或赋值操作符
int a = 10;
int b = 20;
int c = 0;
c = a + b;
System.out.println(c); //输出30
c += a ;
System.out.println(c); //输出40
c -= a ;
System.out.println(c); //输出30
c *= a ;
System.out.println(c); //输出300
a = 10;
c = 15;
c /= a ;
System.out.println(c); //输出1
a = 10;
c = 15;
c %= a ;
System.out.println(c); //输出5
c <<= 2 ;
System.out.println(c); //输出20
c >>= 2 ;
c >>= 2 ;
System.out.println(c); //输出1
c &= a ;
System.out.println(c); //输出0
c ^= a ;
System.out.println(c); //输出10
c |= a ;
System.out.println(c);//输出10

String x = "alex";
String y = "jack";
x = y;
System.out.println(x); //猜猜看输出什么?
System.out.println(y);//猜猜看输出什么?

条件运算符
条件运算符很独特,因为它是用三个操作数组成表达式的三元运算符(也叫三目运算符)。
所谓三元运算符,是对三个表达式进行的集中比较,表达式1的结果为true时,就为第二个表达式,
如果为false时,就为第三个表达式。它可以替代某种类型的 if-else语句。
语法是: 表达式1?表达式2:表达式3
boolean a = (4 < 3) ? true : false;//a=false

instance of运算符(新手PASS)
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
格式:( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,
那么结果为真。
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真


运算符的优先级
在下面的表达式中,经常会出现一堆运算符同时出现的情况,那么哪个先执行哪个后执行呢?
顺序
运算符
1
括号
2
一元运算符,如 -、++、- -和 !
3
算术运算符,如 *、/、%、+ 和 -
4
关系运算符,如 >、>=、<、<=、== 和 !=
5
逻辑运算符,如 &、^、|、&&、||
6
条件运算符和赋值运算符,如 ? :、=、*=、/=、+= 和 -=


表达式
表达式是符合一定语法规则的运算符和运算数的序列。
表达式名称
表达式形式
算术表达式
(x+y-12)*100
关系表达式
x>y x>=y x!=y x==y
逻辑表达式
x&&y  x||y||z  (!x)&&(!y)
赋值表达式
x=y x+=y

Java语句分为两种:
1.声明语句:int i;
2.表达式语句:只有下面这几种表达式能够在末尾加上分号变成语句:
~含有=或者某个赋值表达式
~自加或自减表达式
~方法调用
~使用new来创建对象,即对象创建表达式


标识符
Java所有的组成部分都需要名字。
类名、对象名、变量名、接口名、数组名以及方法名等等都被称为标识符。

注意:
~只能由英文字母(A-Z或a-z)、数字(0-9)、下划线符号(_)组成;

~必须以英文字母、“_”或“$”开头,即不能以数字开头;

~除“_”和“$”以外,不能包含其它任何特殊字符,比如(@,#);

~不能与关键字(保留字)冲突;

~不能带有空格和数学符号;

~严格区分大小写;

合法标识符举例:age、$salary、_value、__1_value
非法标识符举例:123abc、-salary


Java关键字
所谓的关键字就是指在java中有特殊含义的词,所有的关键字均为小写,
你起名的时候不可以用这些词,goto与const作为保留关键字,在Java中并没有使用。
本列表按a-z的排列方式展现,红字必须背会。
关键字
含义
abstract
抽象类或方法
assert
用来查找内部程序错误
boolean
基本数据类型:8位布尔类型(因为java中没有1位这个单位)
break
跳出一个switch或循环
byte
基本数据类型:8位整数类型
char
基本数据类型:16位字符类型
case
switch的一个分支
catch
捕获异常的try块子句
class
定义一个类类型
continue
在循环末尾继续
default
switch的缺省语句
do
do/while循环最前面的语句
double
基本数据类型:64位双精度浮点数类型
else
if语句的else子句
enum
枚举类型
extends
继承一个父类
final
一个常量,或不能覆盖的一个类或方法
finally
try块中总会执行的部分
float
基本数据类型:32位单精度浮点数类型
for
一个循环类型
false
逻辑假
if
一个条件语句
implements
定义一个类实现的接口
import
导入一个包
instanceof
测试一个对象是否是某个类的实例
int
基本数据类型:32位整型数
interface
接口,一种抽象类型,仅有方法和常量的定义
long
基本数据类型:64位长整数型
native
由宿主系统实现的一个方法
new
分配新的类实例,用于创建对象
null
一个空引用
package
包含类的一个包
private
表示私有字段,或者方法等,只能从类内部访问
protected
表示保护类型字段
public
表示共有属性或者方法
return
从一个方法中返回
short
基本数据类型:16位整数类型
strictfp
对浮点数计算使用严格的规则
switch
选择语句
static
修饰静态变量,静态代码块
super
超类对象或构造函数
synchronized
多线程同步机制,添加synchronized锁,修饰方法和块
throw
抛出一个异常
this
当前类的一个方法或构造函数的隐含参数
transient
标志非永久性的数据
throws
一个方法可能抛出的异常
try
捕获异常的代码块
true
逻辑真
void
标记方法不返回任何值
volatile
标记字段可能会被多个线程同时访问,而不做同步
while
一种循环


总结
今天我们学习了Java里的大量基本语法,为后面的编程打基础。


作业
int a = 1;
int b = 2;
int c = 3;
System.out.println(b+=c--/++a);//输出什么?复习上面的运算符优先级

int x = 2;
System.out.println(x++/3);//输出什么?++在后面先操作再加1,相当于2/3,取整型

int y = 3;
System.out.println(x>=y);//输出什么?x为什么是3而不是2呢?

y = 10;
System.out.println(x>=y);//输出什么?

你可能感兴趣的:(#,Java教学系列)