java程序设计课件_第1页
java程序设计课件_第2页
java程序设计课件_第3页
java程序设计课件_第4页
java程序设计课件_第5页
已阅读5页,还剩348页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第一章Java语言概述JAVA语言的特点JAVA程序及其实现JAVAApplication程序的实现1234JAVA语言的历史2Java语言的历史(1)Pc下用windows编写的程序能够不做修改就直接拿到XP系统下运行吗?“有心栽花花不成,无心插柳柳成荫”“站在巨人的肩膀上”Java名字的由来3Java语言的历史(2)历史记录-WhoJamesGosling:GreenTeamoriginal,FirstPersonemployee,originalmemberJavaProductsGroup,leadengineerandkeyarchitectofJavatechnologyBillJoy:Cofounderandvicepresident,SunMicrosystems,Inc.,principaldesigneroftheUniversityofCalifornia,Berkeley,versionoftheUNIXoperatingsystemEricSchmidt:FormerSunMicrosystemschieftechnicalofficer,FormerNovellchairmanandCEO,ChairmanoftheBoardandCEO,GoogleInc.4Java语言的历史(3)的主页5第一章Java语言概述JAVA语言的特点JAVA程序及其实现JAVAApplication程序的实现1234JAVA语言的历史6Java语言的特点面向对象简单性可移植性稳定性安全性高性能分布性7个特点:7面向对象Java语言最重要的特性支持继承、重载、多态等面向对象的特性不支持类似c语言的面向过程的程序设计8面向对象:类、对象和实体计算机逻辑的实现对象类

抽象实例化映射

抽象抽象数据类实体计算机世界概念世界现实世界9

Java风格类似于C++,容易掌握

Java摒弃了C++中容易引发程序错误中的一些特性,如指针、结构、枚举等

Java提供了丰富的类库,可以帮助我们很方便地开发Java程序简单性10

“一次编译,到处运行”可移植性11

Java致力于检查程序在编译和运行时的错误

Java自己负责内存管理,提供了垃圾内存回收机制,有效地避免了C++中头疼的内存泄漏问题

稳定性安全性12为什么选JAVA?能够体现哪些价值?学习价值商业价值应用价值开发价值13第一章Java语言概述JAVA语言的特点JAVA程序及其实现JAVA程序的不同界面输出1234JAVA语言的历史JAVA程序及其实现14Java程序的种类Java小应用程序(JavaApplet)在Web浏览器中运行(内嵌Java虚拟机)特定标记

<APPLETCODE="HelloWorld.class"WIDTH=150HEIGHT=25></APPLET>Java应用程序(JavaApplication)独立的Java程序程序入口方法:publicstaticvoidmain(String[]args){…}3.JavaScript嵌入在HTML文件中的脚本语言特定标记

<scriptlanguage=javascript>…</script>15JavaApplication的结构特点Java程序在书写上的特点JavaApplication程序结构上的特点由一个或多个文件组成每个文件又是由一个类或多个类组成每个类由若干个方法和变量组成classRectangle{staticintperimeter(intlength,intwidth){return2*(length+width);}staticintarea(intlength,intwidth){returnlength*width;}publicstaticvoidmain(String[]args){System.out.println(“perimeter=”+Rectangle.perimeter(5,4));System.out.println(“area=”+Rectangle.area(5,4));}}16Java的工作原理17JavaApplication程序编辑源程序编译生成字节码解释运行字节码18编辑源程序文本编辑器写字板记事本切忌:使用Word编辑器(文字处理编辑器)返回19编译生成字节码通过编译程序检查Java源程序中是否有语法错误通过编译来引入Java类库中的模块返回20解释运行字节码加载字节码文件代码检查解释运行返回21第一章Java语言概述JAVA语言的特点JAVA程序及其实现JAVA程序的不同界面输出1234JAVA语言的历史JAVA程序的不同界面输出22JavaApplication的不同界面输出字符界面输出23JavaApplication的不同界面输出图形界面输出24JDK的安装从Sun的官方网站上下载,网址:

/j2se/1.4.2/download.html /j2se/1.5.0/download.jsp

下载SDK(Windows、Linux或Solaris)

例如:j2sdk-1_4_0-win.exe大小:36,199KB

j2sdk-1_4_2_03-windows-i586-p.exe,大小:48.30MB jdk-1_5_0-windows-i586.exe,大小:43.93MB安装(假设安装目录为:C:\jdk1.4.0)。选择一个你喜欢编辑器:如freejava或UltraEdit等,下载并安装它。25JDK的参数设置JDK的PATH参数设置Win98/95,在系统的autoexec.bat文件中加入一行

