资源描述
,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,Java,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第章,Java,语言概述,Java,语言的特点,2,Java,开发环境,4,Java,语言发展历史,3,1,Java,体系结构,3,3,Java,编程风格,6,Java,程序开发实例,3,5,本章内容提要,91,年,,sun,公司的,“,Green,”,项目,开发一种面向家用电器市场的软件产品,由于对平台独立性和安全性的要求,产生了一种语言,-Oak;,94,年,随着,Internet,和,WWW,的迅猛发展,需要一种简练、小巧、与平台无关的语言,,Oak,正好适合这个要求,,Oak,的第一个应用,-WebRunner,浏览器;,1.1 Java,语言发展历史,95,年,注册,Oak,失败,更名为,java(java,和咖啡,),,,HotJava,浏览器;,96,年到现在,从,jdk1.0,jdk1.6,发展异常迅速,遍布从企业应用到个人终端的各个方面;,2009,年,4,月,,Oracle,公司宣布以,74,亿美元收购,Sun,公司;,2011,年,7,月发布了,Java SE7.0,,这是,Java,目前的最高版本,1.1 Java,的发展历史,1,简单(,simple,),Java,语言由,C+,语言发展而来,其风格与,C+,类似。,Java,语言增加了自动内存单元收集功能。,Java,语言为开发者提供了丰富的类库。,2,面向对象(,Object-Oriented,),Java,语言是一种纯粹的面向对象语言,它集中于对象和接口的设计,提供简单的类机制和动态的接口模型。对象中封装了状态数据以及响应的方法,实现了模块化和信息隐藏。,1.2 Java,语言的特点,3,安全(,Security,),Java,在设计之初就注重语言的健壮性,避免了一些不稳定的因素,可以防止许多编程错误,在此基础上还采取其他一些安全措施。,4,解释型(,Interpreted,),Java,是一种解释型的程序设计语言。,Java,代码编译后不直接生成特定的机器代码,而是,Java,字节代码,,Java,程序运行时借助,Java,解释器(即,Java,虚拟机)对编译后的字节码文件进行解释执行。,1.2 Java,语言的特点,5,平台无关(,Architecture-Neutral,),平台无关有两种:源代码级和目标代码级。,Java,是一种目标代码级的平台无关语言,用,Java,编写的应用程序不用修改就可以在不同的软硬件平台上运行,而不受计算机硬件和操作系统的限制。其特点是,“,一次编写,处处运行,”,。,6,分布式(,Distributed,),分布式包括数据分布和操作分布。,Java,支持这两种分布性。,1.2 Java,语言的特点,7,多线程(,Multi-Threaded,),Java,提供多线程支持。主要体现在两个方面,其一,,Java,环境本身就是多线程的。其二,,Java,语言内置了多线程控制,可以大大简化多线程应用程序开发。,8,动态性(,Dynamic,),Java,允许程序动态的装入运行中所需要的类,或者在原有的类中自由地加入新的方法和实例变量而不会影响用户程序的运行。,1.2 Java,语言的特点,7,开源性(,Open Source,),2007,年,5,月,,Sun,公司在其,OpenJDK Web,站点上正式发布,JDK,的源代码,这一举措兑现了,Sun,公司使,Java,成为开放源代码软件的承诺,这意味着以,Linux,为核心技术的其他厂商能够更方便地在它们的产品中集成,Java,,使,Java,赢得编程人员的更多关注。,1.2 Java,语言的特点,Java,不仅是开发各种应用程序的编程语言,还是支持,Java,应用程序进行编译、运行的平台,。完整的,Java,体系结构实际上是由,4,部分组合而成,包括,Java,编程语言、,Java,类文件、,Java API,(,Application Programming Interface,)以及,JVM,(,Java Virtual Machine,)。,1.3 Java,体系结构,1.3 Java,体系结构,应用程序,Java,运行时环境,Java,编程环境,Java,类文件,Java API,JVM,Java,平台,操作系统、,CPU,芯片,当使用,Java,开发应用程序时,,首先用,Java,编程语言编写源代码,然后将源代码编译为,Java,类文件,即字节码文件,接着在,JVM,中解释执行类文件,在执行过程中根据应用程序的需要调用,Java API,中的标准类,以获得相应的功能支持,。,1.3 Java,体系结构,1.3 Java,体系结构,Java,源程序,字节码,(,.class,),处理器,专用码,编译器,JVM,Java API,(类库),JVM,与,Java API,共同构成了,Java,平台,也称为,JRE(Java Runtime Environment,,,Java,运行时环境,),,该平台可以建立在任何操作系统上。,Java,平台发展到,Java 2,版本后,为了适应不同级别应用程序开发的需要,又分为三个分支:,1,Java SE(Java2 Platform Standard Edition),),2,Java EE(Java2 Platform Enterprise Edition)3,Java ME(Java2 Platform Micro Edition),1.3 Java,体系结构,Java,的应用(,Java SE,),1.3 Java,体系结构,返回,Java,的应用(,Java EE,),1.3 Java,体系结构,返回,Java,的应用(,Java ME,),Mobile Phone,、,PDA,Java Game,1.3 Java,体系结构,JDK,Java,软件开发工具集,J2SDK,(,Java2 Software Development Kit,),简称,JDK,,是一种用于构建在,Java,平台上编译和发布,Java,程序的开发和运行环境。,1,javac,:编译器,输出结果为,Java,字节码文件。,2,java,:字节码解释器,直接从类文件执行,Java,应用程序。,3,javadoc,:,API,文档生成器,根据,Java,源代码及说明语句生成,HTML,格式的,API,文档。,1.4 Java,开发环境,4,appletviewer,:小应用程序浏览工器,用于调试运行,Java,小应用程序。,5,jar,:,Java Archiver,文件归档工具。,6,jdb,:,Java,语言调试器。,7,javah,:头文件生成器,用于从,java,类中调用,C,代码。,8,javap,:,Java,反编译器,将,java,的字节码文件转换为,java,源文件,1.4 Java,开发环境,开发环境配置,1,PATH,变量设置,打开控制面板选择系统环境变量,在用户变量窗口中找到,PATH,变量,然后在路径的开头添加,JDK,工具集所在的路径,使用分号把新加的条目和以前的分开。如下所示:,C:Program FilesJavajdk1.6bin;,1.4 Java,开发环境,2,CLASSPATH,变量设置,打开控制面板选择系统环境变量,在用户变量窗口中添加一个,CLASSPATH,变量,令其值等于,JDK,类库所在的路径,如果需要,还可以再设置其他的类库路径(可以是第三方开发的类库,或者开发者自定义的类库),以及当前路径,“,”,(即当前程序所在的路径),使用分号把新加的条目和以前的分开,如下所示:,C:Program FilesJavajdk1.6jrelibrt.jar;.;,1.4 Java,开发环境,1.5 Java,应用程序实例,根据运行环境不同,,Java,语言程序可以分为两类,分别是,Java Application,和,Java Applet,。这两类程序的开发原理相同,但应用于不同的场合。,Java Application,指可以在,Java,平台上独立运行的一种程序,通常称为,Java,应用程序,而,Java Applet,则必须嵌在,HTML,编写的,Web,网页中,通过浏览器运行,通常被称为,Java,小程序。,Java Application,1,编写源程序,例,1-1,简单的,Java,应用程序实例,1.5 Java,应用程序实例,This is my first Java Program,!,类的个数:至少一个类,最多只能有一个,public,类。,源文件命名:若有,public,类,源文件必须按该类命名,反之,则可以用任何一个类名来做源文件名。,main(),方法:,Java,应用程序必须有,main(),方法,包含,main(),方法的类被称为主类。,1.5 Java,应用程序实例,2,编译,Java,应用程序,打开一个,MS-DOS,窗口,然后进入,JavaApplication.java,文件所在的目录,输入如下命令开始编译源程序,,javac Example1_1.java,Java,源程序必须带上扩展名(,.java,),否则编译程序会提示出错。,1.5 Java,应用程序实例,Java,源程序经过编译后得到属性名为,.class,的字节码文件,,,一个源程序可以编译成一个或多个字节码文件,每个字节码文件对应源程序中定义的一个类,文件名与对应的类名相同。,1.5 Java,应用程序实例,3,运行,Java,应用程序,运行编译好的,Java,字节码程序需要调用,Java,的解释器,java.exe,。在编译后使用如下命令运行已经生成的,Example1_1.class,文件。,java Example1_1,运行时在类名后面不要增加字节码文件的后缀,.class,,否则系统会提示找不到一个名为,Example1_1.class,的类。,1.5 Java,应用程序实例,Java Applet,1,编写与编译源文件,例,1-2,简单的,Java,应用程序实例,This is a Java Applet,!,Java Applet,程序可以由若干个类组成,但其中必须有一个类是系统类,Applet,的子类。,1.5 Java,应用程序实例,2,编写,HTML,文件,1.5 Java,应用程序实例,HTML,文件的标记和参数对字符的大小写是不敏感,但文本和参数值是大小写敏感的,因此如果字节码文件名必须与源文件一致。,1.6 Java,编程风格,1,Allmans,风格,for(int i=0;i=100;i+),sum+=i;,2.,Kernighan,风格,for(int i=0;i,高,byte,short,char,int,long,float,double26,在表达式中,,byte,、,short,或,char,数据将无条件地转换,(,升级,),为,int,类型。,在表达式中,实现低级别向高级别自动升级。,在赋值表达式中,如果左值类型高于右值类型,右值类型将自动转换为左值类型。,2.2,基本数据类型,2.2,基本数据类型,例:,float x=100;,如果输出,x,的值,结果将是,int x=50;float y;y=x;,如果输出,y,的值,结果将是,100.0,50.0,强制转换,当级别高的变量的值赋给级别低的变量时,必须强制进行数据类型转换。,强制转换格式为:,(,目标数据类型,),变量名或表达式,例:,int x=(int)23.89;,输出,x,的值是,char c=(char)(12.5+54);,输出,c,的值是,强制转换运算可能导致精度的损失。,2.2,基本数据类型,23,B,所有整数类型都能向,float,或,double,自动转换,反之必须强制转换;,字符类型可向,int,、,long,、,float,、,double,自动转换,反之必须强制转换;,字符类型转换为,byte,时必须强制转换;,布尔类型不可和任何其他数据类型转换。,2.2,基本数据类型,从命令行输入输出数据,1.,输入数据,Java,中使用,Scanner,类从命令行输入数据。,2.,输出数据,System.out.println(),或,System.out.print(),方法用来输出串值和表达式的值。,【例,2-2,】读入用户在命令行输入的数据并输出,2.2,基本数据类型,运算符,是对操作数进行运算的符号。,运算符的类型包括:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符和其他运算符。,表达式,是用运算符把操作数(变量、常量和方法等)连接起来的表达某种运算或含义的式子。,表达式的类型由运算以及参与运算的操作数的类型决定,可以是简单类型,也可以是引用类型。,2.3,运算符与表达式,算数运算符与算术表达式,1,二元算术运算符,二元算术运算符涉及两个操作数。,运算符,表达式,功能,+,op1+op2,加,-,op1-op2,减,*,op*op2,乘,/,op/op2,除,%,op%op2,求余,2.3,运算符与表达式,数据类型之间的转换;,与,C,不同,对取模运算符,“,%,”,来说,其操作数可以为浮点数,如,10%3.5=3.0,;,Java,对加运算符进行了扩展,使它能够进行字符串的连接,如,abc+de,,得到串,abcde,。,2.3,运算符与表达式,2,一元算术运算符,一元算术运算符涉及的操作数只有一个。,运算符,名称,表达式,功能,+,一元加,+op1,取正值,-,一元减,-op1,取负值,+,增量,+op1,op1+,加,1,-,减量,-op1,op1-,减,1,2.3,运算符与表达式,例如,:,假设,a=5,b=10,,计算表达式,c=(a+)*(-b),。,计算过程分为以下三步,:,(,1,),b=b-1=9;,(,2,),c=a*b=45;,(,3,),a=a+l=6,2.3,运算符与表达式,关系运算符与关系表达式,运算符,表达式,功能,op1op2,比较,op1,是否大于,op2,op1=,op1=op2,比较,op1,是否大于等于,op2,=,op1 5,的值为,false,;,表达式,3,op1,按位右移,op2,位,op1op2,op1,按位左移,op2,位,op1,op1,添零右移,op2,位,op1op2,2.3,运算符与表达式,1,位逻辑运算符,”,按位与,”,运算符,例如,:,a 00000111,b 10101011,&_,c 00000011,结论:,按位与,只有一一为,1,。,2.3,运算符与表达式,“,按位或,”,运算符,例如:,a 00101010,b 00010111,|_,c 00111111,结论:,按位或,只有零,(0),零,(0),为,0,。,2.3,运算符与表达式,“,按位取反,”,运算符,例如:,a 00101010,_,c 11010101,结论:,对二进制数按位取反,即,0,变成,1,,,1,变成,0,。,2.3,运算符与表达式,“,按位异或,”,运算符,例如:,a 00101010,b 00010111,_,c 00111101,结论:,按位异或,只有零一或一零为,1,。,2.3,运算符与表达式,位运算符也可以操作逻辑型数据,当,a,、,b,都是,true,时,,a&b,是,true,,否则是,false,当,a,、,b,都是,false,时,,a|b,是,false,,否则是,false,当,a,是,true,时,,a,是,false,;当,a,是,false,时,,a,是,true,例如:,x,的初值是,1,(y=1)=0),(y=1)=0),2.3,运算符与表达式,2,移位运算符,右移运算符,用来将一个数的二进制位序列右移若干位。,例如:,a=00010001 a2=,00,000100,b=11101111 b2=,11,111011,结论:,右端的低位被舍弃,最高位则移入原来高位的值。,2.3,运算符与表达式,左移运算符,用来将一个数的二进制位序列左移若干位。,例如:,a=00010001 a2=010001,00,b=11101111 b,用来将一个数的各二进制位添零右移若干位,也称为无符号右移。,例如:,a=00010001 a2=,00000100,b=11101111 b2=,00111011,结论:,右端的低位被舍弃,最高位则永远加,0,。,2.3,运算符与表达式,赋值运算符与赋值表达式,赋值表达式的组成为:赋值运算符的左侧为一个变量,右侧为一个表达式。表达式的值的类型应与左侧的变量类型一致或者可以转换为左侧的变量类型。,1,赋值运算符,赋值运算符,“,=,”,用来把一个表达式的值赋给一个变量。,2.3,运算符与表达式,例如,:,byte b=12;,int i=b;/,自动类型转换,int a=13;,byte c=(byte)a;/,强制类型转换,int j=i+1;/,把表达式,i+1,的值赋给变量,j,2.3,运算符与表达式,2,扩展赋值运算符,在赋值运算符,“,=,”,前加上其他运算符,即构成了扩展赋值运算符。,例如:,a*=b-(a=6)/(b=2),包含以下三步运算,:,(,1,),a=6,b=2,,,a/b=3;,(,2,),b=b-a/b=-1;,(,3,),a=a*b=-6,2.3,运算符与表达式,2.3,运算符与表达式,运算符,表达式,等效表达式,+=,op1+=op2,op1=op1+op2,-=,op1-=op2,op1=op1-op2,*=,op1*=op2,op1=op1*op2,/=,op1/=op2,op1=op1/op2,%=,op1%=op2,op1=op1%op2,&=,op1&=op2,op1=op1&op2,|=,op1|=op2,op1=op1|op2,=,op1=op2,op1=op1op2,=,op1=op2,op1=op1op2,=,op1=op2,op1=op1=,op1=op2,op1=op1op2,条件运算符与条件表达式,条件运算符是三元运算符,用,“,?,”,和,“,:,”,表示。,class TernaryOp,public static void main(String args),int salary,daysPresent=30;,salary=daysPresent=20?2000:3000;,System.out.println(,您本月薪资为,$+salary);,2.3,运算符与表达式,true,false,条件,?,表达式,1 :,表达式,2,其他运算符,1,括号运算符,(),在,Java,语言中,括号运算符,(),的运算优先级最高,在表达式中使用时,用于改变运算符的运算顺序。,2,下标运算符,是数组下标运算符,定义数组时用于声明数组元素的个数;引用数组元素时用于提供数组的下标值。,2.3,运算符与表达式,3,对象运算符,instanceof,对象运算符,instanceof,用于测试一个指定的对象是否是指定类(或它的子类)的一个实例化的对象,若是则返回,true,,否则返回,false,。,例如:,String s=abcde;,boolean b=s instanceof String;,4,内存分配运算符,new,使用,new,运算符为数组和类分配内存空间。,2.3,运算符与表达式,运算符的优先级与结合性,优先顺序,运算符,结合性,1,(),2,+-!instanceof,右到左,3,new,左到右,4,*/%,左到右,5,+-,左到右,6,左到右,7,=,右到左,2.3,运算符与表达式,Java,中的程序控制语句分为,3,类,1,选择结构,2,循环结构,3,跳转语句,2.6,控制语句,选择语句,选择语句根据条件表达式值的不同选择执行不同的语句序列,其他与条件表达式值不匹配的语句序列则被跳过不执行。,选择语句分为:,条件语句,(if-else),多分支语句,(switch),2.4,控制语句,1,条件语句,if,语句,if(,条件,),statement;,或者,if(,条件,),block,2.4,控制语句,2.4,控制语句,例,2-3,使用,if,语句输出一个数的绝对值,if-else,语句,if(,条件,),statement1;,或,block1,else,statement2;,或,block2,2.4,控制语句,2.4,控制语句,有钱吗?,有,没有,else,子句不能单独作为语句使用,它必须和,if,子句配对使用。,if,和,else,后面的复合句里如果只有一个语句,,可以省略不写,但为了增强程序的可读性最好不要省略。,例,2-4,使用,if-else,表达式判断成绩,数学及格了,2.4,控制语句,if-else if,语句,if(,条件,1),statementl;,或,blockl,else if(,条件,2),statement2;,或,block2,else if(,条件,N),statementN;,或,blockN,else,statementN+1;,或,blockN+1,2.4,控制语句,if,与,else,的配对关系。,else,总是与它上面的最近的未配对的,if,配对。,例如:,if,(表达式,1,),if,(表达式,2,),语句,1,else,语句,2,if,(表达式,3,),语句,3,else,语句,4,2.4,控制语句,2,多分支语句,switch(expression),case valuel:statement1;,break;,case value2:statement2;,break;,case valueN:statementN;,break;,default:defaultStatement;,2.4,控制语句,switch,语句在使用时需要注意以下几点,:,表达式,expression,的值只能为,:int,、,byte,、,short,或,char,。多分支语句把表达式返回的值依次与每个,case,子句进行比较,如果遇到匹配的值,则执行该,case,子句后的语句序列。,case,子句中的值必须是常量,而且所有,case,子句中的值应是不同的。,2.4,控制语句,default,子句是任选的。当表达式的值与任一,case,子句中的值都不匹配时,程序执行,default,后面的语句;如果表达式的值与任一,case,子句中的值都不匹配且没有,default,子句,程序不作任何操作,直接跳出,switch,语句。,break,语句用来在执行完一个,case,分支后,使程序跳出,switch,结构,即终止,switch,语句的执行。,2.4,控制语句,例,2-5,使用,switch,语句判断成绩等级,2.4,控制语句,92,A,循环语句,1,不确定循环,while,循环,while(,termination,),body;,iteration;,2.4,控制语句,真,假,当条件表达式的值为,true,时,执行循环体中的语句,条件变为,false,时,退出循环;,在每一次新的循环开始前,都会重新检查条件表达式的值;,如果条件表达式值在开始时就是,false,,,while,循环体中的语句一次都不会执行。,2.4,控制语句,do-while,循环,do,body;,iteration;,while(,termination,);,2.4,控制语句,真,假,do-while,是在前一次循环结束的时候检查条件表达式的值,以决定是否进行下一次循环;,do-while,循环中的语句至少会被执行一次。,2.4,控制语句,2,确定循环,for(initialization;termination;iteration),body;,2.4,控制语句,for,循环执行时,首先执行初始化操作,(initialization),,然后判断终止条件,(termination),是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分,(iteration),。完成一次循环后,重新判断终止条件。,2.4,控制语句,可以在,for,循环的初始化部分声明一个变量,它的作用域为整个,for,循环。,for,循环通常用于循环次数确定的情况,但也可以根据循环结束条件完成循环次数不确定的情况。,2.4,控制语句,在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。例如,:,for(i=0,j=10;ij;i+),初始化、终止以及迭代部分都可以为空语句(但分号不能省略)。三者均为空的时候,相当于一个无限循环。例如,:,i=1;,for(;i=5;),2.4,控制语句,例,2-6,用,for,循环求,1000,之内的所有完全数,1000,之内的完全数为:,6,28,496,2.6,控制语句,跳转语句,1,break,语句,用在,switch,语句中,其作用是强制退出,switch,结构,执行,switch,结构后的语句;,用在单层循环结构的循环体中,其作用是强制退出循环结构,控制转移到循环体外下一个可执行语句;,2.4,控制语句,在两层循环嵌套的情况下,而,break,在内循环中,则执行,break,语句只能退出内循环,而不能退出外循环。,例,2-7break,语句的应用,2.4,控制语句,11,11,的最大真约数是,1,2,continue,语句,continue,语句用于结束本次循环,即跳过循环体中后面尚未执行的语句,执行下一次循环。,例,2-8continue,语句的应用,2.4,控制语句,3,return,语句,作用:从方法(子程序)中返回到它的调用者,带值返回:可以从方法中返回一个原来子类型的值,也可以返回一个实例,(,对象,),或数组。,不带值返回:,return,语句跳出当前的方法,并返回到调用者,但不带任何值。,例,2-9return,语句的应用,2.4,控制语句,我被执行!,数组是,Java,语言的一种引用类型,它是由类型相同的元素组成的有顺序的数据集合。,在一个数组中:,1,每个元素的数据类型都是相同的。,2,数组中的各个元素都是有顺序的。,3,所有元素共用一个数组名,利用数组名和数组下标来唯一地确定数组中每个元素的位置。,4,数组要经过声明、分配内存及赋值后,才能被使用。,2.5,数组,一维数组,一维数组的定义分为声明和为数组分配内存空间两步进行。,1,一维数组的声明,一维数组的一般声明方式为,:,type arrayName;,或者,type arrayName;,2.5,数组,包括基本数据类型和引用数据类型,合法的标识符,注意,:,在,里面什么都不能有,2,创建数组空间,arrayName=new typearraysize;,例如:,int a,;,a=new int20,;,也可以将声明与分配内存空间合成一条语句。,例如:,int a=new int20,;,2.5,数组,和,C,语言不同,,Java,允许使用,int,型变量指定数组的大小。例如:,int size=30;,double number=new doublesize;,一维数组在声明的时候,里面是什么都不能有的,但是在使用,new,运算符进行构造的时候,必须指明数组的长度,只有这样系统才能知道应该给这个数组分配多少内存。,2.5,数组,3,一维数组的初始化,当一个数组用,new,为数组分配内存后,自动用数据类型的缺省值初始化所有的数组元素。,类型,初始化值,char,u0000,int,0,long,0l,float,0.0f,double,0.0d,boolean,false,引用类型,null,2.5,数组,例如,:,int myArray=new int50;,另一种创建数组的方法是直接赋值,初值的个数就是数组的大小,初始值必须用大括号括住,用逗号作为分隔符。,int myArray=1,2,3,4,5,6;,2.5,数组,4,一维数组元素的引用,数组中元素的引用方式为,:,arrayNameindex,下标可以是整型常数或表达式。需要注意的是下标从,0,开始,一直到数组的长度减,1,。,表示一维数组长度的格式:数组名,.length,。,例如,:,int intArray=new int20;,int L=intArray.length;,2.5,数组,例,2-10,采用冒泡排序算法将,10,个整数按照从小到大的顺序排列,2.5,数组,数组排列前的顺序为:3,1,6,2,9,0,7,4,5,8,数组排列后的顺序为:,0,1,2,3,4,5,6,7,8,9,数组的数组,如果一个一维数组,它的每个元素又都是一个一维数组,就构成了一个二维数组。,1,数组声明,type arrayName;,或,type arrayName;,例如,:,int array2;,2.5,数组,2,创建数组空间,直接为每一维分配空间,例如:,a =new int23;,从最高维开始,分别为每一维分配空间,例如:,b =new int2;/,未分配内存空间,,/,还不能使用数组,b,b0=new int3;,b1=new int5;/,创建两个一维数组,2.5,数组,3,数组初始化,与一维数组相同,一个二维数组定义后,必须经过初始化才可以引用。,对由,new,操作符生成的数组元素自动初始化。,例如:,int a =new int23;,2.5,数组,例如:,strArray=new String23;/,正确的方法,strArray=new String2;/,正确的方法,最高维必须指定长度其余低维可不指定长度,strArray=new String 4;,不允许最高维不指定长度而其余低维指定长度,2.5,数组,定义数组的同时对数组初始化,例如,:,int myArr =1,2,3,4,5,6,7;,在,Java,语言中,从最高维至最低维分配空间。分配空间时当前最高维必须指定长度,其余低维可不指定长度;但不允许最高维不指定长度而其余低维指定长度。,2.5,数组,数组排序,可以使用循环实现对数组的排序,也可以使用循环查找一个数据是否在一个排序的数组中。除了前面介绍的冒泡排序算法外,,Arrays,类中定义的,sort,方法实现了对数组的快速排序。,例,2-11,二分查找数组中的元素,2.5,数组,第,3,章,Java,面向对象编程,类,2,static,和,this,关键字,4,面向对象基础,3,1,对象,3,3,访问权限,6,包,3,5,本章内容提要,面向对象的程序设计方法,力求符合人脑的思维方式,通过符合人类思维的更抽象的客观世界模型,降低、分解问题的难度和复杂性,并以此来解决问题。,与结构化的程序设计方法有何区别?,3,.,面向对象基础,面向对象的基本原理,面向对象方法学,是面向对象程序设计技术的理论基础。该理论的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与人类的认知过程同步,通过对人类认识客观世界及事物发展过程的抽象,建立规范的分析设计方法,由此使程序具有良好的封装性、可读性、可维护性、可重用性等一系列优点。,3,.,面向对象基础,面向对象的基本概念,1,对象,对象就是现实世界中实体在计算机逻辑中的映射和体现。,实体都具有一定的属性和行为。,从面向对象的观点来看,所有的面向对象的程序都是由对象构成的。,3,.,面向对象基础,2,类,类,就是具有相同或相似属性和行为的对象的抽象。,在面向对象的程序设计中,类与对象是抽象与具体的关系。,3,.,面向对象基础,3,属性,对象的属性主要用来描述对象的状态。,属性用变量来定义。,4,行为,对象的行为又称为对象的操作,主要描述对象内部的各种动态信息。,行为用方法来刻画。,3,.,面向对象基础,面向对象编程的特点,1,封装,封装,,就是将事物的内部实现细节隐藏起来,对外提供一致的公共的接口间接访问隐藏数据。,优点:使得,Java,程序具有良好的可维护性,使得代码的重用性大为提高,3,.,面向对象基础,2,继承,当一个类拥有另一个类的数据和操作时,就称这两个类具有继承关系。,被继承的类称为父类或超类,继承父类的类称为子类。,继承有单重继承和多重继承之分。,优点:使得面向对象的程序结构清晰,易于理解。,3,.,面向对象基础,3.,多态,多态,指多种表现形式,就是对象响应外部激励而使其形式发生改变的现象。,多态有两种情况:,一种是通过类之间继承导致的同名方法覆盖体现的,另一种是通过同一个类中同名方法的重载体现的。,优点:提高了程序的抽象程度和简洁性。,3,.,面向对象基础,1.,类的声明,class,类名,类体的内容,例如:,class Student /,定义类,Student,3,.,2,类,2.,类体,class,通常,,Java,中把成员变量放在方法前面定义。,3,.,2,类,成员变量,在类体中并且在方法之外定义的变量称为,成员变量,。,修饰符,变量类型 变量名;,例如:,Integer stuAge,;,int age=9,;,3,.,2,类,成员方法,1,方法定义,方法也由两部分组成,即,方法头和方法体,。,返回值类型 方法名,(,参数列表,),3,.,2,类,(,1,)方法修饰符,方法修饰符控制方法在什么条件下使用以及如何使用,包括,public,(公有的)、,private,(私有的)及,protected,(保护的)。,(,2,)返回值类型,返回值类型可以是基本数据类型、应用类型(引用类型)以及,void,(空类型)。,3,.,2,类,(,3,)方法名,(,4,)形参列表,形参列表是以,“,,,”,分开的、参数的数据类型和变量名的列表。,(,,,,,),3,.,2,类,2,方法体,方法的功能实现部分,主要由局部变量和语句构成。,方法体也可以是空的,即没有任何变量和语句。,例如:,void setName(String name),例,3-1,方法的定义,3,.,2,类,构造方法,(,1,)构造方法的方法名与类名相同。,(,2,)构造方法不允许声明返回值。,(,3,)构造方法的作用是完成对类对象的初始化。,(,4,)构造方法只能通过,new,运算符调用,不能通过,对象或类调用。,(,5,)一个类可以定义多个构造方法。,3,.,2,类,例,3-2,构造方法的定义,构造方法的作用:,(,1,)为每个新建的对象赋初始值,从而保证每一个新建的对象处于合理正常的状态。,(,2,)引入更多的灵活度,使得初始化工作不仅仅包括成员变量的赋值,还可以有更复杂的操作。,3,.,2,类,对象创建,1,声明对象,type objectname;,例如:,Student xiaolin;,3,.,3,对象,xiaolin,2,建立对象并初始化,实际上就是将一个类实例化,这是通过,new,关键字来完成的。,例如:,new Student(,小林,1001,12);,3,.,3,对象,小林,1001,12,对象引用被赋值后,将指
展开阅读全文