1、运算符、表达式与语句,3.1 概述,程序是由许多语句组成的 语句的基本单位是表达式与运算符,3.2 运算符,Java中提供的运算符,按照运算符的功能可以分为4类 。 赋值运算符 算术运算符 关系运算符 逻辑运算符 位运算符,3.2.1 赋值运算符,3.2.1 赋值运算符,赋值运算符(=)用于为变量赋值。一次可以为多个变量赋值。 例如:,int z = 50; int x , y ; x = y = z ;,3.2.2 算术运算符,3.2.2 算术运算符,public class OperatorDemo01public static void main(String args)int i =
2、10;int j = 3;System.out.println(i+“+”+j+”=”+(i+j);System.out.println(i+“-”+j+”=”+(i-j);System.out.println(i+“*”+j+”=”+(i*j);System.out.println(i+“/”+j+”=”+(i/j);System.out.println(i+“%”+j+”=”+(i%j); ,10+3=13 10-3=7 10*3=30 10/3=3 10%3=1,3.2.2 算术运算符,3.2.2 算术运算符,自增与自减运算符也是各个语言中最常见到的语句,在java中仍然将他们保留了下来
3、 自增 前加加:+a后加加:a+,先把a的值加一,再执行整个语句,再执行整个语句,再把a的值加一,3.2.2 算术运算符,public class OperatorDemo02public static void main(String args)int a = 3, b = 3;int x = 6, y = 6;System.out.println(“a=” + a);System.out.println(“t a+=” + (a+) + ”,a=” + a );System.out.println(“b=” + b);System.out.println (“t +b=” + (+b) +
4、 ”,b=” + b );System.out.println(“x=” + x);System.out.println (“t x-=” + (x-) + ”,x=” + x );System.out.println(“y=” + y);System.out.println (“t -y=” + (-y) + ”,y=” + y ); ,3.2.2 算术运算符,3.2.3 关系运算符,比较运算符用于测试两个操作数之间的关系,返回一个布尔值。,3.2.3 关系运算符,Public class OperatorDemo03public static void main(String atgs)S
5、ystem.out.println(“31=”+(31);System.out.println(“3=1=”+(3=1);System.out.println(“3=1=”+(3=1);System.out.println(“3=1=”+(3=1);System.out.println(“3!=1=”+(3!=1); ,31=true 3=1=true 3=1=false 3=1=false 3!=1=true,3.2.4 逻辑运算符,3.2.4 逻辑运算符,逻辑运算符本身也返回一个boolean值 1) 逻辑与:使用&表示,逻辑与是个双目运算符(即有两个操作数的运算符) ,只有当两个操作数都
6、为真的时候,结果才为真;其余情况结果均为假。逻辑与表示的并且的意思。 2) 逻辑或:使用|表示,逻辑或也是个双目运算符,只有当两个操作数都为假的时候,结果才为假;其余情况结果均为真。逻辑或表示或者的意思。 关于逻辑运算符的短路特性 1) 逻辑与:如果第一个操作数为 false,那么结果肯定就是 false,所以在这种情况下,将不会执行逻辑与后面的运算了,即发生了短路。 2) 逻辑或:如果第一个操作数为 true,那么结果肯定就是 true,所在在这种情况下,将不会执行逻辑或后面的运算了,即发生了短路。,3.2.4 逻辑运算符,3.2.4 逻辑运算符,Public class OperatorD
7、emo04public static void main(String args)boolean a = true;boolean b = false;System.out.println(“a|b” + (a|b);System.out.println(“a|b” + (a|b);System.out.println(“a ,3.2.4 逻辑运算符,3.2.4 逻辑运算符,public class LogicTest public static void main(String args)int a = 1;int b = 2;int c = 3;int d = 4;/*boolean e
8、= (a b) ,3.2.4 逻辑运算符,public class LogicTest2 public static void main(String args)int a = 1;int b = 2;int c = 3;int d = 4;int f = 5;boolean e = (a b) ,3.2.5 扩展赋值运算符,3.2.5 扩展赋值运算符,3.2.6 字符串连接,3.2.7 三元运算符,三元运算符(? :)可以代替if-else结构。运算过程如下图所示:,?,:,条件,表达式1,表达式2,String type = “工人”; salary = type.equals(“经理”)
9、 ? 3000 : 2000 System.out.println(“我们的薪水是”+ salary);,由于type不等于“经理”(条件为false),所以salary=2000。,3.2.7 三元运算符,public class Test public static void main(String args)int a = 1;int b = 2;int c = 3;int d = 4;int e = a b ? c : d;System.out.println(e); ,3.2.8 运算符优先级,2.13.6 instanceof运算符,instanceof为对象引用运算符; 如果在此
10、运算符左侧对象是右侧类型的实例时,它将返回true; 使用此运算符可以确定对象是否属于一个特定的类型。,class InstanceDemo public static void main (String args)InstanceDemo ins = new InstanceDemo();if ( ins instanceof InstanceDemo )System.out.println(“ins是InstanceDemo的实例!“);elseSystem.out.println(“ins不是InstanceDemo的实例!“); ,3.3 流程控制,Java语言中程序流程语句的分类:
11、条件语句 循环语句 跳转语句,顺序结构,3.3.1 条件语句,1、if else语句,根据条件是true还是false来执行相应的语句。,if ( 条件 )单个语句 else 单个语句,if ( 条件 ) 语句组 else 语句组 ,Java语言的if else语句可以嵌套使用 。,1、if else语句,1、if else语句,1、if else语句,1、if else语句,1、if else语句,1、if else语句,public class IfTestpublic static void main(String args)int a = 3;int b = 2;if(a b)Syst
12、em.out.println(“a b“);else if(a b)System.out.println(“a b“);elseSystem.out.println(“a = b“); ,2、switch 语句,switch流程控制的语法如下:,switch ( 表达式 )case 常量数值1语句(组)break ;case 常量数值2语句(组)break ; .default:语句(组) ,2、switch 语句,public class SwitchTestpublic static void main(String args)int a = 3;switch(a)case 3:Syste
13、m.out.println(“a = 3“);break;case 1:System.out.println(“a = 1“);break;case 2:System.out.println(“a = 2“);break; default:System.out.println(“default“);if(3 = a)System.out.println(“a = 3“);else if(1 = a)System.out.println(“a = 1“);else if(2 = a)System.out.println(“a = 2“);elseSystem.out.println(“defau
14、lt“); ,3.3.2 循环语句,Java中所提供的循环流程控制有: for循环流程控制 while循环流程控制 dowhile循环流程 forin循环(JDK5.0新增)。,1、for 循环,for循环流程控制的语法如下:,/进入for循环流程控制for(初始表达式 ;判断表达式;递增表达式)for循环主体;/结束for循环流程控制,1、for 循环,1、for 循环,1、for 循环,2、while 循环,如果不知道循环控制元素的范围到底是多少时,就可以利用while循环控制流程。 在进入while循环流程控制时,用户根本不知道到底要重复运行循环几次,决定权在于while循环的条件表达式
15、以及循环控制元素。,/进入while循环流程控制 while(条件表达式)while循环主体; /结束while循环流程控制,2、while 循环,2、while 循环,3、do.while 循环,do.while循环与while循环 的区别是dowhile的循环主体至少运行一次。 语法如下:,dodo-while主体; while(条件表达式);,3、do.while 循环,3、do.while 循环,4、for/in 循环,for/in循环通常叫作增强的 for 或者 foreach循环,针对数据群组执行遍历功能。 for/in循环是 Java 5.0 中一个极为方便的特性。 实际上它没有
16、提供任何新的功能,但它显然能让一些日常编码任务变得更简单一些。如下例:,int primes = new int 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ; for (int n : primes) System.out.println(n); ,3.3.3 跳转语句,跳转流程控制用来中断循环,或是返回到指定语句的特殊流程控制。 break流程控制Break流程控制是用来强迫中断运行该区块内的语句,使得程序流程跳出该区块,继续运行区块外部的语句。 continue流程控制 continue流程控制通常与循环流程配合使用,跳出本次循环,运行下次循环。,3.3.3 跳
17、转语句,课堂练习,3.4 数 组,数组(array)是相同类型变量的集合,可以使用共同的名字引用它。 数组中的一个特别要素是通过下标来访问它。 数组提供了一种将有联系的信息分组的便利方法。,2.15.1 一维数组,一维数组实质上是相同类型变量列表。 要创建一个数组,我们必须首先定义数组变量所需的类型。 通用的一维数组的声明格式是:type var-name;或者:type var-name ; 所有数组的下标从0开始。,2.15.2 数组的初始化-1,使用new关键字来为数组分配内存。 当运算符new被应用到一维数组时,它的一般形式如下: array-var = new typesize;,2
18、.15.3 数组的初始化-2,用运算符new 分配数组后,数组中的各下标的值如下所示: 数字数组中的元素将会被自动初始化为零; 布尔数组将被初始化为false; 对象数组将被初始化为null(空)。,2.15.4 数组的初始化-3,在数组声明时自定义初始化数据,可以如下声明: int month_days = 31,28,31,30,31,30,31,31,30,31,30,31; 等同于:int month_days = new int 31,28,31,30,31,30,31,31,30,31,30,31;,2.15.5 数组的错误初始化,注意:只能在数组声明时用大括号对来自定义数据,否则
19、只能机械地分别对每个下标元素进行赋值。int month_days = new int12; month_days = 31,28,31,30,31,30,31,31,30,31,30,31; /错误 我们只能采用如下的方法为已经创建的数组赋值。 int month_days = new int12; month_days0 = 31; month_days1 = 28;,2.15.6 多维数组,定义多维数组变量要将每个维数放在它们各自的方括号中。 例如,下面语句定义了一个名为twoD 的二维数组变量。int twoD = new int45;,2.16 java.lang包,java.lan
20、g包是Java语言的核心类库,包括了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。 每个Java程序运行时,系统都会自动地引入java.lang包。 java.lang包的加载是缺省的。,2.12字符串,字符串常量 :字符串常量是用双引号括住的一串字符。 String对象 :String是串的意思,这个类是表示字符串常量的类。 StringBuffer对象 :StringBuffer类被设计用于创建和操作动态字符串信息。,如:“Hello World!“,2.12.1 String对象,在Java中,字符串常量是一个类:String类,C语言中
21、,字符串就是字符数组,两者是不同的。,创建一个空的字符串对象。,创建一个非空字符串对象:,可以通过运算符”+”来连接字符串:,String test=new String(); 或者: String test; test=new String();,String hello=new String(“Hello World!”); 或者: String hello = “Hello World!”;,String hello=new String(“Hello World!”); 或者: String hello = Hello +“ Happy”;,2.12.2 String 类方法,char
22、At() : 返回字符串中某个特定位置的字符 indexOf() :返回字符串中某个特定字符或子字符串首次出现的索引 toUpperCase() : 将字符串内的所有字符从小写改为大写 toLowerCase() : 将字符串内的所有字符从大写改为小写,2.12.3 StringBuffer对象,String对象一旦被初始化和赋值,它的值和所分配的内存就被固定了。 要改变String对象的值,将会产生一个包含新值的新String对象。 StringBuffer对象分配的内存会自动扩展以容纳新增的文本。,2.12.3 创建StringBuffer对象,使用默认构造函数:创建了不包含任何文本的对象
23、,默认的容量是16个字符 StringBuffer sb=new StringBuffer(); 使用初始化字符串:StringBuffer sb=new StringBuffer(“Hello“); 设定大小:创建不包含文本,容量是指定大小StringBuffer sb=new StringBuffer(30);,2.12.3 append ()方法,通过append()方法将指定的文本添加到当前StringBuffer对象内容的结尾 。,StringBuffer sb=new StringBuffer(); sb.append(“Build“); sb.append(“er“); sb.append(“.com“); System.out.println(sb.toString();,课堂总结,Java提供了8种基本数据类型,分别是:byte、short、int 、long、float、double、char及boolean。 在Java中,字符串常量是一个类:String类。 StringBuffer类被设计用与创建和操作动态字符串信息。为该对象分配的内存会自动扩展以容纳新增的文本。 for/in循环通常叫作增强的 for 或者 foreach循环,它是 Java 5.0 中一个极为方便的特性。,提问时间,