PATH=C:\jdk1.4.0\bin;Win2000,直接在环境变量里配置打开控制面板,双击“系统”,选择“高级”中的“环境变量”;找到“用户变量”中“Path”,加入C:\jdk1.4.0\bin在autoexec.bat文件中加入一行(可用上下键翻看dos环境下以前输入的命令):

DOSKEY/INSERT26JDK的参数设置(续)PATH参数path参数是windows系统参数对所有参数配置都有系统命令set用法:set参数名=参数值例:在命令行模式下可以输入setpath=C:\jdk1.4.0\bin;需要注意的,在“=”前后都不能加空格27JDK的参数设置(续)在设置好path变量后,windows会在path指定的目录寻找执行命令28JDK的参数设置(续)在窗口模式下,也可以配置path参数在“我的电脑”点右键,选择“属性”在“高级”标签里面点环境变量29JDK的参数设置(续)现在就可以进行环境变量的编辑了30JDK的参数设置(续)对classpath的设置classpath是Java的参数,告诉Java虚拟机在哪个目录装载相关的类设置方法同path31标识符标识

常量、变量、数据类型、类和方法

publicclassHelloWorld1{

publicstaticvoidmain(String[]args){ Stringmessage=“HelloWorld!”; myPrint(message); }

privatestaticvoidmyPrint(Strings){ System.out.println(s); } }32标识符组成规则字母(A~Z、a~z)、特殊符号($、_)和数字(0~9)第1个符号不能为数字不能为关键词、true、false、null区分大小写33第二章Java语法基础1词法规则2数据类型4运算符和表达式6数组和字符串3常量与变量5语句34数据类型基本数据类型数字(number)整型(integers)字节整数(byte,8bits)短整数(short,16bits)整数(int,32bits)长整数(long,64bits)实型(realnumbers):浮点型单精度(float,32bits)双精度(double,64bits)35字符(char,16-bitUnicode字符)布尔(boolean):true,false复合数据类型数组(Array),类(class),接口(interface)不能表示为0或1在if,while内,不能写成if(1),while(1)36数据类型转换隐含转换规则

数据类型低的转换为数据类型高的,由系统自动进行。强制类型转换

凡是数据类型高的转换为数据类型低的都要进行强制类型转换。Byte,short,charintlongfloatdouble37第二章Java语法基础1词法规则2数据类型4运算符和表达式6数组和字符串3常量与变量5语句38常量程序执行过程中,值保持不变的量在java中可以利用final关键字来定义如:finalintNUM=100;常量类型实型整型字符串字符型布尔型39变量程序执行过程中,值可以改变的量在java中,所有的变量必须先声明再使用。变量定义定义变量必须指出的两大要素:

类型

变量名

[=初值][,变量名[=初值]…]类型:基本数据类型或引用类型

intx,y,z; floata,b; charc1,c2,c3; doubled1; booleanmycom;40变量的作用域变量的作用域指明可访问该变量代码的范围classMyClass{ ……

成员变量申明

…… publicvoidaMethod(方法参数){ ……

局部变量申明

…… } ……}成员变量范围方法参数范围局部变量范围publicclassExam{publicstaticvoidmain(Stringargs[]){inta=5;doubled;d=3.627;if(a>4){intb=8;a++;System.out.println(“a=”+a);System.out.println(“b=”+b);}System.out.println(“a=”+a);System.out.println(“b=”+b);}}41第二章Java语法基础1词法规则2数据类型4运算符和表达式6数组和字符串3常量与变量5语句42运算符(operator)一元/单目运算符(自加、自减)operatoropopoperator二元/双目运算符op1operatorop2三元/三目运算符op1?op2:op3

