Java程序设计.ppt
,第1章Java语言基础,1.1计算机编程语言,计算机语言可以分为3大类:机器语言、汇编语言和高级语言。机器语言由二进制代码(0或1)串组成,并且是唯一能被CUP直接“理解”的语言。,汇编语言是利用指令助记符来代表机器语言指令进行程序设计的语言,这些助记符因机器类型、型号而异。,由于程序员编写的程序不能直接被机器“理解”,需要通过汇编语言软件翻译成机器语言表示的目标程序,再通过连接形成可执行程序,才能在计算机中执行。,由于汇编语言是面向机器的,即为特定的处理器而设计的,因此对于不同的机器要重新编码,同时使用汇编语言编写的程序即使完成一个简单的任务也需要多条指令。,高级语言采用类似自然英语及数学符号来书写语句,组成程序。高级语言是面向用户的语言,使用一条简单的高级语言语句就可以完成由许多条汇编语句才能完成的任务。,高级语言编写的程序同样不能直接被机器“理解”,需要将其转化为机器语言,这是通过执行称为“编译器”的编译程序实现的。,高级语言比机器语言和汇编语言都更易学、易用和易于理解,同时提供了大量的帮助文档。高级语言编写的程序更易于维护,不受某一机器类型的限制,几乎可以不加修改地用于不同计算机。,高级语言程序的翻译和执行方法可归类为两大基本技术:编译执行和解释执行。,像C或者C+这类编译语言写出来的程序,通过编译程序处理后,其目标语言是与之相对应的机器语言,它们能被独立地执行。,像BASIC这种解释语言编写的程序,通过解释程序所处理的翻译和执行过程通常是交替执行的,源程序某一部分所生成的代码在其产生时就被执行。Java语言是解释执行的高级编程语言。,1.2Java语言发展,Java语言诞生于20世纪90年代初期,适用于在Internet环境下编写各种网络应用程序,并且具有平台无关性等特点,现已迅速发展成为最受欢迎的计算机网络编程语言之一。,Java语言是面向对象的程序设计语言,它是解释执行的,能跨平台使用,具有较高的性能和高度的安全性,并且支持多线程,具有内存垃圾自动收集机制。,最早的Java版本JDK1.0于1996年正式推出,经不断改进和升级后,发布了JDK1.1、JDK1.1.5等版本。,1999年升级为1.2版,并改称为Java 2。2000年发布了Java 2的1.3版本。2002年发布了Java 2的1.4版本。,这些升级的版本使Java程序运行更快、多媒体功能更强,并扩充了对网络的支持和对XML的处理。,随着Java技术的不断发展,它根据市场进一步细分为以下3个版本:针对企业级e-Business架构和Web服务开发与应用的平台J2EE(Java 2 Enterprise Edition);针对普通PC应用的Java开发平台J2SE(Java 2 Standard Edition);针对嵌入式设备及消费类电器(如手机、智能卡等)的开发平台J2ME(Java 2 Micro Edition)。,1.3Java程序的开发和运行环境,本书使用的是针对普通PC应用的Java开发平台J2SE,其全称是“Java 2 Software Development Kit,Standard Edition”,它是Java 2开发的标准版,简称j2sdk。,随着Java技术的发展,它不断升级为新的版本,如j2sdk1.4、j2sdk1.5等。本书所讲程序都是在Windows操作系统下实现的,使用的是基于Windows下的j2sdk,具体版本名称是jdk-1_5_0-windows-i586.exe。,j2sdk是基于命令行(DOS界面)的开发环境,在该环境下需要打开DOS界面编译和运行程序。,许多公司提供了付费的、更方便的图形界面下的Java集成开发环境,有兴趣的读者可参考相关书籍来了解和熟悉它们的使用。,1.4能够运行的两类Java程序,1.4.1Java Application的编译和运行,例1.1一个简单的Java应用程序:App1.java。/*这是一个最简单的Java应用程序,其功能是在DOS界面输出字符串:Hello,World!。通过该程序来演示Java应用程序的编译和运行。*/,1:public class App1 2:public static void main(String args)3:System.out.println(Hello,World!);/输出字符串:Hello,World!4:5:,图1-1所示为App1.java的编译和运行结果。,图1-1例1.1的编译和运行结果,1源程序的编写与保存2如何编译源程序3如何运行程序,4源程序的解释说明(1)定义类 Java程序是由类(class)构成的,用关键字class来定义一个新的类,关键字都是小写的,如果用Class定义一个新的类,程序编译时将出错。,Java中类的最简单的定义格式如下:类的修饰符 class 类名 构成类的实体的各种代码,(2)定义类中的方法和main方法的说明定义一个方法的基本格式如下:方法的修饰符 返回值类型 方法名字(方法所接收的参数类型 参数名称)实现方法功能的代码;,每一个Java应用程序都要有一个如下所示的main方法:public static void main(String args),(3)方法调用System.out.println的说明 定义方法:方法定义的基本格式为:方法的修饰符 返回值类型 方法名字(方法所接收的参数类型 参数名称)实现方法功能的代码,调用方法 main方法 命令行输出结果的方法 字符串,(4)程序中的注释 单行注释 多行注释 文档注释,5应用程序的基本框架 public class App1 public static void main(String args)/在这里添加要执行的程序代码。,1.4.2Java Applet的编译和运行例1.2一个简单的Java小应用程序:App2.java。,1:import java.awt.Graphics;2:import java.applet.Applet;3:public class App2 extends Applet 4:5:int x,y;6:7:public void init()8:x=8;9:y=7;10:11:12:public void paint(Graphics g)13:g.drawString(类中定义了两个变量:x=8 y=7,50,60);,14:g.drawString(它们的和为:+(x+y),50,80);15:g.drawString(它们的差为:+(x-y),50,100);16:17:,1编写和编译源程序,2如何运行Java小程序(1)编写嵌入Java小程序字节码文件的HTML文档,其最基本的形式为:,(2)Java小程序的运行,3源程序的解释说明(1)类的继承定义类A的子类B的格式如下:类的修饰符 class B extends A 构成类的实体的各种代码,(2)包和包中类的导入通常是在源文件的开始部分使用关键字import,后跟包名和句点隔开的类名导入它们,并以分号结尾,称为import语句:import 包名.类名;,下面的一行代码把包中的全部内容导入:import 包名.*;,(3)变量声明语句和赋值语句赋值语句中的左边是变量名,右边是一个对应类型的值,等号“=”的作用是把右边的值赋给左边的变量。,变量的声明包括3个部分:修饰符,后跟类型和变量名列表。变量声明的格式如下:修饰符 类型 变量名列表=对应类型的值;,(4)Java小程序的init方法和paint方法,(5)drawString方法的调用和实现的功能 Graphics类 对象 通过句点调用方法 类对象名.方法名(实际参数),(6)源程序编码格式的说明(7)Java小程序的程序框架,Java小程序的基本框架为:import java.applet.Applet;import java.awt.Graphics;public class Applet1 extends Applet 变量定义;public void init()/初始化方法。.;public void paint(Graphics g)/小程序显示结果的方法。.;其他方法定义。,1.5程序中的关键字、标识符和分隔符,1.5.1Java语言的关键字1用于包的关键字 import package,2用于类、方法和变量的修饰符 abstract class extends final implements interface,native new static synchronized transient:指明变量不被串行化 volatile,3用于类、变量和方法的访问控制 private protected public,4用于基本数据类型 boolean byte char double float int long short,5用于控制代码块的流程 break case continue default do else,for if instanceof return switch while,6用于方法无返回值void,7用于引用类型 this super,8用于异常处理 catch finally throw throws try,9未使用的保留字 const goto,1.5.2Java语言的标识符和命名约定简单地说,标识符就是类、变量和方法的名字。,自定义的包名、类名、变量名或类对象名只要不违反Java语言标识符命名规则,可以任意指定其名字。,Java中有以下6种不同的命名。包名字;类型名字,即类名;域名:类中定义的变量称为域,也可简单地称为变量,它在整个类中是可见的;方法名字;,局部变量:方法的参数、方法体中声明的变量和其他程序块中声明的变量都是局部变量,局部变量只在它所在的程序块中可见。标号:在多层循环中用来标识循环的层次。,1Java语言标识符命名规则标识符必须由字母、下画线_、美元符号$和数字09组成的字符序列表示,且不能以数字开头,不能有除此之外的其他字符,如空格符、%、+、&、#等。,这里所说的字母含义较广,包括中文、日文、阿拉伯文字等各种语言的字符都可用来命名,但建议程序中命名使用英文字母开始的字母数字串。,名字不能以数字开头,例如1a、234b是不合法的名字。,不能用关键字命名,但关键字可以作为名字的一部分,例如用classa或classb命名一个类是可以的。,名字中的任何差别都表明它们的不同,包括字母的大小写,Java严格区分大小写。例如classa和Classa就是不同的名字。,2Java中命名的一些约定 包名:用小写英文单词表示,例如java.applet;,类名和接口名:通常是名词,用一个或几个英文单词表示,第一个字母和名字内的其他所有单词的第一个字母大写,例如String、Graphics、Color、FileInputStream等。,方法名:通常是动词,第一个字母小写,如果有其他单词,则每个单词的第一个字母大写,例如main()、println()、drawString()、setColor()、parseInt()等。,变量名或类的对象名:与方法的大小写规则一样。,常量名:声明为public static final,字母全部用大写,单词与单词之间用下画线隔开,例如PI、MAX_VALUE、MIN_VALUE等。,1.5.3Java程序中的分隔符和基本的编码格式1空白符空白符包括空格、制表符(Tab键)及空行等。,2花括号类体、方法体、多条语句构成的复合语句等都放在一对花括号“”中。,3分号每一个语句以分号结尾。,4逗号逗号用于分隔方法的多个参数,或用于多个同类型的变量同时声明时起分隔作用等。,5冒号用于标号后面、switch语句中的case子句。,1.6Java语言的基本数据类型和变量定义,基本数据类型 类 数组类型 接口类型,表1-1 Java语言的基本数据类型,续表,1.6.1逻辑类型1逻辑常量逻辑类型的常量仅有两个值:true 和 false,分别表示“真”和“假”。,Java语言中,布尔常量不能转换成任何数据类型,true常量不等于1,false常量也不等于0。,2定义逻辑变量使用关键字boolean定义逻辑变量。,1.6.2字符类型1字符常量Java中的字符是Unicode字符,其编码值是065 535之间的整数。字符常量有以下几种表示。,放在两个单引号里的单个字符,例如:a、1等。,以反斜杠开始的转义序列,表示一些特殊的字符,如回车符n、退格符b等。表1-2给出了Java中的常用转义字符。,使用Unicode编码值表示的字符:uxxxx,这里xxxx是4位16进制的数。例如u0022和都可表示双引号。,2定义字符变量使用关键字char定义字符变量。,例1.3下面的应用程序演示了字符变量的定义,并在命令行输出它们。(1)源程序,1:public class DefineChar 2:public static void main(String args)3:char c1=65,c2=A;4:char c3=n,c4=u0022,c5=;5:System.out.print(c1=+c1+tc2=+c26:+c3+c4=+c4+tc5=+c5);7:8:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-7所示的结果。,图1-7例1.3程序的运行结果,(3)程序解释程序第3行定义字符变量c1和c2,它们的取值都是字符A(65是其编码值)。,第4行定义字符字符变量c3(回车符)、字符变量c4和c5,它们的取值都是双引号(u0022是双引号字符的Unicode编码值)。,第5、6行是分两行写的输出语句。语句中的加号起连接作用。第6行的c3表示换行,因此结果输出在两行上。,1.6.3整数类型Java中的整数类型根据其表示数的范围不同可分为四种类型。,字节型:关键字byte,8位。短整型:关键字short,16位。整型:关键字int,32位。长整型:关键字long,64位。,1整型常量2定义整型变量,1.6.4小数类型Java中的小数类型也称为浮点类型,根据其表示的范围大小不同可分为两种。单精度浮点型:关键字float,32位。双精度浮点型:关键字double,64位。,1浮点常量2定义浮点变量,例1.4下面的应用程序演示了整型变量和小数类型变量的定义,并在命令行输出它们。(1)源程序,1:public class DefineNum 2:public static void main(String args)3:byte x1=127;4:int x2=12345;5:long x3=123456789L;6:float x4=1.23e-5f;7:double x5=1.4567e3;8:System.out.print(x1=+x1+x2=+x2+x3=+x39:+x4=+x4+x5=+x5);10:11:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-8所示的结果。,图1-8例1.4程序的运行结果,(3)程序解释程序第3行定义byte类型变量x1,并用整型常量127对它赋值,注意赋值时不能超出byte类型的取值范围。,第5行定义long类型变量并赋值为123456789L。,第6行定义float类型变量并赋值,注意赋值时小数常量要跟后缀f。,第8、9行是一个输出语句,输出程序中定义的各变量的值。,1.6.5变量定义和变量的作用范围1变量定义变量的声明包括三个部分:修饰符,后跟类型和变量名。变量声明的格式如下:修饰符 数据类型 变量名=初值;,2变量的作用范围变量可以在类、方法和任何其他由一对花括号组成的代码块中定义,因此变量有其作用范围。,例1.5下面的应用程序演示了变量的作用范围。(1)源程序,1:public class VarRange 2:public static void main(String args)3:int x=8;4:5:int y=9;6:System.out.println(x=+x);7:System.out.println(y=+y);8:9:/System.out.println(x+y);10:11:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-9所示的结果。,图1-9例1.5程序的运行结果,(3)程序解释程序第3行main方法中的变量,在整个方法体中都可以使用。,第4行第8行是main方法的一个语句块,第5行定义了该语句块中的变量y。,第9行的语句被注释掉了,如果去掉双斜杠后,编译该程序出现编译错误,因为第9行的输出语句中试图使用第4行第8行的语句块中定义的变量y。,1.6.6基本数据类型的相互转换(1)自动转换(2)强制转换,强制转换的格式为:(要转换的类型)待转换的值 下面从左向右的数据类型转换,Java系统将自动完成:反过来,必须强制类型转换。,1.7运算符和表达式及语句,1.7.1运算符和表达式 运算符:表示各种不同运算的符号就是运算符。如上面的+就是一个运算符,用来把两个整数x和y相加;=是赋值运算符,表示把左边的值赋给右边的变量。,操作数:由运算符连接的参与运算操作的数据称为操作数,如x+y中的x和y就是操作数。,表达式:由运算符把操作数(可以是变量、常量等)连接成的一个有意义的式子就是一个表达式,如x+y就是一个表达式;z=x+y是一个赋值表达式。,1算术运算符,表1-3 算术运算符及其功能,2自增、自减运算符自增运算符+和自减运算符 是单目运算符,其操作数只能是数字型变量,不能是常量或带有运算符的表达式。+和 运算符可放在变量操作数前,也可放在变量操作数后,功能是对变量增1和减1。,3关系运算符,表1-4关系运算符,例1.6如果把一个数的各位数字逆序后,得到的数与该数本身相等,则该数是一个回文数。例如整数828逆序后还是828,故它是回文数;整数123逆序后是321,故123不是回文数。编写应用程序,对程序中给定的一个3位整数判断它是否是回文数。,(1)源程序1:public class PalindromeNum 2:public static void main(String args)3:int x=181;/定义一个三位整数x4:int a,c;/分别表示整数x的个、百位上的数字5:c=x/100;/求x的百位数字,6:a=x%10;/求x的个位数字7:if(a=c)/如果百位数字和个位数字相等,则x是回文数8:System.out.println(x+是回文数。);9:else/否则,x不是回文数10:System.out.println(x+不是回文数。);11:12:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-10所示的结果。,图1-10例1.6程序的运行结果,(3)程序解释对于一个三位数,如果个位和百位的数字相等,则逆序后的数与原数相等,是回文数。,程序第7行第10行是一个ifelse条件语句(将在本章1.8节中讲解):如果a(个位数字)和c(百位数字)相等,即if语句的条件为true,则执行第8行的输出语句;如果if语句的条件为false则执行else后面第10行的输出语句。,例如把程序中第3行的x值改为123,程序运行后输出“123不是回文数。”。,4逻辑运算符,表1-5 逻辑运算符的运算规则,逻辑与(&)逻辑或(|)逻辑非(!)简捷与(&)简捷或(|),5位运算符 按位与(&)按位或(|)按位异或()按位求反(),6三目条件运算符三目条件运算符的一般形式为:?:,例1.7本例与例1.6中的程序功能一样,但用三目条件运算符替代了ifelse语句。(1)源程序,1:public class PalindromeNum1 2:public static void main(String args)3:int x=181;/定义一个三位整数x4:int a,c;/分别表示整数x的个、百位上的数字5:c=x/100;/求x的百位数字6:a=x%10;/求x的个位数字7:String s=(a=c)?(x+是回文数。):(x+不是回文数。);8:System.out.println(s);9:10:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-11所示的结果。,图1-11例1.7程序的运行结果,(3)程序解释程序第7行中的表达式a=c的结果为true,故把问号“?”后面的第一个表达式的值赋给字符串变量s。,7赋值运算符基本赋值运算符的使用形式是:变量名 表达式;扩展赋值运算符的使用形式是:变量名 运算符表达式;,8其他运算符 括号运算符:()方括号运算符:内存分配运算符:new 域选择运算符,9运算符的优先级和结合规则(1)表达式的类型和表达式类型的自动提升(2)运算符的优先级(3)运算符的结合规则,表1-6 Java语言运算符优先级和结合规则,1.7.2语句1表达式语句2复合语句3控制语句,4import语句和package语句 import语句 import 包名.类名;或 import 包名.*;,package语句package 包名;,1.8分支和循环语句,1.8.1分支语句1ifelse语句,if语句的一般形式:if(逻辑表达式)语句序列1;else 语句序列2;,图1-12if语句的执行流程,例1.8编写应用程序,程序中给定3个整数,判断它们能否构成三角形的3条边长(注:三角形的任意两边之和大于第3边)。(1)源程序,1:public class IfTriangle 2:public static void main(String args)3:int n1=12,n2=10,n3=22;/定义3个整数,代表三角形的3条边4:if(n1+n2n3 8:9:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-13所示的结果。,图1-13例1.8程序的运行结果,(3)程序解释程序第4行if语句中的条件(n1+n2n3&n2+n3n1&n3+n1n2)中,逻辑与(&)连接的3个逻辑表达式同时成立时,结果才为true,即三角形的任意两边之和大于第3边,这是3个整数能构成三角形的3条边的条件。,此外,还有以下两种形式的if语句。只有if语句,没有else语句:if(逻辑表达式)语句序列1;,多个ifelse的嵌套,构成一系列检查,根据条件从多个分支中选择其一执行:,if(逻辑表达式1)语句序列1;else if(逻辑表达式2)语句序列2;else 语句序列n;,2switch语句switch语句的基本形式如下:,switch(整型表达式)case 整型常量值1:语句序列1;break;case 整型常量值2:语句序列2;break;,.case 整型常量值n:语句序列n;break;default:语句序列;,例1.9编写应用程序,程序中定义两个整型变量、一个字符变量(其值为字符+、*或/),使用switch多分支语句根据字符变量的值进行两个整数的加、减、乘或除运算并输出结果。(1)源程序,1:public class UseSwitch 2:public static void main(String args)3:int x=6,y=8;4:char ch=/;5:6:switch(ch)7:case+:8:System.out.println(x+y+=+(x+y);,9:break;10:case-:11:System.out.println(x+-+y+=+(x-y);12:break;13:case*:14:System.out.println(x+*+y+=+(x*y);15:break;16:case/:,17:System.out.println(x+/+y+=+(x/y);18:break;19:default:20:System.out.println(不能进行这种运算);21:22:23:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-14所示的结果。,图1-14例1.9程序的运行结果,(3)程序解释程序第6行第21行是switch语句块,由于ch的值是字符/,查找switch块中匹配的case是程序的第16行,因此程序执行第17行,输出结果,然后执行第18行的break语句,跳出switch块的执行。,1.8.2循环语句1while语句while循环的形式如下:while(逻辑表达式)语句序列;/循环体,2dowhile语句dowhile循环的形式如下:do 语句序列;/循环体 while(逻辑表达式);,例1.10编写应用程序,分别使用while循环和dowhile循环求110 000的自然数的和并输出结果。(1)源程序,1:public class FindSum 2:public static void main(String args)3:int i=1,sum=0;4:while(i=10000)5:sum+=i;6:i+;7:8:System.out.println(sum=+sum);9:,10:i=1;11:sum=0;12:do13:sum+=i;14:i+;15:while(i=10000);16:System.out.println(sum=+sum);17:18:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-15所示的结果。,图1-15例1.10程序的运行结果,(3)程序解释程序第3行定义循环变量i并赋初值为1,给变量sum赋初值为0。,第4行第7行的while循环的循环体中,第6行把循环变量每次加1,故循环将执行10 000次后,才退出循环。,每次循环都把本轮循环的i值加到sum中,循环结束后就求出了1+2+3+10 000的结果。,第10行、第11行把循环变量i的初值重置为1,把sum的初值重置为0。,第12行第15行的dowhile循环的执行过程与while类似,只是先执行一次循环体后,再判断循环条件,根据循环条件决定是否再执行循环体。,3for语句for循环的形式如下:for(表达式1;表达式2;表达式3)语句序列;/循环体,例1.11编写应用程序,使用for循环求110 000的自然数的和并输出结果。(1)源程序,1:public class FindSum1 2:public static void main(String args)3:int i,sum=0;4:for(i=1;i=10000;i+)5:sum+=i;6:7:System.out.println(sum=+sum);8:9:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-16所示的结果。,图1-16例1.11程序的运行结果,(3)程序解释程序第3行定义循环变量i,并把和sum赋初值为0。,第4行第6行的是for循环。每次循环都把本轮循环的i值加到sum中,循环结束后就求出了1+2+3+10 000的结果。,1.8.3break语句和continue语句1break语句在switch语句中,使用break语句可以跳出switch块的执行,使控制权转移到switch语句块后。,break语句也可以用在循环结构中,跳出它所在的循环,并从该循环的后继语句开始继续执行。,2continue语句continue语句用在循环结构中。如果某次循环过程中,执行了continue语句,则跳过本轮循环的剩余语句,进入循环的下一轮。,例1.12编写应用程序,使用for循环求110 000所有奇数的和,并输出结果。(1)源程序,1:public class FindSum2 2:public static void main(String args)3:int i,sum=0;4:for(i=1;i=10000;i+)5:if(i%2=0)6:continue;7:sum+=i;8:9:System.out.println(sum=+sum);10:11:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-17所示的结果。,图1-17例1.12程序的运行结果,(3)程序解释程序第5行、第6行的含义是:如果i是偶数,则执行第6行的continue语句,跳过第7行求和语句的执行,而执行for中的第3个表达式i+。因此,for循环所求的是110 000所有奇数的和。,1.9方法定义和使用,1.9.1定义类中的方法Java中的方法定义形式如下:修饰符 返回值类型 方法名称(参数列表)/方法体,1方法头 修饰符:可以是public、protected、private、final、static等,其含义将在后面的章节说明。,返回值类型:根据方法执行后要返回的结果的类型来指明方法头定义的返回值类型,可以是各种基本数据类型、数组、类。如果方法没有返回值,则要指定为void类型。,方法名称:由程序员自己定义的符合Java命名规范的标识符。,参数列表:声明方法接收的变量类型,有多个变量声明时,用逗号隔开它们。通常称方法定义时声明的参数为形式参数。,2方法体,3方法定义举例下面的方法max实现的功能是求两个double数的最大值:double max(double x,double y)return xy?x:y;,下面的方法findSum实现的功能是求连续的自然数mn的和:,int findSum(int m,int n)int sum=0;for(int i=m;i=n;i+)sum+=i;return sum;,下面的方法show没有返回值,功能是在命令行输出两个整型参数的和:void show(int x,int y)System.out.println(x+y+=+(x+y);,4定义方法时的常见语法错误 在方法头中忘记了指明返回值类型(没有返回值的方法,其返回值类型为void)。,有返回值的方法中没有返回一个值,或返回的值类型不匹配且不能自动转换。,在一个方法的方法体中定义另一个方法。但方法中可以调用其他方法。,在方法体中的变量被赋初值之前使用该变量。,1.9.2调用方法实现方法的功能例1.13定义类中的方法和使用方法。(1)源程序,1:public class UseMethod 2:public static void main(String args)3:System.out.println(11.0与88.0的最大值:+max(11.0,88.0);4:System.out.println(11到88的和:+findSum(11,88);5:System.out.print(11与88的和:);6:show(11,88);7:8:,9:static double max(double x,double y)10:return xy?x:y;11:12:13:static int findSum(int m,int n)14:int sum=0;15:for(int i=m;i=n;i+)16:sum+=i;,17:18:return sum;19:20:21:static void show(int x,int y)22:System.out.println(x+y+=+(x+y);23:24:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-18所示的结果。,图1-18例1.13程序的运行结果,(3)程序解释 程序第9行第11行是max方法的定义。第3行调用max方法作为System.out.println方法的参数表达式,输出11.0与88.0的最大值。调用max方法时,把方法的形式参数替换为类型匹配的实际参数11.0与88.0。,1.10类和对象初步,1.10.1什么是面向对象编程面向对象程序设计就是把一些具有相同属性和行为的对象抽象为“类”,类中定义的变量描述这一类对象的属性,类中定义若干方法描述它们共同的行为,完成对类中数据变量的操作。,Java语言是面向对象的编程语言,Java中的“类”是对同一类对象进行抽象并提取它们的共同属性,用变量描述它们;对同一类对象所具有的共同行为(对类中变量的操作)则用方法来描述,因此,通常也把“类”称为抽象数据类型,表明它是同一类对象的相同属性和行为的抽象。,Java中的“类”就是一组成员变量和相关的方法的集合,类中的变量是其核心。,它们通过类中的方法来操纵,可以使一个类和其他类分离开来,因此,面向对象的程序设计使用“类”实现了对某一类对象的封装,实现了模块化和信息隐藏,有利于程序的可移植性和安全性,使程序易于维护,同时也利于对复杂对象的管理。,通过设计开发大量功能比较单一、相互独立且能重复多次使用的类,在应用系统的开发中使用它们作为基本构件模块实现程序的各种功能,这就是面向对象的编程。,1.10.2如何创建对象和使用对象1创建一个类的对象把同一类对象所共有的属性(用变量表示)和行为(用方法描述)抽象为类,就定义了一个新的数据类型,该类是这一类对象的模板。,如果要创建该类的一个具体对象,也称为该类的实例,则可用该模板来生成,Java中称为类的实例化或创建一个类的具体对象。,Java中,创建一个类的对象的格式如下:类名 对象名=new构造方法(实际参数);,2使用类对象由于类是引用类型,对象名只是一个指向对象实体(变量和方法)的地址引用,因此,如果要使用类中变量或调用类中的方法时,应通过下面的方式:对象名.变量名 对象名.方法名(实际参数),例1.14创建一个String类的对象并使用它。(1)源程序,1:public class UseObj 2:public static void main(String args)3:String obj=new String(I like Java!);4:System.out.println(obj=+obj);5:System.out.println(obj包含的字符:+obj.length();6:System.out.print(obj逆序后:);7:for(int i=obj.length()-1;i=0;i-)8:System.out.print(obj.charAt(i);9:System.out.println();10:System.out.println(obj转换为大写:+obj.toUpperCase();11:System.out.println(obj转换为小写:+obj.toLowerCase();12:13:,(2)程序运行结果程序编译、运行后,在命令行输出如图1-19所示的结果。,图1-19例1.14程序的运行结果,(3)程序解释程序第3行使用字符串类的构造方法创建字符串对象obj。,第5行的方法调用obj.length()得到字符串obj包含的字符个数。,第7行、第8行的for循环从字符串obj中的最后一个开始打印,直到打印完obj中的第一个字符后结束循环。,第10行调用String类的方法toUpperCase(),将字符串obj转换为大写后输出。,第11行调用String类的方法toLowerCase(),将字符串obj转换为小写后输出。,1.10.3如何自定义数据类型类1定义类的最简单的格式,最简单的定义类的格式是以关键字class开始,后跟类的名字,接着是一对花括号,并把类中声明的变量和方法放在花括号里面。class 类名,2定义类中的变量 描述一个人的Person类中,需要姓名、性别、年龄、身高等多个变量。,在Person类中声明姓名、性别、年龄、身高等变量后的类如下:,class Person Stringname;charsex;int age;doubleheight;,3定义构造方法Java的类中,通常定义一个或多个构造方法,用来完成类对象的初始化工作,它的定义形式与其他方法的定义类似,但有如下一些特殊性:,构造方法的名字不能随意命名,必须与类的类名完全一样;构造方法不能有返回值类型。,例如,可以定义Person的构造方法如下:Person(String s,char ch,int k,double