《java程序设计教程.ppt》由会员分享,可在线阅读,更多相关《java程序设计教程.ppt(148页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、J a v a 面向对象程序设计珊瑚老师qq487116923JAVA 学习交流群514167678程序设计例题珊瑚老师qq487116923珊瑚老师qq4871169231 编程序,打印数字金字塔(输出阶数可变)11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 11 2 3 4 5 6 5 4 3 2 11 2 3 4 5 6 7 8 7 6 5 4 3 2 1相关知识点珊瑚老师qq487116923Java程序的起点main方法Java基本输入输出打包及导入循环语句知识点1:main方法珊瑚老师qq487116923声明格式:public static
2、 void main(String args)注意事项:main方法必须属于一个类,不能独立存在于类外 java XXX 告诉编译器执行XXX类中的main方法 程序执行过程就是main方法执行的过程,main方法执行完最后一条语句,则程序退出 参数args:表示程序的执行参数知识点2 2:控制台的输入和输出程序想要与环境进行交互,必须包含输入输出操作:控制台方式标准输出设备(System.out)标准输入设备(System.in)图形界面方式控制台输出(3.17,P763.17,P76 )vJava使用System.out表示标准输出设备(默认为显示器控制台)println方法向标准输出设备
3、打印一行字符串print 方法向标准输出设备输出参数指定的字符串printf 方法向标准输出设备输出指定格式的字符串printf(String format,Object args)format:格式字符串args:实际参数值printf(“the sum of 1 and 2 is%d”,1+2);控制台输出(3.17,P763.17,P76 )%d,%md(十进制整数)%o(八进制整数)%x,%X(十六进制整数)%f,%m.nf,%-m.nf(浮点)%e,%E,(指数)%g,%G(由数值大小和精度决定输出格式)%s(字符串)%c(字符)%b,%B(布尔)控制台输出(3.17,P763.17
4、,P76 )控制台输入(2.3,P212.3,P21 )9vJava使用System.in表示标准输入设备,从标准输入设备(键盘)读入信息的方法:1.创建Scanner对象(java.util.Scanner)Scannerinput=newScanner(System.in);2.方法next(),nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble(),next-Boolean(),nextLine()分别获取String,byte,short,int,long,float,double,boolean 或一行
5、文本.RunRunComputerAreaWithConsoleInputComputeAverage知识点3:打包及导入v包(Package)是Java的程序组织方式,允许将不同的类组合成较小的单元便于查找和使用类文件有助于避免命名冲突在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突允许在更广的范围内进行信息隐藏保护类、数据和方法:可以在包内定义类,而在包外的代码不能访问该类(数据或方法)“包将类名空间划分为更加容易管理的块,包既是命名机制也是可见性控制机制”打包类(8.8,P226 8.8,P226 )v想将一个类放入包中,就必须
6、将包的名字放在源文件的开头,类定义代码前,语法:package 包名;package语句必须是程序的第一条语句如果源文件中没用package语句,该源文件会被放置在默认包中。(默认包是一个没有名字的包)package mypackage;public class Calculate 声明包类的导入(1.9,P14 1.9,P14 )v一个类可以使用其所属包中的所有类,以及其它包中的所有public类v访问其它包中的public类有两种方式:使用类的全路径名:java.util.Date date=new java.util.Date();使用import语句:import java.util.
7、Date;(明确导入)import java.util.*;(通配导入)只能导入一个包中的所有类,其子包中的类不会被导入静态导入vJDK5.0以来,import语句不但可以导入类,还可以导入静态方法和静态属性 import static java.lang.System.*;可以导入System类的所有静态方法和静态字段out.println(“hello”);知识点4:循环语句whiledo-whileforforeach程序设计例题2 编写程序,输入三个实数a,b,c,然后按递增顺序把它们输出相关知识点Java基础类型Java类型转换Java块判断语句知识点1:数据类型byteshorti
8、ntlongfloatdoublecharboolean数组枚举类接口原始数据类型引用数据类型整型数据 v整型数据简单来说就是整数,Java支持三种形式的整型常量的记法,分别是十进制、八进制和十六进制。十进制常数记法就是日常生活中用的整数的写法:如365,0,-29456。八进制常数记法只需要在前面加个0即可,如012表示十进制数10.十六进制数记法是开头加上0 x或者0X,如0 x12表示十进制数18。-0X10表示十进制数-16。整型数据(2.8,P25 2.8,P25 )v整型变量按所占存储空间的不同可分为四种不同的类型:byte 8位(1字节)short 16位(2字节)int 32位
9、(4字节)(默认)long 64位(8字节)(10L/10l)v注意C和C+中,数据类型的长度与机器相关,而Java中数据类型的长度固定。Java中没有unsigned类型浮点型数据(2.8,P252.8,P25 )v浮点数可以看成数学上的实数。根据浮点型数据存储位长的不同,可分为:单精度浮点数(float):32位(4字节)1.25f/1.25F双精度浮点数(double)64位(8字节)1.25(默认)数值数据类型表示范围字符型数据(2.13,P35 2.13,P35 )Java使用单引号来标记字符常量,如A、r就是普通的字符常量(Unicode表)。字符可分为普通字符和特殊字符。控制字符
10、就是一种特殊字符,是指回车、换行、制表等起控制作用的字符。特殊字符使用转义序列进行表示r 回车n 换行t 制表(Tab)、”字符型数据 与C/C+不同,Java字符类型数据使用 Unicode进行编码,所以Java字符类型数据占用16位(2字节)内存空间逻辑(布尔)类型(3.2,P55 3.2,P55 )布尔变量使用关键字boolean定义,用于保存一个逻辑结果布尔常量只有两个:true(真)和false(假)布尔类型值不能与整型相互转换 C/C+中,整数中的零值可以和false互相转化,非零值则对应着true。在Java中是不可以的 if(x=0)op1 else op2枚举类型如果某个变量
11、的取值只在一个集合之内,则可以使用枚举类型枚举类型的声明格式:enum Size SMALL,MEDIUM,LARGE,EXTRA_LARGE ;枚举类型的变量声明:Size s=Size.MEDIUM字符串(String)类型(2.15,P39)Java字符串就是一个Unicode字符序列,字符串直接量可以使用双引号括起的字符序列表示(“hello”)Java没有内置的字符串类型,但在标准Java库中提供了一个预定义的String类表示字符串类型每个用双引号括起来的字符串都是String类的一个实例 eg String s=“”;String greeting=“Hello”;字符串类型v字
12、符串拼接:“+”v检测字符串是否相等equals()方法检测两个字符串是否相等=则判断两个字符串是否存放在相同的位置知识点2 2:类型转换及类型提升2.11,P322.11,P32 运算符是否可以具有不同类型的操作数?如果两种类型兼容,则可以进行运算,运算时会自自动动将窄类型提升为宽类型(以数据表达范围为标准)boolean类型与其它类型是不兼容类型 byte、char和short类型是平级类型 byte、char和 short 型值可提升为 int 型 int可以提升到long型 long型可以提升到float型 float型可以自动提升为double型类型转换及类型提升对于表达式 所有by
13、te、short和char类型将被提升为int 一个操作数为 long 型,整个表达式提升为 long 型 一个操作数为 float 型,整个表达式提升为 float 型 一个操作数为 double 型,整个表达式提升为 double 型类型转换及类型提升自动转化规则类型强制转换v如果想要将宽类型值赋值给窄类型,则需要强制类型转换v强制类型转换使程序将变量视为某种类型,尽管此变量中包含的是另一类型的数据float c=34.89675f;float c=34.89675f;/将 c 转换为整型(截尾取整截尾取整)int b=(int)c+10;int b=(int)c+10;知识点3 3:Ja
14、vaJava块Java块(block)即复合语句,是指由一对花括号括起来的若干简单Java语句 类块 方法块 语句块 静态块块确定了变量的作用域方法块和语句块内声明变量的作用域由声明处开始,直到块结束JavaJava块块v块可以嵌套在另一块中,但不能在嵌套的两个块中声明同名的变量public void main(String args)int n;int n;int k;知识点4:判断语句单向if双向ifif-else嵌套switch语句if if语句例题:猜生日 通过询问朋友五个问题,猜出他出生于一个月的那一天GuessBirthday游戏的数学基础19 10011.7 111.23 111
15、0136switch-case switch-case 语句switch-case 语句可用于替换多选 if-else语句在表达式可以得出多个值的情况下,使用 switch-case 语句会带来更好的效果switch-case 语句的语法为:switch(表达式)case 值1:操作 1 的语句;break;case 值2:操作 2 的语句;break;.case 值n:操作 n 的语句;break;default:默认语句;表达式计算出的变量值只能是char,byte,short,或 int 类型 常量表达式,并且和表达式计算出的值类型相同 break语句和default语句都不是必须的sw
16、itch-case switch-case 语句语句这个结构的执行过程为:(1)求出switch括号内变量的值(2)将其值顺序地和n1、n2、n3 比较,如果变量值和某个n值相等,程序就转到这个ni后面的语句开始执行,遇到break语句则跳出整个switch语句(3)如果变量值和任何n值都不等,则执行default后面的语句,最后跳出switch结构(4)default 子句可有可无static int daysInMonth(int month)int days;switch(month)case 2:days=28;break;case 4:case 6:case 9:case 11:da
17、ys=30;break;default:days=31;return(days);获取各个月份的天数:程序设计例题3.打印n阶杨辉三角形相关知识点数组 一维数组 多维数组知识点1:数组在Java程序中,数组具有下列特点:同一数组中的所有元素均属于相同的数据类型相同的数据类型,该数据类型称为数组的基本元素类型基本元素类型。数组一经创建,其元素个数就保持不变元素个数就保持不变,这个长度称为数组的长度(长度(lengthlength)。数组中的每一个元素均能借助于下标借助于下标(index)来访问。数组元素的类型既可以是基本类型(如int,float等),也可以是复合类型(如String,Objec
18、t,甚至数组类型),从而可以产生对象数组、多维数组。一维数组声明(6.2.1,P1586.2.1,P158)F在Java语言中,一维数组变量声明方式声明方式如下:type arrayName;其中:type表示数组元素的类型,可以是8种基本数据类型之一,也可以是引用类型“”用于表明定义的是一个数组 arrayName就是所要声明的数组变量的名字一维数组定义/创建(6.2.2,P1586.2.2,P158)F在Java中,数组的创建必须使用“new”操作符,创建一维数组的语法格式如下:arrayName=new elementTypeARRAY_SIZE;其中:arrayName为已经声明的一维
19、数组变量名elementType为数组的基类型,它必须是声明array Name时指定的数组基类型或其子类型ARRAY_SIZE为整数类型,它指定了数组的长度数组一旦创建,其长度就不能改变。数组长度(6.2.3,P1596.2.3,P159)每个数组对象都有一个名为length的属性保存数组的元素个数 arrayName.length一维数组初始化(6.2.3,P1596.2.3,P159)v创建数组后,如果没有对数组元素进行初始化,则数组元素被赋值为对应于该元素类型的默认值:数值类型数组中元素的默认值是0字符类型数组元素默认值为u0000布尔类型数组元素默认值为false对象数组中元素的默认
20、值是对象数组中元素的默认值是null一维数组初始化(6.2.5,P1606.2.5,P160)F对于一维数组可采用如下方法进行初始化:方法一:遍历数组元素进行初始化:int array =new int10;for(int i=0;i array.length;i+)arrayi=someValue;方法二:采用数组初始化列表进行数组创建和初始化,初始化列表中元素的数目就是数组的长度 boolean bArray =false,true,true,false;int iArray=0,1,2;一维数组元素引用(6.2.4,P1596.2.4,P159)F对数组的元素的访问可以通过下标进行:ar
21、rayNameindex;F其中:arrayName是声明的数组名index是一个整型数值,用于表示要访问的元素下标(注意下标取值范围应该小于 arrayName.length,0,length))数组的处理v数组处理经常使用for循环(类型相同,次数固定类型相同,次数固定)for(int i=0;iarray.length;i+)/arrayi相关操作v也可以使用foreach循环for(type var:array)/var相关操作 一般用于数组不变的情况下foreachforeach循环(6.2.7,P1616.2.7,P161 )for eachfor each循环用来依次处理数组或集
22、合中的每个元素而不必为指定下标而分心 for(variable:集合)循环体 语法 int a=2,3,3,4;for(int e:a)System.out.println(e);示例F编写一个选择排序演示程序,该程序将一个一维整型数组按从小到大的顺序排序后输出 算法思想:假设待排序数组长度为n,则进行如下操作:第一次从数组里面找出最小的元素,放在第一个元素(下标为0)的位置;第二次从剩下的元素里面找出最小的元素,放在第二个元素(下标为1)的位置,依此类推,共执行n趟。/使用选择排序算法进行排序for(int i=0;i array.length;i+)for(int j=i+1;j arra
23、y.length;j+)if(arrayj arrayi)/交换arrayj 与 arrayi的值int temp=arrayj;arrayj=arrayi;arrayi=temp;数组的复制数组的复制(6.5,P1666.5,P166 )v数组复制就是将一个数组的内容拷贝到另一个数组中,复制后应该有两个一模一样的数组:int source=1,2,3,4,5int target=source;/?数组的复制数组的复制v数组复制有三种方法:a.利用循环语句逐个拷贝数组的每个元素int source=1,2,3,4,5int target=new intsource.length;for(int
24、 i=0;isource.length;+i)targeti=sourcei;数组的复制数组的复制b.System类的静态方法arraycopy:arraycopy(sourceArray,src_pos,targetArray,target_pos,length);sourceArray:源数组 src_pos:源数组复制起始位置 targetArray:目标数组 target_pos:目标数组存放起始位置 length:复制元素个数 eg:System.arraycopy(s,0,t,0,s.length);数组的复制数组的复制c.使用使用clone方法方法 int source=1,2,
25、3,4,5;int target=source.clone();注:注:调用clone方法要求数组的基本元素类型实现 Cloneable接口多维数组多维数组F多维数组就是数组的数组,其数组基类型还是一个数组类型F如果一个数组的基类型是一维数组则该数组称为二维数组,如果一个数组的基类型为二维数组则该数组为三维数组,依此类推。F在多维数组中访问一个元素要用到不止一个数组下标。多维数组多维数组多维数组的声明 elementType arrayName;同样的,定义三维数组的语法格式为:elementType arrayName;一般把多维数组各维自左向右依次称为第一维,第二维多维数组多维数组F创建多
26、维数组也要用到new运算符:arrayName=new elementType DIMENSION_1_SIZEDIMENSION_2_SIZE;其中:arrayName为二维数组的名字;elementType为数组的基类型,必须是声明 arrayName时指定的数组元素类型或其子类型;DIMENSION_1_SIZE和DIMENSION_2_SIZE分别指明数组各维的长度。多维数组多维数组 一种简单的声明、创建并初始化二维数组的方法:60int array=new int43;array00=1;array01=2;array02=3;array10=4;array11=5;array12=
27、6;array20=7;array21=8;array22=9;array30=10;array31=11;array32=12;int array=1,2,3,4,5,6,7,8,9,10,11,12;等价于多维数组多维数组多维数组元素的访问:arrayNamed1_indexd2_indexdn_index;其中:arrayName为数组名字;n为数组的维数;d1_index、d2_index、dn_index均为整型变量,代表所要访问的元素在各维中的下标。多维数组多维数组多维数组的长度:int x=new int34;62多维数组多维数组v锯齿形数组Java二维数组实际上数组的数组,作为
28、数组基类型的数组可以是不同长度的多维数组多维数组v二维数组的处理:一般情况下使用二重for循环处理二维数组 for(int i=0;ia.length;+i)for(int j=0;j num2)为真animation方法追踪result赋值为5animation方法追踪返回result,5animation方法追踪return max(i,j)返回,并把返回值赋值给kanimation方法追踪执行打印语句animation方法调用栈栈追踪i 变量声明并初始化animation栈追踪j 变量声明及初始化animation栈追踪声明变量kanimation栈追踪调用 max(i,j)animat
29、ion栈追踪将i和j的值分别传递给num1 和 num2animation栈追踪声明变量resultanimation栈追踪(num1 num2)为真animation栈追踪将num1 赋值给resultanimation栈追踪返回结果并赋值给kanimation栈追踪执行打印语句animation参数传递(重点理解)参数顺序匹配调用方法时,需要提供实参,实参的次序必须与方法声明中形参的次序相同值传递 对于直接量(8种基本数据类型)值拷贝 对于引用变量拷贝引用变量的值(地址)按值传递136例1:Increment例2:TestPassByValuevv数组传递是按值传递的,但“值”指的是引用的
30、值,而不是数组的值publicclassTestpublicclassTestpublicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs)intx=1;/xintx=1;/x引用一个引用一个intint值值inty=newint10;/yinty=newint10;/y引用一个引用一个intint数组值数组值 m(x,y);/m(x,y);/使用使用x,yx,y作为实参调用函数作为实参调用函数m m publicstaticvoidm(intnumber,intnumbers)publicstaticvoidm(intnumb
31、er,intnumbers)number=1001;/number=1001;/向向numbernumber赋一个新值赋一个新值numbers0=5555;/numbers0=5555;/向向numbers0numbers0附一个新值附一个新值 140vv示例目的:展示使用基础数据类型变量和数组变量传递参数的不同TestPassArrayRun1416.2.7 数组参数方法重载(Overload)在一个类中有两个或多个方法,这些方法具有相同的方法名,但参数列表不同,这些方法被称为重载方法重载的方法必须具有不同的签名(即参数列表必须不同),不能基于修饰符或返回值重载方法调用重载方法时会出现歧义调
32、用,这时会产生一个编译错误TestMethodOverloading变量作用域变量的作用域:指变量可以在程序中引用的范围 局部变量的作用域从变量声明的地方开始,直到包含该变量的块结束为止。局部变量在使用前必须声明和初始化。形式参数也是一个局部变量,其作用域是整个方法 for循环初始化动作部分定义的变量的作用域是整个for循环 非嵌套块可以定义同名变量,嵌套块则不可以可变长参数列表vJava支持将类型相同,个数可变的参数传递给方法语法:typename parameterName v编写程序,实现任意个整数的加法 int add(int numbers)int sum;for(int i=0;inumbers.length;+i)sum+=i;return sum;注:可变参数实际上就是一个一维数组八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法迭代法迭代是通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的数学过程,为实现这一过程所使用的方法统称为迭代法迭代用迭代法求某数f的平方根。已知求平方根的迭代公式为:x n+1=(xn+f/xn)/2要求前后两次求出的差的绝对值小于10-5