注:op表示操作数43算术运算符(ArithmeticOperators)关系运算符(RelationalOperators)逻辑运算符(LogicalOperators)位运算符(BitwiseOperators)移位运算符(ShiftOperators)条件运算符(ConditionalOperator)运算符的优先级运算符(operator)44自增、自减运算符变量赋值,一元运算符自增运算符(++)、自减运算符(--)inti=5;i++;++i;i--;--i;“赋值”和“运算”的先后顺序inti=10;intn=i++%5;floatx=7,y=15,v1,v2;v1=x++;v2=++y;inti=10;intn=++i%5;x=8y=16v1=7v2=16i=11,n=0i=11,n=145表达式(expression)用运算符和括号将操作数连接起来求值的式子操作数(常量、变量和函数)算术表达式关系表达式逻辑表达式赋值表达式复合赋值运算46算术表达式用算术运算符和括号将操作数连接起来,求整数或实数运算符的优先级和结合性例intx=20,y=3,z=5;x+y*z(x+y)*zx*-y说明表达式力求简单明了表达式中的变量必须赋值表达式(expression)47关系表达式将两个表达式连接起来的式子算术表达式、赋值表达式、字符表达式a>b;a+b>b-c;(a=3)>(b=5);‘b’>’a’;返回结果为一个布尔类型的值例若inta=3,b=2,c=1;booleand,f;d=a>b;f=(a+b)>(b+5);d=a>b>c;???表达式(expression)48逻辑表达式用逻辑运算符将关系表达式和布尔值连接起来的式子例intx=23,y=98;booleana=true,b=false,c,d;c=(x>y)&a;d=!a&&(x<=y);表达式(expression)49赋值表达式用赋值运算符将一个变量和一个表达式连接起来的式子<变量><赋值运算符><表达式>优先级:赋值运算符<算术、关系和逻辑运算符a=5+6;b=c=d=a+5;a=5+c=5;a=(b=4)+(c=6);表达式(expression)50复合赋值运算复合赋值运算符+=、-=、*=、/=、%=<<=、>>=、&=、^=、|=<变量><复合赋值运算符><表达式>例a+=b+5;等价于a=a+(b+5);a*=b;等价于a=a*b;a*=b-c;等价于a=a*(b-c);<变量>=<变量><运算符>(<表达式>)表达式(expression)51第二章Java语法基础1词法规则2数据类型4运算符和表达式6数组和字符串3常量与变量5语句52语句循环语句转向语句其他语句选择语句53条件选择语句if语句if语句是一个条件表达式,若条件表达式为真,则执行下面的代码块,否则跳过该代码块形式一:

if(布尔表达式){

语句;

}形式二:

if(布尔表达式){ ……;

语句; }语句布尔表达式falsetrue流程图54条件选择语句if-else语句根据判定条件的真假执行不同的操作语法

if(布尔表达式){

语句块1; }else{

语句块2; }语句块1布尔表达式falsetrue流程图语句块255switch/开关语句根据表达式的结果执行多个操作中的一个语法switch(表达式){

case

值1:语句序列;[break];

case

值2:语句序列;[break];……………[default:默认语句;]}与任一case值不匹配,则进入default语句流程图表达式语句序列1语句序列2默认语句break;break;break;值1值2default56switch/开关语句语法

switch(表达式){ case值1:语句序列;[break]; case值2:语句序列;[break]; …………… [default:默认语句;]}几点注意switch语句表达式的结果必须是byte,char,short,int类型表达式的结果依次与每个case子句比较break语句用于跳出switch语句default子句是可选的Switch(grade){case’A’:system.out.println(“85~100”);case’B’:system.out.println(“70~84”);case’C’:system.out.println(“60~69”);case’D’:system.out.println(“<60”);}57循环控制语句反复执行同一代码块直到满足结束条件组成循环的初始状态循环体迭代因子(计数器的递增或递减)控制表达式3种循环语句while循环do-while循环for循环58循环控制语句while循环语法

while(布尔表达式){

循环体;

}false循环体布尔表达式true流程图59循环控制语句do-while循环语法

do{

循环体;

}while(布尔表达式);先执行循环体后判断布尔表达式循环体至少执行一次循环体布尔表达式falsetrue流程图60循环控制语句for循环:最有效、最灵活的循环结构语法

