




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章 Java语言概述本章的主要内容:1.1 Java语言的发展里程1.2 java 的特点及有关概念1.3 Java程序开发1.1 Java语言的发展里程Java语言前身是Oak语言,于1991年推出,但仅限于Sun Microsystems公司内部使用。1995年Oak语言改名为“Java”,并正式向公众推出,主要贡献者是James Gosling。1.2版本的Java是Java语言发展过程中一个关键阶段,从此,Sun公司将Java更名为Java2。经过十年的发展,Java语言已经发展到1.6版本。版本号名称中文名发布日期JDK1.01996-1-23JDK1.1.4Sparkler宝石
2、1997-09-12JDK1.1.5Pumpkin南瓜1997-12-13JDK1.1.6Abigail阿比盖尔-女子名1998-04-24JDK1.1.7Brutus布鲁图-古罗马政治家和将军1998-09-28JDK1.1.8Chelsea切尔西-城市名1999-04-08J2SE1.2Playground运动场1998-12-04J2SE1.2.1none无1999-03-30J2SE1.2.2Cricket蟋蟀1999-07-08J2SE1.3Kestrel美洲红隼2000-05-08J2SE1.3.1Ladybird瓢虫2001-05-17J2SE1.4.0Merlin灰背隼2002
3、-02-13J2SE1.4.1grasshopper蚱蜢2002-09-16J2SE1.4.2Mantis螳螂2003-06-26J2SE5.0(1.5.0)Tiger老虎2004-9-30J2SE6.0(Beta)Mustang野马2006-41.2 java 的特点及有关概念1.2.1 Java语言的特点1.2.2 平台无关性1.2.3 Java虚拟机1.2.4 Java与C/C+关系1.2.1 java 的特点1语法简单(1)Java的风格类似于C+(2)Java摒弃了C+中容易引发程序错误的地方,如指针和内存管理;(3)Java提供了丰富的类库。2面向对象面向对象编程是一种先进的编程思
4、想,更加容易解决复杂的问题。面向对象可以说是Java最重要的特性。Java语言的设计完全是面向对象的,1.2 java 的特点(2/4)3分布式JAVA从诞生就起就与网络联系在一起,它强调网络特性,内置TCP/IP,HTTP,FTP协议类库,便于开发网上应用系统。4安全性(1)在Java语言里,象指针和释放内存等C+功能被删除,避免了非法内存操作。(2)当Java用来创建浏览器时,语言功能和一些浏览器本身提供的功能结合起来,使它更安全。Java语言在机器上执行前,要经过很多次的测试。其三级安全检验机制可以有效防止非法代码侵入,阻止对内存的越权访问。51.2 java 的特点(3/4)5健壮性J
5、ava致力于检查程序在编译和运行时的错误。异常检查可尽早的发现可能存在的错误。类型检查帮助检查出许多开发早期出现的错误。6解释运行,高效率Java解释器(运行系统)能直接运行目标代码指令。Java程序经编译器编译,生成的字节码经过精心设计,并进行了优化,因此运行速度较快,客服了以往解释性语言运行效率低的缺点。1.2 java 的特点(4/4)7与平台无关JAVA编译器将JAVA程序编译成二进制代码,即字节码。字节码有统一的格式,不依赖于具体的硬件环境。8多线程Java提供的多线程功能使得在一个程序里可同时执行多个小任务。9动态性Java的动态特性是其面向对象设计方法的发展。它允许程序动态地装入
6、运行过程中所需要的类。1.2.2 平台无关性(1/2)平台无关类型包括源代码级和目标代码级两种类型。C和C+属于源代码级平台无关,意味着用其写的应用程序不用修改只需重新编译就可以在不同平台上运行。Java属于目标代码级平台无关,主要靠Java虚拟机JVM来实现。对高级语言的翻译方式有解释和编译两种解释方式就是一边翻译一边运行而编译方式则是一次性翻译好,生成目标程序。1.3 平台无关性(2/2)解决移植性的方法有以下两种方式:方式1:到一台机器上将源程序重新编译成适合该台机器的机器代码。方式2:将高级语言源程序编译成一种与机器无关的中间代码(如Java语言的字节码),该中间代码程序不能被操作系统
7、直接执行,需要由解释其来解释和执行。Java语言采用方式2,将由解释程序扩展了的指令系统的机器称为Java虚拟机,简称JVM。1.2.3 Java虚拟机JVM虚拟机是一种对计算机物理硬件计算环境的软件实现。虚拟机是一种抽象机器,内部包含一个解释器(Interpreter),可以将其它高级语言编译为虚拟机的解释器可以执行的代码(称这种代码为中间语言 Intermediate Language),实现高级语言程序的可移植性平台无关性 (System Independence),无论是运行在嵌入式设备还是多个处理器的服务器上,虚拟机都执行相同的指令,所使用的支持库也具有标准的API和完全相同或相似的
8、行为。1.4 Java虚拟机JVMJava虚拟机(Java Virtual Machine,简称JVM)是一种抽象机器,它附着在具体操作系统上,本身具有一套虚拟机器指令,并有自己的栈,寄存器等,运行JAVA程序不可少的机制。编译后的JAVA程序指令并不直接在硬件系统CPU上执行,而是在JVM执行。在JVM上有一个Java解释器用来解释Java编译器编译后的程序。任何一台机器只要配备了解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。图1-1 计算机硬件、操作系统、JVM与各种可执行程序之间的关系机器代码硬件操作系统JVM本地可执行文件(.exe,.com文件)Java字节码文件
9、(.class文件)1.4 Java虚拟机JVMJVM体系结构图类装载器字节码解释器安全管理器垃圾收集器线程管理图形Java虚拟机操作系统字节码 *.class 文件图1-2 Java虚拟机体系结构示意图1.2.4 Java 与C/C+之关系相近之处Java中许多基本语句的语法和C+一样,像常用的循环语句、控制语句等和C+几乎一样Java和C+是两种完全不同的语言不同之处(见下页)不同之处Java去掉了C+语言的许多功能,Java中没有#include 和#define 等预处理功能,用import语来句包含其它类和包;Java中没有structure,union及typedef;Java中没
10、有不属于类成员的函数,没有指针和多重继承,Java只支持单重继承;Java中禁用goto,但goto还是保留的关键字;Java中没有操作符重载;Java中没有全局变量,可以在类中定义公用、静态的数据成员实现相同功能。1.3 Java运行平台1.3.1 Java运行平台1.3.2 Java开发过程1.3.3 Java开发工具箱(JDK)简介1.3.1 Java运行平台1三种平台简介 J2SE:Java标准版或Java 标准平台。J2SE 提供了标准的SDK开发平台(以前称做JDK开发平台)。 J2EE:Java企业版或Java企业平台。 J2ME:Java微型版或Java小型平台。1.6 Jav
11、a运行平台2环境变量JAVA_HOME为那些需要使用Java命令和JVM的程序提供了通用的路径信息,其值应设置为JDK的安装目录的路径, JAVA_HOME= C:jdk1.5CLASSPATH用于指明字节码文件的位置。 CLASSPATH=c:jdk1.5jrelibrt.jar;.PATH是操作系统使用的变量,用于搜索在Shell中输入的希望执行的命令。1.6 Java运行平台3JDK1.6版本安装从网站下载jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,然后安装该程序。Java编译器源文件编辑器字节码文件由Web浏览器执行文件名.j
12、ava产生对于Java小应用程序对于Java应用程序由Java解释器执行图1-1 Java程序开发过程示意图1.3.2 Java程序开发过程1Java应用程序的开发编写源文件Editplus等文本编辑器生成Hello.java编译源文件生成字节码 javac Hello.java加载运行字节码 java HelloJava源程序的命名特点:(1)区分大小写;(2)如果在源程序中包含有public类,则该源文件名必须与该public类的名字完全一致;(3)如果源程序中不包含public类,则该源文件名可以与源文件中包含的任意类的名称一致。通常将与源文件名相同的类定义为主类,换句话说Java程序文
13、件名必须和主类的名称一致,且扩展名是java。主类按如下确定:(1)若源文件中存在public类,则该类为主类;(2)若源文件没有public类,则可定义任何类为主类。对Application程序而言,必须有一个类含有public static void main(String args )方法,args是main方法的一个参数,是一个字符串类型的数组(注意String的第一个字母是大写的)通常以包含main方法的类作主类。也可以将其他类定义为public类,并以此作为源程序名称,当在java命令后跟随的类参数名应该为包含main方法的类名/Hello.javapublic class Hel
14、lo public static void main(String args ) System.out.println(你好,很高兴学习Java); C:javac Hello.javaC:java Hello2Java Applet程序的开发编写源文件 Editplus等文本编辑器Boy.java编译源文件生成字节码 javac Boy.java通过浏览器加载运行字节码 Html文件myBoy.html 或appletviewew myboy.html/Boy.javaimport java.applet.*; import java.awt.*;public class Boy exten
15、ds Applet public void paint(Graphics g) g.setColor(Color.blue); g.drawString(Java是一门很优秀的语言,12,30); g.setColor(Color.red); g.drawString(我一定认真学习Java,22,56); /myBoy.html C:javac Boy.javaC: appletviewew myboy.html1.3.3 Java 开发工具箱Java 开发工具箱(JDK- Java Development Kit)是Sun公司为用户提供的集成和执行applets和应用程序的工具javac
16、编译器:可以用任何文字编辑器创建Java程序java 翻译器;用于执行编译过的 Java应用程序。appletviewer:可运行applets而不必运行 Web浏览器。javap反汇编程序:从字节码文件恢复java原代码。 javadoc工具 :可以为所编写的源文件生成HTML文档第2章 Java语言基础2.1 Java程序概况2.2 基本数据类型2.3 运算符和表达式2.4 Java语句2.1 Java程序概况2.1.1 Java程序结构2.1.2 Java注释2.1.3 Java关键字2.1.4 Java标识符2.1.5 变量与常量2.1.1 Java程序结构Java源程序一般由一个或多
17、个编译单元组成,每个编译单元只能包含以下内容(空格和注释除外):package包语句import导入语句类的声明接口声明图2-1 Java程序中各元素及其关系注释0.npackage0.1import0.n成员变量0.n方法0.n局部变量0.n执行语句0.n类1.nJava程序/*这是一个简单的Java程序示例程序*/package mypack;import java.util.*;public class Example public static void main (String args ) System.out.println(Java欢迎您!); 2.1.2 Java注释方式1:
18、/注释一行例如: num=2; /num是计算器,用于累计选课人数方式2:/*一行或多行注释*/例如: /*本方法用于计算阶乘*/方式3:/*文档注释*/文档注释一般放在一个变量或函数定义说明之前,表示该段注释应包含在自动生成的任何文档中(即由javadoc生成的HTML文件)。这种注释都是声明条目的描述。2.1.3 Java关键字abstractconstfinallyinterfacereturnthrowbooleancontinuefloatlongsafetransientbreakdefaultfornativeshorttruebydogotonewstatictrybytedo
19、ubleifnullsupervaluecaseelseimplementspackageswitchvoidcatchextendsimportprivatesynchronizedvolatilecharfalseinstanceofprotectedthiswhileclassfinalintpublicthread2.1.4 Java标识符所谓标识符就是用来标识包名、类名、接口名、变量名、方法名、文件名等的有效字符序列。由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。标识符中的字母是区分大小写的例子:判断正误 (1)3max (2)class (3)room# (4)us
20、erName (5)User_name一般标识符按照以下规则命名:(1)标识符尽量采用有意义的字符序列,便于从标识符识别出所代表的基本含义。(2)包名:包名是全小写的名词,中间可以由点分隔开,例如:java.awt.event。(3)类名:首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如class HelloWorldApp。(4)接口名:命名规则与类名相同,例如interface Collection。(5)方法名:往往由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,例如:balanceAccount,isButtonPressed
21、。(6)变量名:全小写,一般为名词,例如使用area表示面积变量,length表示程度变量,等等。(7)常量名:基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,例如:int YEAR, int MAX_VALUE;如果是对象类型的常量,则是大小写混合,由大写字母把单词隔开。(8)对变量和方法,其名称不宜以_和$为第一个字符,因为这两个字符对于内部有特殊含义。2.1.5 变量与常量Java变量是一个由标识符命名的项。变量具有一定类型,例如 int 型或class型,也具有作用域,其值可被改变。变量声明的语法形式如下: varType varName=value , varN
22、ame=value; double area,r;在变量声明格式前加上final修饰符,就声明了一个常量。常量一旦被初始化以后就不可改变。常量声明的语法形式如下:final varType varName=value , varName=value;2.2 基本数据类型2.2.1 基本数据类型概况2.2.2 基本数据类型转换2.2.1 基本数据类型概况基本数据类型也称作简单数据类型,Java语言有8种简单数据类型,分别是:boolean、byte 、short、int、long、float、double、char。复合数据类型包括数组、类和接口等。图2-2 Java语言数据类型数值类型整数类
23、int, byte, short, long 浮点类 double, float逻辑类 boolean字符类 char数组 type类 class接口 interface数据类型基本数据类型复合数据类型2.2.1 基本数据类型概况1逻辑类型常量:true ,false。变量的定义:使用关键字boolean来定义逻辑变量,定义时也可以赋给初值。例如:boolean x;/定义逻辑型变量xboolean x=false; /定义逻辑型变量x,并赋值为false2.2.1 基本数据类型概况2整数类型常量:123,6000(十进制),077(八进制),0 x3ABC(十六进制)。整型变量的定义分为4种
24、类型举例字节长度bytebyte x,y=1;1shortshort x,y=2;2intint x,y=3;4longlong x,y=4;82.2.1 基本数据类型概况3字符类型常量: unicode字符表中的字符就是一个字符常量例如A,?,9,好,等。Java还使用转意字符常量,如:n为换行转意字符常量。变量的定义:使用关键字char来定义字符变量例如:char x= A,漂亮=假,jiafei;特别提示:一个unicode字符占2个字节char型变量,内存分配给2个字节,占16位,最高位不是符号位,没有负数的char。char型变量的取值范围是0-65536。运行结果为:字符中在uni
25、code表的位置为20013字符#在unicode表的位置为35在unicode表中序号为 97 的字符为a在unicode表中序号为 21556 的字符为吴说明:将line 10所在行的语句“ch1=(char)i”;变为“ch1=97;”可以得到同样结果,可是将该语句变为“ch1=i;”则将出错。详细原因请见随后的类型转换部分。2.2.1 基本数据类型概况4浮点类型浮点类型包括float 型和double型。浮点型数值缺省为double型,float型在数值之后加f或F例如,float 型常量:453.5439f,21379.987F,2e40f,double型常量:21389.5439d
26、(d可以省略),6e-140。float 型变量的定义:float x,y=22.76f;double型变量的定义:double x,y=12.762.2.2 基本数据类型转换含义:一种基本数据类型变量转变成另一种基本类型变量。类型转换方式:窄化和拓宽转换。拓宽(Widening)转换编译时可以自动执行拓宽转换(称为Promotion,提升)。窄化(Narrowing)转换则总是要求显式执行强制转换(称为Cast,转型)。Java语言中不同类型之间不能相互赋值,同种类型低精度值可以赋给高精度变量,反之则需要使用强制类转换,此时可能导致数据精度的损失。2.2.2 基本数据类型转换数据精度从“低”
27、到“高”排序: byteshort(char) intlongfloatdouble规则1:当把精度低的变量的值赋给精度高的变量时,系统自动完成数据类型的转换,如int型转换成long型规则2:当把精度高的变量的值赋给精度低的变量时,必须使用显示类型转换运算。 (类型名)要转换的值; int x=(int)34.89;规则3:char与byte或short之间的赋值必须实行强制转换。2.2.2 基本数据类型转换byte b1=18,b2;short sint1,sint2;char ch1,ch2=A;ch1=char(b1); b2=(byte)ch2;s int2=(short)ch2;注
28、意事项:强制转换运算可能导致精度的损失。当把一个整数赋值给一个byte、short、int或long型变量时,不可以超出这些变量的取值范围,否则必须进行类型转换运算。 public class Exam020204 public static void main(String args ) byte a=120; short b=255; int c=2200; long d=8000; float f; double g=0.1234567812345678; b=a; c=(int)d; f=(float)g; System.out.println(a=+a); System.out.pr
29、intln(b=+b); System.out.println(c=+c); System.out.println(d=+d); System.out.println(e=+e); System.out.println(f=+f); System.out.println(g=+g); 【实例2-3】 运行结果为:a=120b=120c=8000d=8000f=0.12345678g=0.12345678123456782.3 运算符和表达式2.3.1 算术运算符和算术表达式2.3.2 关系运算符与关系表达式2.3.3 逻辑运算符与逻辑表达式2.3.4 赋值运算符与赋值表达式2.3.5 位运算符
30、2.3.6 条件运算符2.3.7 instanceof 运算符2.3.8 一般表达式2.3.1 算术运算符和算术表达式Java算术运算符主要包括一元运算符(如+,-,+,-)和二元运算符(如,+,-,*,/,%),与C/C+基本相同算术表达式是用算术符号和操作元连接起来的符合Java语法规则的式子。例如: (f * b) + (i / c) - (d * s)2.3.1 算术运算符和算术表达式java将按运算符两边操作元的最高精度保留结果。操作元的精度从低到高排列顺序是:byteshortintlongfloatdouble。执行任何算术运算或按位运算,“比int小”的数据(char、byte
31、、short)在正式执行运算之前,那些值会自动转换成int整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。例如:若将一个float值与一个double值相乘,结果就是double;如将一个int值和一个long值相加,则结果为long。操作数1操作数2结果类型byte,short,charintintbyte,short,char,intlonglongbyte,short,char,int,longfloatfloatbyte,short,char,int,long,floatdoubledouble举例说明5/2 的结果为2,因为
32、运算符“/”左右操作数均为int型,因此结果也为int型;5.2/2的结果为2.5,因为运算符“/”左操作数为double型,右操作数为int型,因此运算时首先统一为double型,显然结果也为double型。class autoPromoteExample public static void main(String args) byte b = 1; char c = b; short s = 10; int i = 100; float f = 1.23f; double d = 6.78,result; result = (f * b) + (i / c) - (d * s); Sys
33、tem.out.println(result = + result); 以下说明表达式(f * b) + (i / c) - (d * s)计算过程中数据类型转换过程:首先,在第一个子表达式f*b 中,变量b被提升为float 类型,该子表达式的结果(称为中间值1)是float 类型。在子表达式i/c中,变量c被提升为int 类型,该子表达式的结果(称为中间值2)是int 类型。在子表达式d*s 中,变量s被提升为double 类型,该子表达式的结果(称为中间值3)是double 类型。其次,float 类型中间值1和int 类型中间值2的结果(称为中间值4)是float 类型。最后,floa
34、t 类型中间值4和double 类型中间值3相减的结果是double 类型。因此,该表达式的最后结果是double 类型。2.3.2 关系运算符与关系表达式运算符表达式返回true的情况op1op2op1大于op2=op1=op2op1大于或等于op2op1op2op1小于op2=op1=op2op1小于或等于op2=op1=op2op1与op2相等!=op1!=op2op1与op2不等2.3.3 逻辑运算符与逻辑表达式操作数取值表达式运算结果op1op2op1&op2op1|op2!op1falsefalsefalsefalsetruefalsetruefalsetruetruetruefa
35、lsefalsetruefalsetruetruetruetruefalse2.3.4 赋值运算符与赋值表达式赋值运算符“=”是双目运算符,左面的操作元必须是变量。级别是14级,结合性从右到左。2.3.5 位运算符Java位运算符主要面对基本数据类型,包括byte、short、int、long和char。位运算符包括“按位与”&、 “按位或”|、“按位非”、 “按位异或” 、左移。此外,Java引入一个专门用于逻辑右移运算符,它采用了所谓的零扩展技术,不论原值是正或负,一律在高位补0。例如: int a= - 2 , b ; b=a30;2.3.6 条件运算符条件运算符是一个3目运算符,符号是
36、:“?:”。用法如下:op1?op2:op3要求第一个操作元op1的值必须是boolean型数据。运算法则是:当op1的值是true时,运算的结果是op2的值;当op1的值是false时,运算的结果是op3的值。Java要求:op2与op3必须同类型 。例如,128?100:200的结果是100;12y&x0?(x+1):y) 的值是 int型数据,结果为17。2.4 Java语句2.4.1 Java语句概述2.4.2 分支语句2.4.3 循环语句2.4.4 跳转语句2.4.5 输入输出语句2.4.1 Java语句概述Java语言中的语句可分为以下5类:(1)方法调用语句:例如 reader.
37、nextInt();(2)表达式语句:x=23;(3)复合语句: “” +代码块+“” ,例如, z=23+x; System.out.println(hello); (4)控制语句:条件分支语句、循环语句和跳转语句。(5)package 语句和 import语句2.4.2 分支语句1条件分支语句if-else语句.if(表达式) 若干语句else 若干语句多条件if-else if-else语句if(表达式1) 若干语句 else if(表达式2) 若干语句 else if(表达式n) 若干语句 else 若干语句 if(表达式) 的表达式的值必须是boolean型 public class
38、 multelseExample public static void main(String args ) int score=88;String str=不及格;if (score=90 & score =80 & score=70 & score=60 & score=69)str=及格;System.out.println(成绩为+str); 2.4.2 分支语句switch(表达式) case 常量值1: 若干个语句 break; case 常量值n: 若干个语句 break; default: 若干语句图2-6 switch语句执行过程示意图case 值1语句块1break;tru
39、efalsecase 值2语句块1break;truefalsecase 值n语句块1break;truefalsedefault:语句块(n+1)public class switchExample public static void main(String args ) int month=1;String str=;switch(month)case 1:case 2:case 3:str=春季;break;case 4:case 5:case 6:str=夏季;break;case 7:case 8:case 9:str=秋季;break;default:str=冬季;System.
40、out.println(月份+month+属于+str); 2.4.3 循环语句1while循环 while(表达式) 若干语句 2do while循环do while 若干语句 (表达式)3for循环for (表达式1;表达式2;表达式3) 若干语句 “表达式2”必须是一个求值为boolean型数据的表达式(b) do while循环循环体True表达式False循环体True表达式False表达式1True表达式2False循环体表达式3(a) while循环(c) for循环图2-3 while 、do while循环和for循环示意图2.4.4 跳转语句1.break语句2.conti
41、nue语句3.return语句1.Break语句break语句的作用为:(1) 在switch语中,break语句用来终止switch语句的执行。使程序从switch语句后的第一个语句开始执行。(2)跳出它所指定的块,并从紧跟该块的第一条语句处执行。说明:一个代码块通常是用大括号括起来的一段代码。加标号的格式如下: BlockLabel: 代码块 break语句的使用形式:break; /不带标签break Label; /带标签说明不带标签的break语句使程序跳出它所在的那一层循环结构。带标签的break语句使程序跳出标签所指示的循环结构。【实例2-9】break命令应用举例public
42、class breakExamplepublic static void main(String args )int i,j=0;outer: for(i=0;i5;i+)for(j=0;j5;j+)System.out.println(i+ +j);if(j=1)break outer; System.out.println(最终值:+i+ +j); continue语句continue语句的作用:用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,对for循环,就是忽略循环体中后面的语句,跳到表达式3执行。对while或do whi
43、le循环就是直接转去求解逻辑表达式。continue语句的使用格式为:continue; /不带标签continue Lable; /带标签说明:不带标签的continue语句的作用是终止当前循环结构的本轮循环而直接开始下一轮循环。带标签的continue语句的作用就是把程序直接转到标签所指的循环结构的下一次循环,而不管被它嵌套的以及continue语句所在的循环结构运行到了哪一轮。【实例2-10】continue命令应用举例public class continueExample public static void main(String args) int sum=0,i,j; for(
44、 i=1;i60) y=10;z=y-x;System.out.print(z=+z);public class localVarExamplepublic static void main(String args) A a=new A();a.f(); 说明:在本实例中,表面上通过执行语句“if (x60) y=10;”对y进行了赋值,实际上由于x是Math.random()产生的随机数,有可能大于60,也有可能小于60,若x小于60,则在使用y(即执行语句z=y-x)之前,y没有被显式赋值,故会出现以上错误提示。为避免这类错误,必须确保y在使用之前被显式赋值。一个简单的办法就是在申明y之时
45、,可y赋值。如: int y=0,z; /line2 当然这种解决办法要看具体功能而定。引用赋值举例class Point int x,y;Point() x=67;y=10;Point(int x,int y)this.x=x;this.y=y;void showXY()System.out.println(点(x,y)为+(+x+,+y+);public class classInitExamplepublic static void main(String args) Point p1=new Point();Point p2=new Point(6,18);p1.showXY();p2
46、.showXY();p1=p2;p1.showXY();p2.showXY();图3-6 内存映像示意图Point p1=new Point();10y0 x125p167xPoint p1=new Point(6,18);18y0 xA75p26xp1=p2;18y0 xA75p16x3.5 方法3.5.1 方法概述3.5.2 方法分类3.5.3 方法中值传递3.5.4 三个重要方法3.5.5 方法的递归调用3.5.1 方法概述方法是类的动态属性。对象的行为是由其方法来实现的。一个对象可以通过调用另一对象的方法来访问该对象。一定条件下,同一类中,不同的方法之间可以相互调用。在方法声明时,通过
47、修饰符可以对方法访问实施控制。在方法中,可以对类的成员变量进行访问,但不同类型的方法对不同类型的成员变量的访问是有限制的。 访问控制修饰符其他修饰符 返回值类型 方法名称(形式参数列表)抛出异常 可以对方法的访问实施控制,因其在前面已介绍,故在此不再赘述。可以是任何合法的Java数据类型。若方法没有返回值,则类型应定义为void。返回值由return语句来返回。可以是任何合法的Java标识符。可以是任何合法的Java语句集合。由方法运行时需要接收的数据及其类型组成,即格式如下: , ,3.5.2 方法分类实例方法和类方法实例方法能对类变量和实例变量操作,而类方法只能对类变量进行操作;类方法不仅
48、可以由对象调用而且还可以直接由类名调用,而实例方法不能由类名调用。一个类中的方法可以相互调用,但静态方法只能调用静态方法,不能调用实例方法。在创建对象之前,实例变量没有分配内存,实例方法也没有入口地址。【实例3-10】/指出方法类型class Aint a;static float b;float max(float x,float y)static float show()【实例3-11】指出错误class Aint i;static int j;void set1(int x,int y)i=x;j=y;static void set2(int z)i=z;j=z*z;void showX
49、Y()System.out.println(i=+i+.j=+j);public class methodvarExamplepublic static void main(String args) A a=new A();a.set1(10,20);a.showXY();a.set2(30);a.showXY();说明:在本实例中,在类A中方法set1()是实例方法,方法set2()是类方法,变量x是实例变量,变量y是类变量。类方法只能操作类变量。上述程序中,类方法set2()中对实例变量x操作,显然是不合规则的。因此提示i=z有错。【实例3-12】指出错误class Aint i;stat
50、ic int j;void set1(int x,int y)i=x;j=y;static void set2(int z)j=z*z;void showXY()System.out.println(i=+i+.j=+j);【实例3-11】指出错误public class methodvarExample2public static void main(String args) A a=new A();a.set1(10,20);a.showXY();a.set2(30);a.showXY(); A.set1(10,20);A.showXY();A.set2(30);A.showXY();说明
51、:在本实例中,在类A中方法set1()和showXY是实例方法,方法set2()是类方法,类方法不仅可以由对象调用而且还可以直接由类名调用,而实例方法不能由类名调用。因此会出现上述错误。3.5.3 方法调用中数据传递1、值传递方法2、引用传递方法3、返回值方法4、实例变量和类变量传递方式1、值传递方法将调用方法的实参的值计算出来赋予被调用方法对应形参的一种数据传递方法。在这种数据传递方法下,被调用方法对形参的计算、加工与对应的实参已完全脱离关系。当被调方法执行结束,形参中的值可能发生变化,但是返回后,这些形参中的值将不会带到对应的实参中。“数据的单向传递”class Aint square(i
52、nt x)x=x*x;return x;public class paraTransExample1public static void main(String args)int y,z;A a=new A();y=10;z=a.square(y);System.out.println(y=+y+.z=+z);输出结果:x=10.y=100说明:类A中方法square有参数变量x(非引用型),在paraTransExample1中创建对象a后,通过a调用方法square,此时是通过值传递来实现给方法square的参数赋值的,由于是值传递,因此尽管方法square中参数变量x发生了改变,但这种改
53、变并不影响调用方法的实参y,即在调用方法square前,实参y的值为10,调用方法square后,实参y的值仍然为10。2、引用传递方法使用引用传递方法时,方法的参数类型一般是复合类型(引用类型)。复合类型变量中存储的是对象的引用,所以在参数转送中是传送引用,方法接收参数的引用,因此任何对形参的改变都会影响到对应的实参。“引用的单向传送,数据的双向传送”。以下举例说明:class Pointint x,y;void setXY(int x1,int y1)x=x1;y=y1;void squarePoint(Point p)p.x=p.x*p.x;p.y=p.y*p.y;public clas
54、s paraTransExample2public static void main(String args)Point p0=new Point();p0.setXY(10,20);System.out.println(x=+p0.x+.y=+p0.y);p0.squarePoint(p0);System.out.println(x=+p0.x+.y=+p0.y);运行结果为:x=10.y=20 x=100.y=400说明:在本实例中,类A中方法squarePoint有参数变量x是引用型,在paraTransExample2中创建对象a后,通过a调用方法squarePoint,当方法squa
55、rePoint中对x和y进行改变后,这种改变的结果会反映在实参p0中,这就是为什么调用方法squarePoint前x和y分别是10和20,调用方法squarePoint后x和y分别是100和400。3、返回值方法返回值方法不是在形参和实参之间传递数据,而是被调方法通过方法调用后直接将返回值送到调用方法中。使用返回值方法时,方法的返回值类型不能为void,且方法体中必须有带表达式的return语句,其中表达式的值就是方法的返回值。/Exam030508.javapublic class Exam030508public static void main(String args)int v1,v2
56、;v1=10;v2=12;System.out.println(max(+v1+,+v2+)=+max(v1,v2);static int max(int x,int y)if (xy) return x;else return y;4、实例变量和类变量传递方式实例变量和类变量传递方式也不是在形参和实参之间传递数据,而是利用在类中定义的实例变量和类变量是类中诸方法共享的变量的特点来传递数据/Exam030509.javaclass A static int x; int y; void setxy(int x1,int y1) x=x1;y=y1; int getx()return x; in
57、t gety() return y;运行结果为:a1(x,y)=(0,0)a2(x,y)=(0,0)a1(x,y)=(1,2)a2(x,y)=(1,0)a1(x,y)=(3,2)a2(x,y)=(3,4)说明:在本实例中,类A中成员变量x为static型,因为以A为基础创建的对象a1和a2对成员变量x公用一个相同的存储空间,则a1和a2调用方法setxy()都能改变成员变量x的值。3.5.3 三个重要方法1、构造方法2、main方法3、finalize方法1、构造方法Java通过构造方法来保证对每个对象进行初始化。构造方法是一种特殊的方法。Java中的每个类都有构造方法,用来初始化该类的一个新
58、的对象。构造方法具有和类名相同的名称,而且不返回任何数据类型,即void类型(void可以省略)。在构造方法的实现中,也可以进行方法重载。在类中没有构造方法时,使用默认的构造方法。构造方法在创建一个新对象时,同时给这个新对象分配内存创建对象进行初始化一般格式为: 新对象名 =new 构造方法();一个类中可能没有构造方法,此时使用默认的构造方法.使用默认的构造方法时,按照默认的方式对变量进行初始化,即数值型初始化为0,引用型初始化为null,逻辑型初始化为false。一个类中存在一个或多个构造方法【实例3-16】内中无构造方法class Point int x,y;void showXY()S
59、ystem.out.println(点(x,y)为+(+x+,+y+);public class methodsExample1public static void main(String args) Point p1=new Point();p1.showXY();运行结果为:点(x,y)为(0,0)说明:在本实例中,类A中没有构造方法,则使用默认的构造方法,x和y被初始化为0。【实例3-17】内中多个构造方法class Point int x,y;Point() x=1;y=1;Point(int x1,int y1)x=x1; y=y1;void showXY()System.out.p
60、rintln(点(x,y)为+(+x+,+y+);public class methodsExample2public static void main(String args) Point p1=new Point();Point p2=new Point(2,2);p1.showXY();p2.showXY();运行结果为:点(x,y)为(1,1)点(x,y)为(2,2)说明:在本实例中,类A中有两个构造方法,在methodsExample2中通过参数来识别所调用的构造方法,当没有参数时调用构造方法Point(),当有参数时调用构造方法Point(x,y)。注意事项:一旦定义了构造函数,J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023七年级语文上册 第三单元 11《论语》十二章教学实录 新人教版
- 中国画(视频课)知到课后答案智慧树章节测试答案2025年春汉江师范学院
- 2025年物业管理服务项目建议书
- 2024-2025学年高中数学 第一章 三角函数 1.4.2 正弦函数、余弦函数的性质(4)教学教学实录 新人教A版必修4
- 第4课时 《两位数乘两位数练习一(1)》(教学设计)-2023-2024学年三年级下册数学苏教版
- 2024年秋九年级历史上册 第1课《古代埃及和两河流域文明》教学实录 中华书局版
- 广东省罗定市七年级生物上册 3.6.1 种子萌发形成幼苗教学实录 北师大版
- 2025年复杂精密压铸模具合作协议书
- 千古名文背诵之八:兰亭集序(原文+注释+翻译)
- 读懂价格信号稳住经济大盘
- 生物信息学第三讲基因功能富集分析
- 中职高教版(2023)语文职业模块-第五单元:走近大国工匠(二)学习工匠事迹 领略工匠风采【课件】
- 2024年山东省济南市中考地理试题卷(含答案解析)
- 2024年太原城市职业技术学院高职单招数学历年参考题库含答案解析
- DB31∕T 795-2014 综合建筑合理用能指南
- GB/T 44979-2024智慧城市基础设施紧凑型城市智慧交通
- 戏剧课程设计方案
- 2025年保密知识试题库附参考答案(精练)
- 物料提升机安全技术操作规程(4篇)
- 临床微生物学检验技术知到智慧树章节测试课后答案2024年秋济宁医学院
- 分级护理质量考核标准
评论
0/150
提交评论