




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第章 Java语言概述Java语言的特点2Java开发环境4Java语言发展历史 31Java体系结构33Java编程风格6Java程序开发实例35本章内容提要91年,sun公司的“Green”项目,开发一种面向家用电器市场的软件产品,由于对平台独立性和安全性的要求,产生了一种语言-Oak;94年,随着Internet和WWW的迅猛发展,需要一种简练、小巧、与平台无关的语言,Oak正好适合这个要求,Oak的第一个应用-WebRunner浏览器;1.1 Java语言发展历史95年,注册Oak失败,更名为java(java和咖啡),HotJava浏览器;96年到现在,从jdk1.0jdk1.6,发
2、展异常迅速,遍布从企业应用到个人终端的各个方面;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、3安全(Security) Java在设计之初就注重语言的健壮性,避免了一些不稳定的因素,可以防止许多编程错误,在此基础上还采取其他一些安全措施。 4解释型(Interpreted) Java是一种解释型的程序设计语言。Java代码编译后不直接生成特定的机器代码,而是Java字节代码,Java程序运行时借助Java解释器(即Java虚拟机)对编译后的字节码文件进行解释执行。1.2 Java语言的特点 5平台无关(Architecture-Neutral) 平台无关有两种:源代码级和目标代码级。Java是一种目标代码级的平台无关语言,用Java编写的应用程序不用修改就可以在不同的软硬件平台上运行
4、,而不受计算机硬件和操作系统的限制。其特点是“一次编写,处处运行”。 6分布式(Distributed) 分布式包括数据分布和操作分布。 Java支持这两种分布性。1.2 Java语言的特点 7多线程(Multi-Threaded) Java提供多线程支持。主要体现在两个方面,其一,Java环境本身就是多线程的。其二,Java语言内置了多线程控制,可以大大简化多线程应用程序开发。 8动态性(Dynamic) Java允许程序动态的装入运行中所需要的类,或者在原有的类中自由地加入新的方法和实例变量而不会影响用户程序的运行。1.2 Java语言的特点 7开源性(Open Source) 2007年
5、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
6、Java体系结构1.3 Java体系结构应用程序Java运行时环境Java编程环境Java类文件Java APIJVMJava平台操作系统、CPU芯片 当使用Java开发应用程序时,首先用Java编程语言编写源代码,然后将源代码编译为Java类文件,即字节码文件,接着在JVM中解释执行类文件,在执行过程中根据应用程序的需要调用Java API中的标准类,以获得相应的功能支持。1.3 Java体系结构1.3 Java体系结构Java源程序字节码(.class)处理器专用码编译器JVMJava API(类库) JVM与Java API共同构成了Java平台,也称为JRE(Java Runtime
7、Environment,Java运行时环境),该平台可以建立在任何操作系统上。Java平台发展到Java 2版本后,为了适应不同级别应用程序开发的需要,又分为三个分支:1Java SE(Java2 Platform Standard Edition) ) 2Java EE(Java2 Platform Enterprise Edition) 3Java ME(Java2 Platform Micro Edition) 1.3 Java体系结构Java的应用(Java SE)1.3 Java体系结构返回 Java的应用(Java EE)1.3 Java体系结构返回 Java的应用(Java ME
8、)Mobile Phone、PDAJava Game1.3 Java体系结构JDK Java软件开发工具集J2SDK(Java2 Software Development Kit ),简称JDK,是一种用于构建在Java平台上编译和发布Java程序的开发和运行环境。 1javac:编译器,输出结果为Java字节码文件。 2java:字节码解释器,直接从类文件执行Java应用程序。 3javadoc:API文档生成器,根据Java源代码及说明语句生成HTML格式的API文档。1.4 Java开发环境 4appletviewer:小应用程序浏览工器,用于调试运行Java小应用程序。 5jar:Ja
9、va Archiver文件归档工具。 6jdb:Java语言调试器。 7javah:头文件生成器,用于从java类中调用C代码。 8javap:Java反编译器,将java的字节码文件转换为java源文件1.4 Java开发环境开发环境配置 1PATH变量设置 打开控制面板选择系统环境变量,在用户变量窗口中找到PATH变量,然后在路径的开头添加JDK工具集所在的路径,使用分号把新加的条目和以前的分开。 如下所示: C:Program FilesJavajdk1.6bin; 1.4 Java开发环境 2CLASSPATH变量设置 打开控制面板选择系统环境变量,在用户变量窗口中添加一个CLASSP
10、ATH变量,令其值等于JDK类库所在的路径,如果需要,还可以再设置其他的类库路径(可以是第三方开发的类库,或者开发者自定义的类库),以及当前路径“”(即当前程序所在的路径),使用分号把新加的条目和以前的分开,如下所示: C:Program FilesJavajdk1.6jrelibrt.jar;.; 1.4 Java开发环境1.5 Java应用程序实例 根据运行环境不同,Java语言程序可以分为两类,分别是Java Application和Java Applet。这两类程序的开发原理相同,但应用于不同的场合。Java Application指可以在Java平台上独立运行的一种程序,通常称为Ja
11、va应用程序,而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-
12、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.
13、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文件的标记和参数对字符的大小写是不敏感,但文本和参数值是大小写敏感的,因此如果字节码文件名必
14、须与源文件一致。 1.6 Java编程风格 1Allmans风格 for(int i=0;i=100;i+) sum+=i; 2. Kernighan风格 for(int i=0;i高byteshortcharint longfloatdouble26在表达式中,byte、short或char数据将无条件地转换(升级)为int类型。在表达式中,实现低级别向高级别自动升级。在赋值表达式中,如果左值类型高于右值类型,右值类型将自动转换为左值类型。2.2 基本数据类型2.2 基本数据类型 例: float x=100; 如果输出 x 的值,结果将是 int x=50; float y; y=x; 如
15、果输出 y 的值,结果将是100.050.0强制转换 当级别高的变量的值赋给级别低的变量时,必须强制进行数据类型转换。强制转换格式为:(目标数据类型) 变量名或表达式 例:int x=(int)23.89; 输出 x的值是 char c=(char)(12.5+54); 输出 c的值是 强制转换运算可能导致精度的损失。2.2 基本数据类型23B所有整数类型都能向float或double自动转换,反之必须强制转换;字符类型可向int、long、float、double自动转换,反之必须强制转换;字符类型转换为byte时必须强制转换;布尔类型不可和任何其他数据类型转换。2.2 基本数据类型从命令行
16、输入输出数据 1.输入数据 Java中使用Scanner类从命令行输入数据。 2. 输出数据 System.out.println()或System.out.print()方法用来输出串值和表达式的值。【例2-2】读入用户在命令行输入的数据并输出 2.2 基本数据类型 运算符是对操作数进行运算的符号。 运算符的类型包括:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符和其他运算符。 表达式是用运算符把操作数(变量、常量和方法等)连接起来的表达某种运算或含义的式子。 表达式的类型由运算以及参与运算的操作数的类型决定,可以是简单类型,也可以是引用类型。 2.3 运算符与表达式算
17、数运算符与算术表达式 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
18、-减12.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是否大于op2op1=op1=op2比较op1是否大于等于op2=op1 5的值为false; 表达式3 op1按位右移op2位op1op2op1按位左移op2位op1op1添零右移op2位op1op22.3 运算符与表达式1位逻辑运算符”按位与”运算符 例如: a 00000111 b 10
19、101011 & _ 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时
20、,a&b是true,否则是false当a、b都是false时,a|b是false,否则是false当a是true时,a是false;当a是false时,a是true 例如:x 的初值是 1 (y=1)=0)&(x=6)=6); (y=1)=0)&(x=6)=6);2.3 运算符与表达式2移位运算符 右移运算符 用来将一个数的二进制位序列右移若干位。 例如: a= 00010001 a2=00000100 b= 11101111 b2=11111011 结论:右端的低位被舍弃,最高位则移入原来高位的值。2.3 运算符与表达式左移运算符 用来将一个数的二进制位序列左移若干位。 例如: a= 000
21、10001 a2=01000100 b= 11101111 b 用来将一个数的各二进制位添零右移若干位,也称为无符号右移。 例如: a=00010001 a2=00000100 b=11101111 b2=00111011 结论:右端的低位被舍弃,最高位则永远加0。2.3 运算符与表达式赋值运算符与赋值表达式 赋值表达式的组成为:赋值运算符的左侧为一个变量,右侧为一个表达式。表达式的值的类型应与左侧的变量类型一致或者可以转换为左侧的变量类型。 1赋值运算符 赋值运算符“=”用来把一个表达式的值赋给一个变量。 2.3 运算符与表达式例如: byte b=12; int i=b; /自动类型转换
22、int a=13; byte c=(byte)a; /强制类型转换 int j=i+1; /把表达式i+1的值赋给变量j2.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=-62.3 运算符与表达式2.3 运算符与表达式运算符表达式等效表达式+=op1+=op2op1=op1+op2-=op1-=op2op1=op1-op2*=op1*=op2op1=op1*op2/=op1/=op2op1=op1
23、/op2%=op1%=op2op1=op1%op2&=op1&=op2op1=op1&op2|=op1|=op2op1=op1|op2=op1=op2op1=op1op2=op1=op2op1=op1op2=op1=op2op1=op1=op1=op2op1=op1op2条件运算符与条件表达式 条件运算符是三元运算符,用“?”和“:”表示。 class TernaryOp public static void main(String args) int salary,daysPresent = 30; salary = daysPresent = 20 ? 2000 : 3000; Syste
24、m.out.println(您本月薪资为 $+salary); 2.3 运算符与表达式truefalse条件 ? 表达式 1 : 表达式 2其他运算符 1括号运算符() 在Java语言中,括号运算符()的运算优先级最高,在表达式中使用时,用于改变运算符的运算顺序。 2下标运算符 是数组下标运算符,定义数组时用于声明数组元素的个数;引用数组元素时用于提供数组的下标值。 2.3 运算符与表达式 3对象运算符instanceof 对象运算符instanceof用于测试一个指定的对象是否是指定类(或它的子类)的一个实例化的对象,若是则返回true,否则返回false。 例如: String s=abc
25、de; boolean b=s instanceof String; 4内存分配运算符new 使用new运算符为数组和类分配内存空间。2.3 运算符与表达式运算符的优先级与结合性 优先顺序运算符结合性1 ()2+ - ! instanceof右到左3new 左到右4* / %左到右5+ -左到右6 左到右7 = =左到右8= !=左到右2.3 运算符与表达式优先顺序运算符结合性9&左到右10左到右11|左到右12&左到右13|左到右14?:左到右15= += -= *= /= %= =右到左16&= |= = =右到左2.3 运算符与表达式Java中的程序控制语句分为3类 1选择结构2循环结构
26、3跳转语句 2.6 控制语句选择语句 选择语句根据条件表达式值的不同选择执行不同的语句序列,其他与条件表达式值不匹配的语句序列则被跳过不执行。 选择语句分为:条件语句(if- else)多分支语句 (switch)2.4 控制语句1条件语句if语句 if(条件) statement;或者 if(条件) block2.4 控制语句2.4 控制语句例2-3使用if语句输出一个数的绝对值 if-else语句 if(条件) statement1; 或block1else statement2; 或block22.4 控制语句2.4 控制语句有钱吗?有没有 else子句不能单独作为语句使用,它必须和if
27、子句配对使用。if和else后面的复合句里如果只有一个语句, 可以省略不写,但为了增强程序的可读性最好不要省略。 例2-4使用if-else表达式判断成绩数学及格了2.4 控制语句if-else if语句 if(条件1) statementl;或blocklelse if(条件2)statement2;或block2 else if(条件N) statementN;或blockNelse statementN+1;或blockN+12.4 控制语句 if与else的配对关系。else总是与它上面的最近的未配对的if配对。 例如: if(表达式1) if(表达式2) 语句 1 else 语句2
28、if(表达式3) 语句3 else 语句42.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
29、子句中的值必须是常量,而且所有case子句中的值应是不同的。 2.4 控制语句default子句是任选的。当表达式的值与任一case子句中的值都不匹配时,程序执行default后面的语句;如果表达式的值与任一case子句中的值都不匹配且没有default子句,程序不作任何操作,直接跳出switch语句。break语句用来在执行完一个case分支后,使程序跳出switch结构,即终止switch语句的执行。 2.4 控制语句例2-5使用switch语句判断成绩等级2.4 控制语句92A循环语句1不确定循环while循环while (termination)body;iteration;2.4 控
30、制语句真假当条件表达式的值为true时,执行循环体中的语句,条件变为false时,退出循环;在每一次新的循环开始前,都会重新检查条件表达式的值; 如果条件表达式值在开始时就是false, while循环体中的语句一次都不会执行。2.4 控制语句do-while循环 dobody;iteration;while(termination);2.4 控制语句真假do-while是在前一次循环结束的时候检查条件表达式的值,以决定是否进行下一次循环; do-while循环中的语句至少会被执行一次。2.4 控制语句2确定循环 for(initialization;termination;iteration
31、)body;2.4 控制语句for循环执行时,首先执行初始化操作(initialization),然后判断终止条件(termination)是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分(iteration)。完成一次循环后,重新判断终止条件。 2.4 控制语句可以在for循环的初始化部分声明一个变量,它的作用域为整个for循环。for循环通常用于循环次数确定的情况,但也可以根据循环结束条件完成循环次数不确定的情况。2.4 控制语句在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。例如:for(i=0,j=10;ij;i+) 初始化、终止以及迭
32、代部分都可以为空语句(但分号不能省略)。三者均为空的时候,相当于一个无限循环。例如:i=1;for(;i=5;) 2.4 控制语句例2-6用for循环求1000之内的所有完全数1000之内的完全数为:6284962.6 控制语句跳转语句 1break语句 用在switch语句中,其作用是强制退出switch结构,执行switch结构后的语句 ;用在单层循环结构的循环体中,其作用是强制退出循环结构 ,控制转移到循环体外下一个可执行语句;2.4 控制语句在两层循环嵌套的情况下,而break在内循环中,则执行break语句只能退出内循环,而不能退出外循环。例2-7break语句的应用2.4 控制语句
33、1111的最大真约数是1 2continue语句 continue语句用于结束本次循环,即跳过循环体中后面尚未执行的语句,执行下一次循环。 例2-8continue语句的应用2.4 控制语句3 return语句作用:从方法(子程序)中返回到它的调用者带值返回:可以从方法中返回一个原来子类型的值,也可以返回一个实例(对象)或数组。不带值返回:return语句跳出当前的方法,并返回到调用者,但不带任何值。 例2-9return语句的应用2.4 控制语句我被执行! 数组是Java语言的一种引用类型,它是由类型相同的元素组成的有顺序的数据集合。 在一个数组中: 1每个元素的数据类型都是相同的。 2数组
34、中的各个元素都是有顺序的。 3所有元素共用一个数组名,利用数组名和数组下标来唯一地确定数组中每个元素的位置。 4数组要经过声明、分配内存及赋值后,才能被使用。2.5 数组一维数组 一维数组的定义分为声明和为数组分配内存空间两步进行。 1一维数组的声明 一维数组的一般声明方式为: type arrayName; 或者type arrayName; 2.5 数组包括基本数据类型和引用数据类型 合法的标识符注意:在 里面什么都不能有 2创建数组空间 arrayName= new typearraysize; 例如: int a ; a= new int20; 也可以将声明与分配内存空间合成一条语句。
35、 例如: int a = new int20;2.5 数组和 C 语言不同,Java 允许使用 int 型变量指定数组的大小。例如: int size=30; double number=new doublesize;一维数组在声明的时候, 里面是什么都不能有的,但是在使用new运算符进行构造的时候,必须指明数组的长度,只有这样系统才能知道应该给这个数组分配多少内存。2.5 数组 3一维数组的初始化 当一个数组用new为数组分配内存后,自动用数据类型的缺省值初始化所有的数组元素。 类型初始化值charu0000int0long0lfloat0.0fdouble0.0dbooleanfalse引
36、用类型null2.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采用冒泡排序算
37、法将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
38、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,
39、5,6,7; 在Java语言中,从最高维至最低维分配空间。分配空间时当前最高维必须指定长度,其余低维可不指定长度;但不允许最高维不指定长度而其余低维指定长度。2.5 数组数组排序 可以使用循环实现对数组的排序,也可以使用循环查找一个数据是否在一个排序的数组中。除了前面介绍的冒泡排序算法外,Arrays类中定义的sort方法实现了对数组的快速排序。 例2-11二分查找数组中的元素 2.5 数组第3章 Java面向对象编程类 2static和this关键字 4面向对象基础 31对象33访问权限6包35本章内容提要 面向对象的程序设计方法力求符合人脑的思维方式,通过符合人类思维的更抽象的客观世界模型
40、,降低、分解问题的难度和复杂性,并以此来解决问题。 与结构化的程序设计方法有何区别?3. 面向对象基础 面向对象的基本原理 面向对象方法学是面向对象程序设计技术的理论基础。该理论的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与人类的认知过程同步,通过对人类认识客观世界及事物发展过程的抽象,建立规范的分析设计方法,由此使程序具有良好的封装性、可读性、可维护性、可重用性等一系列优点。 3. 面向对象基础面向对象的基本概念 1对象对象就是现实世界中实体在计算机逻辑中的映射和体现。实体都具有一定的属性和行为。 从面向对象的观点来看,所有的面向对象的程序都是由对象构成的。3. 面向
41、对象基础 2类 类就是具有相同或相似属性和行为的对象的抽象。 在面向对象的程序设计中,类与对象是抽象与具体的关系。 3. 面向对象基础 3属性对象的属性主要用来描述对象的状态。属性用变量来定义。 4行为对象的行为又称为对象的操作,主要描述对象内部的各种动态信息。 行为用方法来刻画。3. 面向对象基础 面向对象编程的特点 1封装 封装,就是将事物的内部实现细节隐藏起来,对外提供一致的公共的接口间接访问隐藏数据。 优点:使得Java程序具有良好的可维护性 使得代码的重用性大为提高 3. 面向对象基础 2继承当一个类拥有另一个类的数据和操作时,就称这两个类具有继承关系。被继承的类称为父类或超类,继承
42、父类的类称为子类。 继承有单重继承和多重继承之分。 优点:使得面向对象的程序结构清晰,易于理解。 3. 面向对象基础 3.多态多态指多种表现形式,就是对象响应外部激励而使其形式发生改变的现象。 多态有两种情况: 一种是通过类之间继承导致的同名方法覆盖体现的,另一种是通过同一个类中同名方法的重载体现的。 优点:提高了程序的抽象程度和简洁性。 3. 面向对象基础1.类的声明 class 类名 类体的内容 例如: class Student /定义类Student 3.2 类 2.类体 class 通常,Java中把成员变量放在方法前面定义。3.2 类成员变量 在类体中并且在方法之外定义的变量称为成
43、员变量。 修饰符 变量类型 变量名; 例如: Integer stuAge; int age = 9;3.2 类 成员方法 1方法定义 方法也由两部分组成,即方法头和方法体。 返回值类型 方法名(参数列表) 3.2 类 (1)方法修饰符 方法修饰符控制方法在什么条件下使用以及如何使用,包括public(公有的)、private(私有的)及protected(保护的)。 (2)返回值类型 返回值类型可以是基本数据类型、应用类型(引用类型)以及void(空类型)。 3.2 类 (3)方法名 (4)形参列表 形参列表是以“,”分开的、参数的数据类型和变量名的列表。 (,) 3.2 类 2方法体 方法
44、的功能实现部分,主要由局部变量和语句构成。 方法体也可以是空的,即没有任何变量和语句。 例如: void setName(String name) 例3-1方法的定义3.2 类构造方法 (1)构造方法的方法名与类名相同。(2)构造方法不允许声明返回值。(3)构造方法的作用是完成对类对象的初始化。(4)构造方法只能通过new运算符调用,不能通过 对象或类调用。(5)一个类可以定义多个构造方法。 3.2 类例3-2构造方法的定义构造方法的作用:(1)为每个新建的对象赋初始值,从而保证每一个新建的对象处于合理正常的状态。(2)引入更多的灵活度,使得初始化工作不仅仅包括成员变量的赋值,还可以有更复杂的
45、操作。 3.2 类对象创建1声明对象 type objectname; 例如: Student xiaolin; 3.3 对象xiaolin 2建立对象并初始化 实际上就是将一个类实例化,这是通过new关键字来完成的。 例如: new Student(小林,1001,12); 3.3 对象小林100112 对象引用被赋值后,将指向一个真正的对象,即对象引用的内存空间中存储这个新建立对象的内存空间的首地址,那么通过对象引用就可以访问这个对象的所有可以访问的成员了。3.3 对象小林1001120 x032xiaolin0 x1032 通过同一个类模板可以声明多个对象引用,也可以建立并初始化多个对象
46、: Student xiaolin , xiaofei; xiaolin = new Student(小林,1001,12); xiaofei = new Student(小飞i,1002,16); Student xiaoqiang = xiaolin;3.3 对象例3-3创建对象判断对象a的引用是否存在a!= null或 a=null;判断a、b两个对象的引用是否相等a=b;判断a、b两个对象的值是否相等 a.equals(b)。3.3 对象使用对象 有两种方式使用对象: 一是通过对对象变量的引用来使用对象; objectRenference.variable; 二是通过调用对象的方法来使
47、用对象。 objectRenference.methodName(paramlist);3.3 对象例3-4使用对象3.3 对象 姓名:王非 学号:10011 学院编号:11 姓名:黎明 学号:10012 学院编号:12 对象引用与对象实体 对象引用和对象实体是相互独立的。例3-5通过对象引用遥控对象实体3.3 对象 学生: 小明 学生: 小明 学生: 小强 学生: 小强 null垃圾回收机制 Java中,对象使用的内存空间的释放是自动完成的,不需要在编码时考虑对象的释放问题。Java运行系统具有所谓的“垃圾回收机制”,垃圾回收器(garbage cllectors,GC)在后台运行,定时查看
48、所有对象,识别那些不再被引用的对象(垃圾),给予释放,回收分配给这些对象的内存。 3.3 对象 类变量 被所有的类的所有实例共享的变量称为类变量(class variable),类变量用修饰符static描述。 3.4 static关键字 常量 常量(constant)就是一旦赋值就不能更改其值的变量。 命名常量以关键字final修饰,其类型可以是基本类型和引用类型。 例3-6类变量的定义与访问3.4 static关键字 类方法 类方法(class method,又成为静态方法)也是以static修饰的方法。 例3-7通过类方法访问类变量 一般在以下两种情况下使用类方法: 1如果方法的所有参数
49、可以直接给定,不需要访问实例变量时。 2如果方法仅仅访问类变量时。3.4 static关键字 静态代码快 静态代码块是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 3.4 static关键字 在构造方法中使用this this出现在类的构造方法中时,代表使用该构造方法时所创建的对象。 例3-8在构造方法中使用this 3.5 this关键字 在实例方法中使用this 当this关键字出现在实例方法中时,代表
50、正在使用该方法的当前对象。实例方法可以操作类的成员变量,当实例成员变量在实例方法中出现时,默认的格式是: this.成员变量 类的实例方法可以调用类的其他方法,对于实例方法调用的默认格式是: this.方法名(参数列表) 3.5 this关键字 为了更好的管理这些类,Java引入了包的概念。 包是一种类似于文件夹的一种组织形式,包把各种类组织起来,一方面对类的命名空间进行管理,另一方面作为隐含的访问控制修饰符,是信息隐藏和封装的有力工具。 3.6 包 包的概念 为了方便管理,通常将需要在一起工作的类放在一个包中。只要包名是惟一的,那么包中的类就有了惟一的类全名。包的引入解决了类名冲突问题。 包
51、是一种多层次的组织结构,其成员有子包、类和接口。 3.6 包 创建包 创建包需要使用关键字package,其一般的格式和语法为:package 包名; 这条语句必须位于源文件的第一行,并且在同一个源文件中只能编写一条package语句。 例如: package newpackage; package society.family; 例3-9创建包3.6 包 导入包 1使用类全名 例3-10使用类全名3.6 包A0 100 10A1 101 11A2 102 12A3 103 13A4 104 14 2导入需要的使用的类 利用import关键字,将需要使用的类导入到当前程序中, 例3-11导入需
52、要的类3.6 包 3导入整个包 包中的所有的类都被加载到当前文件中。 例如: import schools.*; 所有的Java程序自动导入java.lang包,因此,import java.lang.*语句可以省略不写。另外编译器在查找需要的类时有特定的查找顺序,先是Java基本类库中的类,后是用户自定义的类。3.6 包 4文件打包 (1)将应用程序压缩成JAR文件 可以使用jar.exe命令把一些文件压缩成一个JAR文件来发布应用程序。可以把Java应用程序中涉及的类压缩成一个JAR文件,然后 Java解释器执行这个压缩文件。3.6 包 4文件打包(2)更新、查看JAR文件 可以使用参数t
53、和f查看一个JAR文件中的内容,如: jar -tf Tom.jar 使用参数x和f解压JAR文件: jar -xf Tom.jar 使用参数u和f更新一个JAR文件,例如将Third.class文件增加至Test.jar中的命令为: jar uf Test.jar Third.class3.6 包 Java有四种类成员的访问控制形式,分别为缺省的(默认的)、公有的、保护的、私有的。 类的每个成员都有自己的访问修饰符,但最多只能使用一个访问修饰符,并且访问修饰符必须放在其他修饰符之前。 如果类不可访问,则其成员也不可访问,因此讨论类成员的访问控制的前提必须是类是可访问的。3.7 访问权限 1p
54、rivate修饰符 private修饰的成员变量和方法仅能在其类的方法中被访问,其他类无法直接访问。 【例3-12】私有成员的定义和使用 false xiaoming:1000 xiaoming:10013.7 访问权限 2无修饰符 如果成员没有指定任何访问修饰符,则表示该成员具有缺省的访问权限, 3protected修饰符 protected修饰符表示成员的访问权限局限在同一个包的其他类以及其子类(可以属于其他包)中。3.7 访问权限 4public修饰符 public修饰符表示类成员公用的。 为了使程序具有良好易读的风格,建议最好在编写类代码时用不同的可访问性来组织类成员,并将public
55、成员作为对外公布的接口放在最前面,以便引起关注。3.7 访问权限 第4章 深入面向对象程序设计 多态 2接口 4继承 31抽象类 33内部类 35本章内容提要 面向对象的程序设计方法力求符合人脑的思维方式,通过符合人类思维的更抽象的客观世界模型,降低、分解问题的难度和复杂性,并以此来解决问题。 4. 继承 继承的定义 在Java语言中,用extends关键字来表示一个类继承了另一个类,被继承的类称为父类、超类或基类,派生的新类称为子类。 例如: public class Sub extends Base 4. 继承 1父类与子类 父类和子类的关系可以用自然语言描述为 : 子类is a父类。 例
56、4-1子类继承父类 子类与父类的关系类似于家族关系,继承关系可以一直传递下去。4. 继承 2继承的限制 (1)子类和父类位于同一个包中 子类继承父类中public、protected和默认访问级别的成员变量和成员方法。 (2)子类和父类位于不同的包中 子类继承父类中public和protected访问级别的成员变量和成员方法。 例4-2继承的限制 4. 继承 3类继承的原则 (1)子类只能有一个直接父类 (2)继承具有传递性 (3)继承不能循环 (4)除Object类外,所有类都有父类4. 继承 4子类对象的构造 当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方
57、法。如果子类的构造方法没有明确地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。例4-3子类对象调用继承的方法操作未继承的成员变量 4. 继承成员变量隐藏 子类继承父类时,不需要重新定义父类中可以被继承的属性。 某些情况下,子类需要对从父类继承来的属性变量重新加以定义,使父类和子类的属性同名但不同值,这种机制称为成员变量的隐藏。 例4-4成员变量隐藏 4. 继承 方法重写 如果在子类中定义的一个方法,其名称、返回类型及参数定义正好与父类中某个方法的名称、返回类型及参数定义相同,则可以说,子类的方法重写了父类的方法。 方法的参数定义相同指方法中所有对应顺序的参数的类型相同,并且参
58、数的个数相同。 4. 继承【例4-5】方法重写4. 继承直接访问父类的学制:4直接访问子类的学制:3调用子类的方法访问子类的学制:3 方法重写的其他要求:(1)子类方法不能缩小父类方法的访问权限。 (2)子类方法不能抛出比父类方法更多的异常。 (3)方法重写只存在于子类和父类(包括直接父 类和间接父类)之间。 4. 继承 (4)父类的静态方法不能被子类覆盖为非静态方 法。 (5)子类可以定义与父类的静态方法同名的静态方 法,以便在子类中隐藏父类的静态方法 (6)父类的非静态方法不能被子类覆盖为静态方 法。 (7)父类的私有方法不能被子类覆盖。 4. 继承 super关键字 1调用构造方法 在子
59、类的构造方法中,可以使用super代表指定的某个父类的构造方法。 当调用子类的构造方法创建对象时,如果在子类的构造方法中没有显式的调用父类的构造方法,则super()方法将被自动调用。4. 继承【例4-6】super关键字4. 继承create a student:John, he is a graduateStudentcreate a student:Tom, he is a graduateStudenthis tutor:Bill, his specialty direction:computer 2引用隐藏变量 在Java语言中,变量的隐藏有两种: 其一,子类成员变量和父类成员变量同
60、名,父类变量隐藏; 其二,类的局部变量和类的成员变量同名,隐藏类的成员变量。4. 继承【例4-7】访问被隐藏的变量4. 继承stu_no = 40011stu_no is 30011stu_no of Student is 10011stu_no of GraduateStudent is 20011 3调用被重写方法 当子类的某个方法重写了父类的一个方法,可以通过super关键字访问父类的方法,而通过this关键字则可以访问当前类中的方法。 super关键字不能多重使用。例如,super.super()就是非法操作。 4. 继承 【例4-8】重写方法的访问4. 继承stu_no of Stu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公设备维护与维修电子教案 模块三 商务办公 项目二 办公设备日常维护
- 2025年转租的房屋租赁合同范本
- 2025标准供货合同范本参考
- 小儿获得性免疫缺陷综合征肾病的临床护理
- 先天性肝囊肿的临床护理
- 2025房屋租赁合同书范本
- 2025新款房屋抵押贷款合同范本
- 2025年消防设施操作员之消防设备中级技能提升训练试卷A卷附答案
- 2025年初级银行从业资格之初级个人理财模考预测题库(夺冠系列)
- 2025年注册测绘师之测绘综合能力能力检测试卷B卷附答案
- Unit2-social-media-detox课件-高一英语外研版(2019)选择性必修二
- 2023版设备管理体系标准
- 空乘 空中老幼孕乘客服务现状、困难及对策分析
- 01S201室外消火栓安装图集
- 亲子沟通主题班会课件:有效的亲子沟通
- 双语 -【白皮书】新时代的中国绿色发展
- 康复医学科全新笔记汇总
- 肝癌肝移植的进展和展望
- 传统蝉花活体人工培养新技术
- 城市设计原理-西安建筑科技大学中国大学mooc课后章节答案期末考试题库2023年
- 学校食堂日管控周排查月调度样表
评论
0/150
提交评论