for(初始化部分;条件判断部分;迭代因子){

循环体;

}初始化部分设置循环变量的初值条件判断部分任意布尔表达式迭代因子控制循环变量的增减初始化部分条件判断true流程图循环体执行迭代因子false61循环控制语句for循环的几点注意初始化部分和迭代因子可以包含多个语句,以“,”分开for(inti=0,j=10;i<j;i++,j--){……}初始化部分、条件判断部分和迭代因子可以为空语句,但以“;”分开,表示无限循环for(;;){//infiniteloop...}62跳转/转向语句将程序的执行跳转到其他部分的语句break:

跳出(中止)循环continue:结束本次循环return:方法返回throw:抛出异常(Exception)63import/包含语句引入程序所需要的类importjava.io.*;importjava.applet.Applet;package/打包语句指明所定义的类属于哪个包通常作为源程序的第一条语句packagetest;其他语句64第二章Java语法基础1词法规则2数据类型4运算符和表达式6数组和字符串3常量与变量5语句65概念数组是一组同类型的变量或对象的集合数组的类型可以是基本类型,或类和接口数组中每个元素的类型相同引用数组元素通过数组名[下标]数组下标(数组的索引)从0开始数组是一种特殊的对象(Object)定义类型(声明)创建数组(分配内存空间):new释放(Java虚拟机完成)一维数组、多维数组66一维数组的定义一维数组的元素只有一个下标变量例:A[1],c[3]一维数组的声明方法1:类型数组名[];Stringargs[];inta[];doubleamount[];charc[];方法2:类型[]数组名;String[]args;int[]a;double[]amount;char[]c;注意类型是数组中元素的数据类型(基本和构造类型)数组名是一个标识符数组声明后不能被访问,因未为数组元素分配内存空间variabledmightnothavebeeninitializedSystem.out.println(d[0]);^1errordouble[]d;System.out.println(d[0]);67一维数组的创建数组的创建用new来创建数组为数组元素分配内存空间,并对数组元素进行初始化格式:数组名=new类型[数组长度]例:a=newint[3];声明和创建的联用:int[]a=newint[3];默认赋初值整型初值为0int[]i=newint[3];实型初值为0.0float[]f=newfloat[3];布尔型初值为falseboolean[]b=newboolean[3];字符型初值为\u0000(不可见)char[]c=newchar[3];定义一维数组intnum[3];//errorintnum[]=newint[3];int[]num;//更符合java习惯num=newint[3];int[]num=newint[]{1,2,3};//okint[]num=newint[3]{1,2,3};//error68一维数组的初始化静态初始化动态初始化intintArray[]={1,2,3,4};StringstringArray[]={"abc","How","you"};1)简单类型的数组

intintArray[];

intArray=newint[5];2)复合类型的数组

StringstringArray[];

StringstringArray=newString[3];/*为数组中每个元素开辟引用空间*/

stringArray[0]=newString("How");//为第一个数组元素开辟空间

stringArray[1]=newString("are");//为第二个数组元素开辟空间

stringArray[2]=newString("you");//为第三个数组元素开辟空间69多维数组数组的数组ArraysofArrays例:表格(行和列)以二维数组为例期中考试期末考试姓名总分6870学生A698085学生B847590学生C8670多维数组二维数组的声明类型数组名[][],例inta[][];数组声明后不能被访问,因未为数组元素分配内存空间二维数组的创建方法一:直接分配空间(new)例inta[][]=newint[2][3];

a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]两个一维数组,每个数组包含3个元素71多维数组二维数组的创建方法二:从最高维开始,为每一维分配空间例intc[][]=newint[2][];c[0]=newint[4];c[1]=newint[3];c[0][0]c[0][1]c[0][2]c[0][3]c[1][0]c[1][1]c[1][2]注:为数组分配空间需指定维数大小,至少最高维(最左边)大小错误:intb[][]=newint[][];72多维数组二维数组的初始化对每个元素单独进行赋值声明数组的同时初始化对数组元素的引用数组名[下标1][下标2]下标为非负的整型常数0~73多维数组杨辉三角形

