资源预览内容
第1页 / 共76页
第2页 / 共76页
第3页 / 共76页
第4页 / 共76页
第5页 / 共76页
第6页 / 共76页
第7页 / 共76页
第8页 / 共76页
第9页 / 共76页
第10页 / 共76页
亲,该文档总共76页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第二章第二章 Java语言基础语言基础学习内容学习内容标识符关键字Java基本数据类型运算符表达式和语句流程控制方法变量的作用域数组标识符标识符Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符。凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则。Java标识符命名规则:标识符由字母、下划线“_”、美元符“$”或数字组成。标识符应以字母、下划线、美元符开头。Java标识符大小写敏感,长度无限制。标识符标识符合法的标识符非法的标识符HelloWorldclassmyDatamyData#_1212$ab_c1Hell World约定俗成:Java标识符选取应注意“见名知意”且不能与Java关键字重名。关键字关键字Java中一些赋以特定的含义,用于专门用途的字符串称为关键字(keyword)。所有Java关键字都是小写英文。goto和const虽然从未使用,但是也作为Java关键字保留。关键字关键字abstractclass finalintprivateswitchvoidassertcontinuefinallyinterfaceprotectedsynchronizedvolatilebooleandefaultfloatlengthpublicthiswhilebreakdoforlongreturnthrowbytedoubleifnativeshortthrowscaseelseimplementsnewstatictransientcatchextendsimportnullstrictfptruecharfalseinstanceofpackagesupertry关键字关键字标识符和关键字举例:HelloWorld.javaJava常量常量Java的常量值用字符序列表示,区分为不同的数据类型。整型常量123实型常量3.14字符常量a逻辑常量true、false字符串常量“helloworld”Java常量常量“常量”这个名词还可用于表示值不可变的变量(final关键字)。com.kim.ch2.sec1.const_value.TestConstValueJava变量变量Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型,作用域。Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,格式为:type varName =value,varName =valueint i = 100;float f = 12.3f;double d1, d2, d3 = 0.123;String s = hello;Java变量变量从本质上讲,变量就是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必须要先申请空间(声明),再赋值(初始化),才能使用。内存100i12.3ff0.123d3xxxs变量值变量名题外话:程序执行过程题外话:程序执行过程硬盘程序内存操作系统代码1.load到内存heapstackdata segmentcode segmentnew出来的东西局部变量静态变量(static)字符串常量存放代码2.找到main方法开始执行3.运行时内存管理Java变量的分类变量的分类按被声明的位置划分:局部变量:方法或语句块内部定义的变量成员变量:方法的外部,类的内部定义的变量。注意:类外面(与类对应的大括号外面)不能有变量的声明。按所属的数据类型划分:基本数据类型变量引用数据类型变量Java局部变量与成员变量局部变量与成员变量方法体内部声明的变量(包括参数)称为局部变量。在方法体外,类的内部声明的变量。public void method()int i;int j = i + 5;double d = 3.14;Dog dog;dog = new Dog();stackheapdog:xxxDogagenameJava局部变量与成员变量局部变量与成员变量变量的作用域在大括号里面声明的变量,只在大括号里面起作用,出了大括号,没人认识它。class Aint i = 1;void m1()int j = 1;再看下例:com.kim.ch2.sec1.variable. TestMemVar_LocalVar按照数据类型划分按照数据类型划分Java基本数据类型基本数据类型Java中定义了4类8种基本数据类型。逻辑型boolean文本型char整数型byte, short, int, long浮点型float, double逻辑型逻辑型Booleanboolean类型占用一个字节,适用于逻辑运算,一般用于程序流程控制。boolean类型数据只允许取值true或false,不能使0或非0的整数替代true和false,这点和C语言不同。实例:boolean flag = true;if(flag)字符型字符型charchar型数据用来表示通常意义上“字符”。字符常量是用单引号括起来的单个字符。char c = a; char c = 中;Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示。char c = u0061;注:Unicode是全球语言统一编码字符型字符型charJava语言中还允许使用转义字符,将其后的字符转变为其他含义。char c = n; 引用方法 对应Unicode码意义 bu0008退格 tu0009横向跳格、水平制表符tab nu000a换行 ru000d回车 ”u0022双引号 u0027单引号 u005c反斜线整数类型整数类型Java各个整数类型有固定的表示范围和字段长度,不受具体操作系统的影响,以保证Java程序的可移植性。Java语言整型常量的三种表示形式:十进制数:12, -4, 0八进制:要以0开头,0111十六进制:要以0x开头,0x11整数类型整数类型Java语言的整型常量默认为int型,声明long型常量可以在常量后加上l或L。int i = 300;/正确 long l = 888888888888L;/必须加L,否则出错浮点类型浮点类型与整数类型类似,Java浮点类型有固定的表示范围和字段长度,不受平台影响。Java浮点类型常量有两种表示形式十进制数形式,例如:3.14 123.0 .123科学记数法,例:3.14e2 1.23E2 100E-2Java浮点型常量默认为double型,如要声明一个常量为float型,则必须在数字后面加f或F,如:double d = 12345.6; /正确float f = 12.3f;/必须加f否则出错浮点类型浮点类型下面列出Java各种浮点类型浮点数有一定的误差,例如有可能在计算机内部用0.99999模拟1.0,所以一般不会在程序中直接比较浮点数:if(f = 1.0)变量举例实例一:com.kim.ch2.sec1.variable. TestVarType题外话:题外话:Java命名的规则命名的规则i和j是整数的下标。常量全部大写(MAX_NAME_LENGTH)类名和接口名中每一个单词的首字母用大写,例如:ClassOrInterfaceName。变量名和方法名中的第一个单词的首字母小写,剩下的单词首字母大写,例如:varOrMethodName。访问器子程序用get和set前缀,例如:getName(),setName(),getAge(),setAge()基本数据类型转换基本数据类型转换boolean类型不可以转化为其他数据类型。整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵守以下原则:容量小的类型自动转换为容量大的数据类型。数据类型按照容量排序为:byte,short,char-int-long-float-doublebyte,short,char之间不会相互转换,直接转化为int类型,再计算。实例:com.kim.ch2.sec1.variable.TestVarConvert1基本数据类型转换基本数据类型转换容量大的数据类型=容量小的数据类型,要加上强制转换府,但可能造成精度下降或溢出,使用时要格外注意。多种类型的数据混合时,系统首先自动地将所有数据转换为容量最大的一种数据类型,再进行运算。实数常量(例如:1.3)默认为double整数常量(例如:123)默认为int基本数据类型转换基本数据类型转换int i = 1,j;float f1 = 0.1,f2 = 123;long l1 = 12345678, l2 = 888888888888;double d1 = 2e20, d2 = 123;byte b1 = 1, b2 = 2, b3 = 3;j = j + 10;i = i / 10;i = i * 0.1;char c1 = a, c2 = 123;byte b = b1 - b2;char c = c1 + c2 - 1;float f3 = f1 + f2;float f4 = f1 + f2 * 0.1;double d = d1 * i + j;float f = (float)(d1 * 5 + d2);课堂练习:指出下面程序的错误、并改正。com.kim.ch2.sec1.variable.TestConvert2题外话:程序的格式题外话:程序的格式为什么需要格式?程序一:程序一:public int searchData(int data, int searchData)int i = 0;for(i = 0; i data.length; i+)if(datai = searchData)break;if(i = data.length)return -1;else return i;题外话:程序的格式题外话:程序的格式程序二:public int searchData(int data, int searchData)int i = 0;for(i = 0; i data.length; i+)if(datai = searchData)break;if(i = data.length)return -1;elsereturn i;题外话:程序的格式题外话:程序的格式程序三:程序三:public int searchData(int data, int searchData)int i = 0;for(i = 0; i data.length; i+)if(datai = searchData)break;if(i = data.length)return -1;elsereturn i;题外话:程序的格式题外话:程序的格式再看下面两个程序:程序一:for(i = 0; i , =, , 赋值运算符:=扩展赋值运算符:+=, -=, *=, /=字符串连接运算符:+与与-实例:com.kim.ch2.sec1.operator.PlusPlus_MinusMinus逻辑运算符逻辑运算符逻辑运算符:! 逻辑非& 逻辑与| 逻辑或 逻辑异或& 短路与| 短路或ab!aa&ba|baba&ba|btruetruefalsetruetruefalsetruetruetruefalsefalsefalsetruetruefalsetruefalsetruetruefalsetruetruefalsetruefalsefalsetruefalsefalsefalsefalsefalse逻辑运算符逻辑运算符&:之前的表达式为false,那么不看后面的表达式。|:之前的表达式为true,那么不看后面的表达式。&和|:无论什么情况,都要判断两边的表达式。public class AndOr public static void main(String args) int i = 1;int j = 2;boolean flag1 = (i 3) & (i + j) 5);boolean flag2 = (i 2) | (i + j) 3) & (i + j) 5);boolean flag4 = (i 2) | (i + j) 6);证明这个规则:证明这个规则:com.kim.ch2.sec1.operator.AndOr位运算符位运算符&:按位“与”|:按位“或”:按位“异或”(a & b | a & b):按位“非”:有符号右移(符号为正,则最高位补0,符号为负,则最高位补1):无符号右移(高位补0)位运算符位运算符位运算符举例com.kim.ch2.sec1.operator.BitOperator赋值运算符与扩展赋值运算符赋值运算符与扩展赋值运算符赋值运算符(=)当=两侧数据类型不一致时,可以适用默认类型转换或适用强制类型转换原则处理。long l = 100; float f = (float)0.1;可以将整型常量直接赋值给byte, short, char等类型变量,而不进行强制类型转换,只要不超出其表示范围。byte b = 12; char c = 65535;byte b = 300; short s = 32768;赋值运算符与扩展赋值运算符赋值运算符与扩展赋值运算符运算符用法举例等效表达式+=a += ba = a + b-=a -= ba = a b*=a *= ba = a * b/=a /= ba = a / b%=a %= ba = a % b字符串连接符字符串连接符+两种用法:算术加、字符串连接int i = 100 + 200;String s = hello + java;+运算符两侧只要有一个是字符串(String)类型,系统将另一个操作数转化为字符串再做字符串连接运算。123 + 456; 123 + 456 123 + 456int k = 1; System.out.println(k = + k);表达式表达式表达式是符合一定语法规则的运算符和操作数的序列a1.0 + a(a + b) * c 5;i 30 & i % 10 != 0表达式的类型和值对表达式中的操作数进行运算得到的结果称为表达式的值。表达式值的数据类型即为表达式的类型。表达式表达式表达式的计算顺序按照优先级从高到低的顺序运算。优先级相同的运算符按照结合方向进行。三目条件运算符三目条件运算符语法格式:x ? y :z其中x为boolean类型的表达式,若为true,则整个三目条件运算符的结果为表达式y的值,否则结果为表达式z的值。举例:int score = 80; String type = score 60 ? 不及格 : 及格流程控制流程控制顺序结构分支结构ififelseifelse ififelse ifelse ifelseswitch循环结构forwhiledowhileif语句语句ififelseifelse ifelse只有一句语句块需要执行时,可以省略举例:com.kim.ch2.sec2.if_for_while.TestIFSwitch语句语句switch()case xx:case yy:default:注意case穿透,推荐使用break语句多个case可以合并到一起default可以省略,但不推荐省略java中switch语句只能探测int类型值com.kim.ch2.sec2.if_for_while. TestSwitchfor循环语句循环语句for语句为如下形式:for(表达式1, 表达式2; 表达式3)语句;执行过程结束表达式1表达式2语句表达式3falsetruefor循环语句循环语句实例:计算result = 1! + 2! + + 10!long result = 0;long f = 1;for(int i = 1; i = 10; i+)f = f * i;result += f;System.out.println(result: + result);for循环语句循环语句课堂训练:编写程序,用for循环计算1+3+5+99的值,并输出计算结果。编写程序,用for循环计算1/1! + 1/2! + 1/3! + +1/10!的值,并输出计算结果。while & do while语句语句while语句为如下形式:while(逻辑表达式)语句;执行过程逻辑表达式语句结束truefalsewhile & do while语句语句do while语句为如下形式:do语句;while(逻辑表达式); 执行过程逻辑表达式语句结束falsetruewhile & do while语句语句while & do while举例com.kim.ch2.sec2.if_for_while.TestWhilebreak & continue语句语句break语句用于终止某个语句块的执行。用在循环语句体中,可以强行退出循环。实例:int stop = 4;for(int i = 1; i = 10; i+)if(i = stop)break;System.out.println(i = + i);思考:if(i = stop); 会怎么样?break & continue语句语句continue语句用在循环语句中,用于终止某次循环过程,跳过循环体中continue语句下面未执行的循环,开始下一次循环过程。实例:int skip = 4;for(int i = 1; i = 5; i+)if(i = skip)continue;System.out.println(i = + i);循环语句举例循环语句举例输出1100以内的前5个被3整除的数。com.kim.ch2.sec2.if_for_while. While_Sample1输出101200内的质数。com.kim.ch2.sec2.if_for_while.While_Sample2方法方法Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,声明格式:修饰符1 修饰符2 返回值类型方法名(形式参数列表) Java语句;形式参数:描述方法能接收的数据的个数和类型。实参:调用方法时实际传给方法的数据。返回值:方法在执行完毕后返还给调用它的环境的数据。返回值类型:实现约定的返回值的数据类型,如无需返回值,必须给出返回值类型为void。实例:com.kim.ch2.sec2.method. TestMethod方法方法方法的调用形式对象名.方法名(实参列表)实参的数目、数据类型和次序必须和形参匹配。return语句终止方法的运行,并指定要返回的数据。Java中方法参数是按值传递。基本数据类型传递的是数据本身。引用数据类型传递的是对象的引用,而不是对象本身。数组数组数组可以看成是多个相同类型数据组合,对数据的统一管理。数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组中的元素可以是任何数据类型,包括基本数据类型和引用类型。数组数组一维数组的声明方式:type var ; 或 type var;例如:int a1 ; int a2;double b ;Person p1; String s1 ;Java语言中声明数组时不能指定其长度(数组中元素的个数)。例如:int a5; /非法数组数组Java中使用关键字new 创建数组对象,格式为:数组名 = new 数组元素的类型数组元素的个数public class TestArraypublic static void main(String args)int s;s = new int 5;for(int i = 0; i 5; i+)si = i;栈堆s: xxx01234数组数组数组是引用类型,可以赋值。public class TestArraypublic static void main(String args)int s;s = new int 5;for(int i = 0; i 5; i+)si = i;int t = s;for(int i = 0; i 5; i+)System.out.println(ti);栈堆s: xxx01234t: xxx数组数组元素为引用类型的数组public class Testpublic static void main(String args)A a;a = new A 3;for(int i = 0; i 3; i+)ai = new A();class A a: null栈堆xxxyyyzzz数组的初始化数组的初始化动态初始化先定义数组,再分配空间,最后初始化数组。int a;a = new int 3;a0 = 0; a1 = 1; a2 = 2;或int a = new int 3;a0 = 0; a1 = 1; a2 = 2; A a ;a = new A new A(), new A(), new A();数组的初始化数组的初始化静态初始化在定义的同时就为数组元素分配空间,并赋值。int a = 3, 9, 8; A a = new A(), new A(), new A();class A 数组初始化的默认值数组初始化的默认值数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化。实例:com.kim.ch2.sec3.array.TestArrayInitDefaultVar数组元素的引用数组元素的引用数组定义并用new分配空间后,才可以引用数组中的每个元素。引用格式为:arrayNameindexindex为数组的下标,可以是整型常量,或整型表达式。如:a3, bi, ci + j;数组的下标从0开始,长度为n的数组的合法下标范围为0n-1。每个数组都有一个属性length指明数组的长度。数组的复制数组的复制只复制引用int a = new int 3;for(int i = 0; i 3; i+)ai = i;int b = a;for(int i = 0; i 3; i+)System.out.println(bi);System.out.println(a);System.out.println(b);数组的复制数组的复制复制内容int a = new int 3;int b = new int 3;for(int i = 0; i 3; i+)ai = i;System.arraycopy(a, 0, b, 0, a.length);for(int i = 0; i 3; i+)System.out.println(bi);System.out.println(a);System.out.println(b);二维数组二维数组二维数组可以看成以数组为元素的数组。例如:int a = 1, 2, 3, 4, 5, 6, 7, 8, 9;Java中多维数组的声明和初始化应按从高维到低维的顺序进行。二维数组二维数组int a = new int3;a0 = new int 2;a1 = new int 4;a2 = new int 3;int t1 = new int 4;/非法int t2 = new int 23;a:xxx堆a00a01a10a11a12a13a20a21a22二维数组举例二维数组举例实例一:com.kim.ch2.sec3.array. Test2DArraySample1实例二:com.kim.ch2.sec3.array. Test2DArrayString实例三:com.kim.ch2.sec3.array. Test2DArrayCopy方法中数组参数的传递方法中数组参数的传递传递的是数组引用的值,而不是数组对象的拷贝。int createIntArray() int a = new int 5; return a;void increment(int a) for(int i = 0; i a.length; i+) ai+;public static void main(String args)int a;a = createIntArray();increment(a);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号