1 11 121 1331 1464115101051三角形腰上的数为1其他位置的数为其上一行相邻两个数之和74多维数组杨辉三角形用二维数组描述杨辉三角形a[1][1]a[2][1]a[2][2]a[3][1]a[3][2]a[3][3]a[4][1]a[4][2]a[4][3]a[4][4]a[5][1]a[5][2]a[5][3]a[5][4]a[5][5]第1列元素为1对角线上的元素为1其他元素a[i][j]=a[i-1][j-1]+a[i-1][j]纵轴为i,横轴为j1111211331146411510105175多维数组杨辉三角形classTest{ publicstaticvoidmain(Stringargs[]){ intn=6,indent,i,j; inta[][]=newint[n][n]; a[1][1]=1; for(i=2;i<n;i++){ a[i][1]=1;a[i][i]=1; for(j=1;j<i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; }

纵轴为i,横轴为j0000000000 00000000000000000000000000纵轴为i,横轴为j0000000100 0001100001210001331001464176多维数组杨辉三角形

indent=25; for(i=1;i<n;i++){ for(intk=1;k<=indent;k++) System.out.print(“”); for(j=1;j<=i;j++) System.out.print(a[i][j]+“”); System.out.println(); indent=indent-2; } }}纵轴为i,横轴为j0000000100 0001100001210001331001464111112113311464177数组的界限起点和终点数组的长度:数组名.length起点:数组名[0]终点:数组名[length-1]inti={4,56,78,9,34};i.length5i[0]

4i[length-1]=i[4]34i[a]若a>4则???78

思考:1.什么是对象?什么是类?2.面向对象编程的特性有哪三个?它们各自又有哪些特性?79回顾:类、对象和实体计算机逻辑的实现对象类

抽象实例化映射

抽象抽象数据类实体计算机世界概念世界现实世界80面向对象:以电灯泡为例在这个例子中,类名为Light,可向Light对象发出的请求包括打开、关闭、变亮和变暗。通过Lightlt简单的说明了一个名字或变量(lt),即为Light对象创建了一个句柄;用new关键字创建对象,即实例化对象。Lighton()off()brighten()dim()类名方法Lightlt=newLight();lt.on();81基本概念面向对象编程:面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范.

其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。82面向对象(ObjectOriented-OO)面向对象编程(ObjectOrientedProgramming-OOP)面向对象是一种软件开发的方法,“面向对象的分析与设计”(OOA&OOD—研究生课程)C++,JAVA,C#等用客观世界中描述事物的方法来描述程序中要解决的问题万事万物都是对象程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作基本概念83建立数据结构存放数据定义方法操作数据构造对象模型将数据与方法组合在一起面向过程与面向对象的区别区别84基本概念

对象

类多态性继承性封装性封装性面向对象“五大特征”85everythingisanobject现实世界的对象:桌子、书、自行车、电视、狗、文件、表格、按钮、窗口对象包含两个特性状态:指对象本身的信息(内部信息/内部变量)行为:实现对信息的访问/对象的操作山地车的状态(两个车轮、一些齿轮、速度、挡数),行为(刹车、加速、减速和换挡)书包含很多信息,拥有访问所包含信息的方法,一页一页的看,通过目录找到感兴趣的内容对象86对象状态行为加速刹车87软件的对象概念是由现实世界对象抽象而来的。把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现。基本概念变量方法状态行为88类(class)亚里士多德:theclassoffishesandtheclassofbirds把相似的对象划归成一个类,一种数据类型一种原型,一种抽象,一种共性,一个模板类是创建对象的模板,对象是类的实例。实例(instance),某类对象的一个特定实体,类是对象的一个抽象基本概念89类(class)从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种数据类型,这种数据类型就是对象类型。所以我们可以使用类名称来声明对象变量。声明对象变量之后还不能使用对象。必须用预算符new创建实体对象之后,才能够使用对象。基本概念classPoint{intx,y;voidoutput(){System.out.println(x);System.out.println(y);}}classPoint{intx,y;voidoutput(){System.out.println(x);System.out.println(y);}publicstaticvoidmain(String[]args){Pointpt;pt=newPoint();pt.x=10;pt.y=10;pt.output();}}90类(class)与对象(object)一般与个别的关系类是实体的高度抽象,对象是实体的映射面向对象解决问题的思路:基本概念现实世界数据类型类对象抽象逻辑表现实例化91面向对象编程的难点掌握面向对象的难点在于思路的转换。

问题的解决方法对象的方法问题抽象成对象92编写一个驾驶汽车的方法

面向过程的程序设计:编写一个方法,voiddrivecar();

面向对象的程序设计:将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类Car,类中有一个具体的对象car,调用:car.drive().一个简单的例子93封装性将描述某种实体的数据和基于这些数据的操作集合到一起,形成一个封装体。对象本身的数据得到保护/隐藏其他对象仅仅需要知道对该对象的访问方法(接口/interface)即可基本概念94好处模块化--每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的形状信息隐藏--通常定义一个公共接口/方法实现对对象的访问,可以调整对象的私有信息和方法,而不会对其他调用它的对象产生影响可重用性基本概念95继承性为什么会有继承?建立一个类后,发现另一个新的类有相同的特性,两个选择:重新定义一个新的类;在已有类的基础上,修改(加加/减减)基本概念classAnimal{intheight,weight;voideat(){System.out.println("animaleat");}voidsleep(){System.out.println("animalsleep");}voidbreathe(){System.out.println("animalbreathe");}}classFishextendsAnimal{}classIntegration{publicstaticvoidmain(String[]args){Animalan=newanimal();Fishfi=newfish();an.breathe();fi.breathe();}}96当一个类拥有另一个类的所有数据和方法时,称这个类继承了另一个类,这两个类具有继承的关系。在java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类),继承的类称为子类(派生类)父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝”树型结构(层次化结构)根(基类)继承性97运输工具航空运输工具陆地运输工具水上运输工具人力驱动引擎驱动二轮四轮客运货运继承性98多重继承类A类B类C类D类F类G一个类拥有多个父类

产生二义性,例类C和类D都有一个同名的方法,类G?Java中仅仅支持单一继承,同时Java采用Interface(接口)实现多重继承而避免父类二义性继承性99多态性表现在继承中方法的重写子类从父类继承(extends扩展)而来多个子类同属一个父类,所有子类有相同的父类继承父类的方法在不同的子类中有不同的表现形式表现在用一个类中方法的重载基本概念100多态性多态性在继承中的表现基本概念101多态性classSquareextendsShape{ voiddraw(){ System.out.println("Square.draw()"); } voiderase(){ System.out.println("Square.erase()“); }}classTriangleextendsShape{ voiddraw(){ System.out.println("Triangle.draw()"); }voiderase(){ System.out.println("Triangle.erase()");}}classShape{ voiddraw(){} voiderase(){}}classCircleextendsShape{ voiddraw(){ System.out.println("Circle.draw()"); } voiderase(){ System.out.println("Circle.erase()");}}基本概念102第三章面向对象特征类的继承和多态4基本概念1类的定义2对象3接口和包5103类的定义类变量

方法成员变量的定义格式变量的修饰符方法调用方法重载构造方法析构方法104类定义了一种新型的数据类型。一旦定义后,就可以用这种新类型来创建该类型的对象。类是若干种属性和服务的封装体,即是变量和方法的集合。类的定义105类的定义格式[类的修饰符]class

类名[extends

父类名]implements[接口名]{

类型 成员变量1;

类型 成员变量2; …… …………

类型 成员方法1(参数1,[参数2,…]){

方法体; }

类型 成员方法2(参数1,[参数2,…]){

方法体; } …… …………}类的定义106类的定义格式[类的修饰符]class

类名[extends

父类名][implements

接口名]{ …… ………… }类的修饰符public:公共类,可以被其他类所使用(无任何限制)无修饰/默认说明:

(仅仅能在同一个包中的其他类引用)abstract:

宣布该类不能被实例化final:宣布该类不能有子类类的描述107抽象类(abstractclass)一个未完成的类抽象类不能被实例化,例Pointp=newPoint();抽象类一定有它的子类,且不是抽象类优点:充分利用它所具有的公共属性来提高开发程序的效率缺陷:子类必须覆盖抽象类的所有抽象方法108抽象类(abstractclass)子类继承抽象类时,必须重写抽象方法,否则仍为抽象类抽象方法:仅仅申明了方法,但未实现有访问修饰词返回值类型方法名参数列表无方法体abstractclassAnimal{protectedStringname;publicabstractvoidmove();publicabstractvoidcry(); }

classFishextendsAnimal{ intSwimSpeed;Fish(Stringn,ints){name=n;SwimSpeed=s;}publicvoidmove(){System.out.print(SwimSpeed);}publicvoidcry(){System.out.print(“bubble”);}返回109最终类(finalclass)没有子类的类完成某种标准功能基于安全因素考虑最终类最终变量:常量最终方法:功能和方法体内语句不能更改110类的定义格式[类的修饰符]class

类名[extends

父类名][implements接口名]{ …… ………… }extends:继承的关系implements:实现哪些接口(interface)的方法,实现多重继承publicclassTestextendsFrame implementsActionListener,ItemListener{ …… ……}类的描述111一个简单的类classStudent{ Stringname,stuNumber; doublescore1,score2,score3; voidset1(Strings1,Strings2){ name=s1; stuNumber=s2; System.out.println(name+““+stuNumber); } doublesetScore(doubled1,doubled2,doubled3){ doubled; score1=d1; score2=d2; score3=d3; d=d1+d2+d3; returnd; }}类的描述112简单成员变量定义[访问权限修饰符]类型变量名;[访问权限修饰符]类型变量名[=初值];对象成员定义[访问权限修饰符]<类名><对象名>[=new<类名>(<实参表>)]注意:类的成员变量必须定义在类体中,且不能在类体的方法体中。在类的方法体中定义的变量是局部变量,其作用域就是其所在方法体或方法体的语块中。类成员-变量和方法113访问控制修饰符公共访问控制符-public被所有类访问默认访问控制符被同一包中其他类访问私有访问控制符-private被该类自身访问保护访问控制符-protected该类自身、同一个包中的其他类、其他包中的子类访问私有保护访问控制符-privateprotected该类自身、所有子类访问类成员变量的访问114非访问控制修符静态变量static属于类的变量,任何对象可以访问最终变量final值在程序的执行过程中不会改变易失变量volatile可能同时被多个线程所控制和修改类成员变量的访问115静态变量static仅存在于类体中,又称类变量任何一个类的对象都可以访问静态变量可以通过类名直接访问,也可以通过对象访问静态变量和静态方法例:假设s是Student类的一个对象,totalNum为静态变量,则访问静态变量totalNum可用如下两种方法:

Student.totalNum或s.totalNum116静态方法static在类体内使用static修饰的成员方法静态方法只能处理静态变量或调用静态方法可通过类名或对象名调用静态变量和静态方法返回117public(公共变量/公共方法)容许全权访问,无任何限制(先构造对象,再访问)类成员的访问classA{

publicintx;

publicvoidprint(){…}}classB{ voidtest(){ Aa=newA(); a.x=100; a.print(); }}直接访问公有变量x和公共方法print()118private(私有变量/私有方法)仅能在其所定义的类中被访问(先构造对象,再访问)D:\>javacA.javaxhasprivateaccessinAa.x=100;^print()hasprivateaccessinAa.print();^2errors类成员的访问classA{

privateintx;

privatevoidprint(){…}}classB{ voidtest(){ Aa=newA(); a.x=100; a.print(); }}119protected(保护变量/保护方法)容许类本身、子类(有一定限制)以及同一个包中所有类访问(先构造对象,再访问)类成员的访问packageabc;classA{

protectedintx;

protectedvoidprint(){…}}packagexyz;importabc.A;classBextendsA{ voidtest(Aa,Bb){ a.x=100; a.print(); b.x=100; b.print(); }}//illegal//illegal//legal//legal120无修饰(友好变量/友好方法)容许类本身以及同一个包中所有类访问类成员的访问classA{ intx; voidprint(){…}}classB{ voidtest(){ Aa=newA(); a.x=100; a.print(); }}packageabc;classA{ intx; voidprint(){…}}packageabc;classB{ voidtest(){ Aa=newA(); a.x=100; a.print(); }}121小结名称访问权修饰符类本身子类包所有类公共public

默认---

保护protected

*

私有private

*指子类与父类不在同一个包中的情况类成员变量的访问122小结类:public,abstract,final,无修饰,[private]类成员publicprotectedprivate无修饰staticfinal类成员变量123方法:对象行为的描述完成某种功能的程序块定义: [访问权限修饰符]方法返回类型方法名()[throws异常名]{

方法体; }方法参数的传递变量的作用域方法的重载(overloading)/重写(overriding)方法的递归调用类成员方法124例参数的传递和变量的作用域classTest{publicstaticvoidmain(Stringargs[]){ exA=newex(); A.p(); }}classex{ intu,v; voidp2(intx,inty){ inti,j; for(i=1;i<=x;i++){ j=y+i; System.out.print(j+“”); } } voidp(){ u=3;v=2;p2(u,v); System.out.println(); u+=v;v*=u;p2(u,v); }}u=3;v=2;u=5;v=10;输出结果:3451112131415125方法的重载(overload)方法名相同,但方法的参数不同方法描述方法名(标识符)参数类型 方法返回值绝对值abs(a)intint绝对值abs(a)longlong绝对值abs(a)floatfloat绝对值abs(a)doubledouble……publicstaticintabs(int

a)publicstaticlongabs(long

a)publicstaticfloatabs(float

a)publicstaticdoubleabs(double

a)成员方法126方法的重载应该注意以下几点:方法重载用以实现对象的多态性功能相同的方法进行重载才有意义成员方法127构造方法创建对象/实例化对象—new

例1:Applea=newApple();(创建对象)例2:Applea;(对象的说明) a=newApple();(实例化对象)对象的实例化通过构造方法(constructor)来实现构造方法的名字与类名相同构造方法没有返回值构造方法可以有多个,构成方法的重载(overload)classPoint{intx,y;voidoutput(){System.out.println(x);System.out.println(y);}publicstaticvoidmain(String[]args){Pointpt;pt=newPoint();pt.x=10;pt.y=10;pt.output();}}classPoint{intx,y;

point(){x=5;y=5;}voidoutput(){System.out.println(x);System.out.println(y);}publicstaticvoidmain(String[]args){Pointpt;pt=newPoint();pt.output();}}128New关键字的作用为对象分配内存空间引起对象构造方法的调用为对象返回一个应用129例:对象的实例化和初始化classjex6_8{publicstaticvoidmain(Stringargs[]){ Qangleq1=newQangle(); Qangleq2=newQangle(20,50); Qangleq3=newQangle(q1); System.out.println(q1.width()+“” +q1.height()); System.out.println(q2.width()+“” +q2.height()); System.out.println(q3.width()+“” +q3.height()); }}classQangle{ inta,h; Qangle(){ a=10;h=20; } Qangle(intx,inty){ a=x;h=y; } Qangle(Qangler){ a=r.width(); h=r.height(); } intwidth(){returna;} intheight(){returnh;}}输出结果:2020501020构造方法130缺省构造方法当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员变量。各种数据类型的默认值为数值型0booleanfalsechar‘\0’

对象null构造方法131默认构造方法例classApple{ intcolor; } Applea=newApple();对象实例的判断:null例Applea;if(a==null) System.out.println(“Daydream”);构造方法运行时系统自动赋予一个空构造函数如Apple(){}132再谈构造方法构造方法classCmethod{ Cmethod(booleanb){}

publicstaticvoidmain(Stringargs[]){ Cmethodc1=newCmethod(); Cmethodc2=newCmethod(false); }}classCmethod{ Cmethod(booleanb){}

publicstaticvoidmain(Stringargs[]){ //Cmethodc1=newCmethod(); Cmethodc2=newCmethod(false); }}classCmethod{ Cmethod(booleanb){} Cmethod(){}

publicstaticvoidmain(Stringargs[]){ Cmethodc1=newCmethod(); Cmethodc2=newCmethod(false); }}运行时系统自动赋予一个空构造方法,仅仅当该类没定义构造方法的情况下133第三章面向对象特征类的继承和多态4基本概念1类的定义2对象3接口和包5134对象对象创建对象使用对象清除对象声明对象实例化对象引用成员变量调用成员方法135创建对象说明对象使用运算符new给对象分配内存空间为对象初始化(针对传参的构造方法)例1Vectorv=newVector();v.addElement(“helloworld”);例2inta[]={1,2,3,4,5};intsize=a.length;136对象的使用对象作为类的成员classStudent{ privateStringname; privateStringid; Student(Strings1,Strings2){name=s1;id=s2;}

StringgetName(){returnname;} voidsetName(Strings){name=s;}}Studentst=new Student(“aloha”,“001”);Stringn=st.getName();……st.setName(“csma”);n=st.getName();……137

对象用作方法的参数对象的使用classjex6_10{publicstaticvoidmain(Stringargs[]){ Spots=newSpot(2,3); System.out.println(“s点的坐标:”+ +s.getX()+“,”+s.getY()); Transts=newTrans(); ts.move(s,4,5); System.out.println(“s点的坐标:”+ +s.getX()+“,”+s.getY()); }}classSpot{ privateintx,y; Spot(intu,intv){ setX(u);setY(v);} voidsetX(intx1){x=x1;} voidsetY(inty1){y=y1;} intgetX(){returnx;} intgetY(){returny;}}classTrans{ voidmove(Spotp,inth,intk){ p.setX(p.getX()+h); p.setY(p.getY()+k); }}classjex6_10{publicstaticvoidmain(Stringargs[]){ Spots=newSpot(2,3); System.out.println(“s点的坐标:” +s.getX()+“,”+s.getY()); s.move(4,5); System.out.println(“s点的坐标:” +s.getX()+“,”+s.getY()); }}classSpot{ privateintx,y; Spot(intu,intv){ setX(u);setY(v);} voidsetX(intx1){x=x1;} voidsetY(inty1){y=y1;} intgetX(){returnx;} intgetY(){returny;} voidmove(inth,intk){ x=x+h; y=y+k; }}138对象的使用对象作为方法的返回值例:求两点坐标之间的中点坐标思路:(x1,y1)和(x2,y2)(x,y)x=(x1+x2)/2,y=(y1+y2)/2Spots1=newSpot(2,3);Spots2=newSpot(4,5);Spots=s1.midSpot(s2);139例对象用作方法的返回值对象的使用classjex6_13{publicstaticvoidmain(Stringargs[]){ Spots1=newSpot(3.0,5.0); Spots2=newSpot(6.0,8.0); System.out.println(“s1点的坐标:” +s1.getX()+“,”+s1.getY()); System.out.println(“s2点的坐标:” +s2.getX()+“,”+s2.getY());

Spots=s1.midSpot(s2); System.out.println(“中点的坐标:” +s.getX()+“,”+s.getY()); }}classSpot{ privatedoublex,y; Spot(doubleu,doublev){ setX(u);setY(v);} voidsetX(doublex1){x=x1;} voidsetY(doubley1){y=y1;} doublegetX(){returnx;} doublegetY(){re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论