Download presentation
Presentation is loading. Please wait.
1
第三课 标识符、关键字、数据类型
2
本课内容 注释及分隔符、Java文档化工具 标识符 关键字 Java基本数据类型 Java引用类型 String类型 方法结构及用法 值传递
关键字this
3
Java 注释 Java语言中定义了三种注释形式:
// 单行注释----注释到行尾 /* 单行或多行注释 */ /** 可以用于文档化处理的单行或多行注释 */ JDK中提供了一个文档自动生成工具javadoc,在自定义类 中public的成员前以/**…*/形式加入的注释内容均可被 自动提取到生成的说明文档中。 用法:somepath\javadoc source.java 3.1.1 注释 和C、C++语言类似,Java允许在程序源代码中加入注释。注释的用途和我们常规意义上的“注释”完全相同,是给程序员看的,起到记录或说明程序结构、方法(变量)功能等作用。系统在编译和运行程序时遇到注释内容将跳过,而不做任何处理。 Java语言中定义了三种注释形式: // 单行注释----注释到行尾 /* 单行或多行注释 */ /** 可以用于文档化处理的单行或多行注释 */
4
Ex1 练习在一个已有.java源代码文件中使用三种不同类型的注释,并用javadoc命令创建自己的类文档,体会其用法。
/* print to screen System.out.println(“welcome!”);程序输出结果是: 示例3-1 Java注释用法举例 程序:CommentTest.java /* Java编程技术chapter3,CommentTest.java 版权所有:新东方IT教育。 作者:zlg 日期:2001/07/01 */ /** 这是一个Java语言入门程序,定义类CommentTest。其中含有main()方法,因此可以作为一个应用程序单独执行。其功能是在默认的输出设备上输出字符串"Hi,你好!"。 public class CommentTest{ //主方法,作为Java应用程序的默认入口。 public static void main(String args[]){ System.out.println("Hi,你好!"); //输出"Hi,你好!" } 程序运行结果为: Hi,你好! 此程序从功能上与第一章中的例1-1HelloWorld.java完全相同,不同之处在于它添加的注释内容可以更好的说明程序的功能、结构、版权等信息,增强了程序的可读性和易维护性,这一点对与大型程序开发和维护尤其重要。 下面介绍第三种注释形式的特殊用途,/** … */中的内容除了起到普通注释作用外,还能够被Java文档化工具所识别和处理,用于自动生成程序文档。日常生活中,生产者通常要为自己的产品写说明书或用户手册,介绍其产品结构、功能和用法。在软件开发行业中,也要做类似的工作----编写软件或程序的说明文档,用于向程序开发人员或用户介绍相关细节。Java开发工具集(JDK)中提供了一个文档自动生成工具,可以简化我们编写程序文档的工作,其用法如下: 示例3-2javadoc文档化工具的使用 已经安装JDK1.2以上版本并正确的设置环境变量后,采用下述命令启动Java文档化工具,自动生成Java程序文档(假定例3-1中的源文件CommentTest.java保存在d:\java路径下):d:\java\javadoc CommentTest.java 执行此命令时,Java运行环境在加载并解析相应源程序后,自动生成一系列的说明文档,如图3-1所示: 图3-2 javadoc文档化工具生成文档效果 可以看到,以/**…*/形式加入的注释内容已被提取到生成的文档之中,其它的文件机制和作用类似,请读者自行测试和体会。 使用注释的原则: 注释应该增加代码的可读性 保持注释的简洁,避免使用的装饰性内容 先写注释,后写代码: 写代码注释的最好方法是在写代码之前就写注释,这使程序员在写代码之前可以更好的考虑代码的功能和运行情况,且可确保不会遗漏注释。另一种方法是边写代码边写注释,因为注释可以使代码更易理解,所以在程序开发的过程中,也可以利用这一点。 注释信息不仅要包括代码的功能,还应给出必要的原因,以利于维护和升级。
5
Java 分隔符 Java分隔符组成: 圆点--“.”、分号--“;”、花括号--“{}”、空格--“ ” Java分隔符作用:
Java允许用花括号“{}”将一组语句括起来,形成一个语句块(block) Java程序源代码中各组成部分之间可以插入任意数量的空格,包括换行。 在Java中,圆点“.”、分号“;”、花括号“{}”和空格具有特殊的分隔作用,我们将其统称为分隔符。 Java语句必须以分号作为结束标记。一行中可以写多条语句、一条语句也可以跨多行。例如下述都是合法的Java语句: int i=5; double j=6; String s = "hello world!"; String s1 = "long long ago" + ", " + "there lived a king." ; Java语言允许用花括号“{}”将一组语句括起来,形成一个语句的集合----语句块。语句块具有单条语句的某些性质,语句块可以嵌套,举例如下:
6
Java 分隔符 Java语句块(block)用法: 定义类时类体必须采用语句块形式 定义方法时方法体必须采用语句块的形式
定义循环语句时,循环体可以语句块的形式,采用将0~多条语句集合到一起,作为一个整体进行处理 语句块可以嵌套,嵌套层数无限制 Java语言允许用花括号“{}”将一组语句括起来,形成一个语句的集合----语句块。语句块具有单条语句的某些性质,语句块可以嵌套,举例如下: 示例3-3 Java语句块用法举例 程序:BlockSample.java public class BlockSample{ public static void main(String args[]){ int result = 0; for(int i=1;i<=100;i++){ // 其它语句 result = result +i; } System.out.println("result=" + result); 在程序BlockSample.java中,可以看到语句块的三种不同使用情况: 在定义类(BlockSample)时类体采用语句块形式。 在定义方法(main()方法)时方法体采用语句块的形式。 将0~多条语句集合到一起,组成语句块儿,作为一个整体进行处理,这是语句块最通常的用法。本例中是作为for循环的循环体,被整体执行或跳过。 同时,要注意到本程序中的语句块是嵌套使用的,嵌套层数为三层。实际上,语句块的使用是非常自由的,嵌套层数没有限制,而且任何单行语句可以出现的场合都可以由语句块来替代。 在Java程序中,源代码中各组成部分之间可以插入任意数量的空格,包括换行。适当地组合使用空格、换行和语句块(另外还有后续章节中将介绍的小括号)可以使源程序更有条理,增强可读性和易维护性。例如: if(i>0) int x=y+z; 等价于: if(i>0) { int x = y + z;
7
EX 2 练习在已有应用程序的一个语句中插入多处空格、中间换行、将多个语句组成一个语句块儿(置于“{}”中),并编译运行程序,体会其自由程度。
8
变 量 程序执行中数值可变的数据称为变量。变量包括变量名和变量值。
变 量 程序执行中数值可变的数据称为变量。变量包括变量名和变量值。 变量名 用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。 标识符 符合一定命名规则的字符串序列。
9
使用变量的注意事项 变量命名不能重复 Java区分大小写 变量必须先定义,再使用 只有定义过,才能为其分配相应数量的存储单元
一旦定义,变量类型才能确定,才能检查其运算的合法性
10
标识符(1) Java语言中,为各种变量、方法和类等起的名字称为标识符 Java标识符的命名规则: Java标识符大小写敏感,长度无限制
应以字母、下划线、美元符开头 后跟字母、下划线、美元符或数字 Java标识符大小写敏感,长度无限制 在Java语言中,通常要为程序中处理的各种变量、方法、对象和类等起个名字做为标记,以后就可以通过名字来对访问或修改某个数据的值,这些名字称为标识符。 Java语言标识符的组成规则如下: 标识符必须以字母、下划线(_)或美元符($)开头,后面可以跟任意数目的字母、数字、下划线(_)或美元符($)。标识符的长度没有限制。 在定义和使用标识符时需要注意,Java语言是大小写敏感的。比如,string和String是两个不同的标识符。另外,标识符的命名应遵循本章最后一节将要介绍的Java编码惯例,并且应使标识符能从字面上反映出它所代表的变量或类型的用途。表3-1中列出了一些合法的Java标识符、不合法的Java标识符及不合法的原因,请读者体会:
11
标识符(2) Java标识符举例 合法的标识符 不合法的标识符 HelloWorld class DataClass DataClass#
_983 98.3 $bS5_c7 Hell World 表3-1 Java标识符举例 合法标识符不合法标识符不合法的原因HelloWorldclass关键字不能作为标识符使用DataClassDataClass#标识符中不能含有#_ 标识符不能以数字开头及含小数点$bS5_c7Hell World标识符中不能含有空格符 判断 2variable variable2 _whatavariable _3_ $anothervar #myvar 哪些有效:max_num max-num 3dotnight star*power (train)
12
关键字(1) Java中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword)
所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字 ; goto和const 虽然从未使用,但也被作为Java关键字保留; true,false,null虽被用做专门用途,但不是Java关键字; Java语言中将一些单词赋以特定的含义,并用做专门用途,不允许再当作普通的标识符使用。这些单词称为关键字(key word)。关键字的用法将在后续章节中逐步接触,表3-2中列出全部Java关键字。
13
关键字(2) Java关键字的使用要注意以下几点: 所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字;
goto和const虽然从未使用,但也作被为Java关键字保留; true、false、null虽用做专门用途,但不是Java关键字。
14
EX 3 测试并体会Java标识符、关键字的使用规则:
在程序中试将不合法的标识符(如:3ar, *bily, d9#8等)、或关键字作为变量名、方法名或类名,编译然后改正错误。 integer double float default Boolean character reference
15
Java数据类型划分 整数类型(byte, short, int, long) 数值型 浮点类型(float, double) 基本数据类型
字符型(char) 布尔型(boolean) 数据类型 类(class) 引用数据类型 接口(interface) 数组
16
Java基本数据类型 Java中定义了四类/八种基本数据类型 逻辑型---- boolean 字符型---- char
整数型---- byte, short, int, long 浮点数型---- float, double
17
逻辑型 boolean类型适于逻辑运算,一般用于程序流程控制
boolean类型数据只允许取值true或false,不可以0或非0的整数替代true和false。 用法举例: boolean b = false; if(b==true) { //do something } 布尔类型 布尔(boolean)类型是一种用于逻辑运算的数据类型,一般用于程序流程控制(分支或循环语句)。布尔类型数据只允许取值true或false,而且不可以像C\C++语言一样,用0或非0的整数替代true和false。
18
字符型 char型数据用来表示通常意义上“字符” 字符常量是用单引号括起来的单个字符
char c = 'A'; Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示 char c1 = '\u0061'; Java语言中还允许使用转义字符'\'来将其后的字符转变为其它的含义 char c2 = '\n'; //代表换行符 如何使用十进制、八进制和十六进制分别表示3的字符字面值(character literal)其中3对应的ASCII码为51 字符类型 字符(char)类型数据用来表示通常意义上“字符”。字符常量是用单引号括起来的单个字符。 Java中的字符采用Unicode编码格式,每个字符占两个字节(16个二进制位),可以表示216-1=65535个不同的字符。Java语言采用双字节表示是为了便于开发多种语言版本的程序。此前人们所熟悉的ASCII/ANSI编码是单字节编码,其字符集只含有28-1=255个字符,显然不能包含所有语言(如中文、日文、韩文)的字符,使用上是有局限的,而占双字节的Unicode编码字符集则能够很好地解决这一问题,它包含了世界上几乎所有语言的字符(目前共使用了约35000个)。 Unicode字符通常用十六进制编码形式表示,范围是‘\u0000’~‘\uFFFF’,其中前缀‘\u’标志着这是一个Unicode编码字符,其中前255个(‘\u0000’~‘\u00FF’)字符与ASCII码中的字符完全重合。 Java语言中还允许使用转义字符‘\’来将其后的字符转变为其它的含义,如表3-3所
19
整数类型(1) Java各整数类型有固定的表数范围和字段长度,而不受具体操作系统的影响,以保证Java程序的可移植性 : 类 型
类 型 占用存储空间 表数范围 byte 1字节 -128 ~ 127 short 2字节 -215 ~ 215-1 int 4字节 -231 ~ 231-1 long 8字节 -263 ~ 263-1 整数类型用来表示数学概念上的整数。Java语言提供了四种整数类型----byte,short,int,long,其中每一种都有其固定的表数范围和字段长度,而不受具体操作系统的影响。这样可以保证Java程序的可移植性,即一个Java程序在不同平台上运行都能得到相同的结果,而不会产生数据溢出等问题。
20
整数类型(2) Java语言整型常量的三种表示形式: Java语言的整型常量默认为int型,如:
十进制整数,如12, -314, 0。 八进制整数,要求以0开头,如012 十六进制数,要求0x或0X开头,如0x12 Java语言的整型常量默认为int型,如: int i =3; 声明long型常量可以后加‘ l ’或‘ L ’ ,如: long l = 3L; Java语言整型常量有三种表示形式: 十进制整数,如123,-314,0。 八进制整数,要求以0开头,如012表示十进制数10、-021表示十进制数-17。其开头的0表示这是一个八进制数。 十六进制数,要求0x或0X开头,如0x12表示十进制数18、-0X1a表示十进制数-26。其开头的0X或0x表示这是一个十六进制数。 Java语言的整型常量默认为int型,要声明一个常量为long型,则要在它数字的后面加l或L。例如: 3表示一个int型整数常量,占32位内存空间。 3L表示一个long型整数常量,占64位内存空间。
21
浮点型(1) Java浮点类型有固定的表数范围和字段长度 类 型 占用存储空间 表数范围 float 4字节
类 型 占用存储空间 表数范围 float 4字节 -3.403E38~3.403E38 double 8字节 -1.798E308~1.798E308 Java语言提供了两种浮点类型----float和double,也都有其固定的表数范围和字段长度,而不受具体操作系统的影响。 表3-5 Java浮点类型
22
浮点型(2) Java浮点类型常量有两种表示形式
十进制数形式,必须含有小数点,例如: 科学记数法形式,如 3.14e E E2 Java浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F,如: double d = 3.14; float f = 3.14f; Java语言浮点类型常量有两种表示形式: 十进制数形式,必须含有小数点,例如3.14、314.0、.314。否则将被当作int型常量处理,例如314。 科学记数法形式,如3.14e2、3.14E2、314E2。注意,只有浮点类型才能采用科学记数法表示,因此314E2也是浮点型常量,而不是int型。 Java语言的浮点型常量默认为double型,要声明一个常量为float型,则要在它数字的后面加f或F。例如: 3.0表示一个double型常量,占64位内存空间。 3.0f表示一个float型常量,占32位内存空间。
23
基本数据类型变量声明和赋值 public class Test {
public static void main (String args []) { boolean b = true; //声明boolean型变量并赋值 int x, y=8; // 声明int型变量 float f = 4.5f; // 声明float型变量并赋值 double d = ; //声明double型变量并赋值 char c; //声明char型变量 c = '\u0031'; //为char型变量赋值 x = 12; //为int型变量赋值 }
24
EX 4 1. 运行P23页Example,体会各种原始数据类型的定义,赋值和输出。
输出可采用下述形式的语句:System.out.println("a=" + a); //其中a是变量名。 2. 使用char型的三种常量声明方式为char型变量赋值并输出。
25
Java引用类型 Java语言中除8种基本数据类型以外的数据类型称为引用类型 引用类型数据以对象的形式存在
引用类型变量的值是某个对象的句柄,而不是对象本身 声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象
26
Java引用类型应用举例 public class MyDate { private int day = 12;
private int month = 6; private int year = 1900; public Mydate(int d, int m, int y) { year = y; month = m; day = d; } public void display() { System.out.println(year + " / " + month + " / " +day); public static void main(String[] args) { MyDate m; m = new MyDate(22, 9, 2001); m.display();
27
对象的构造和初始化(1) 为引用类型变量分配引用空间 MyDate m;
null 创建新对象--首先为新对象分配内存空间,并进行属性(实例变量)的默认初始化 new MyDate(22, 9, 2001); 上述代码段中共声明了四个变量----两个基本数据类型(int型)的变量y1,y2和两个引用类型(MyDate型)的变量md1,md2。 y1,y2为基本数据类型变量,在声明时即被分配各自的存储空间,开始时y1的值是2001,这个值被复制到y2,y2的值也就变成了2001。接下来由于y1和y2是两个独立的变量且其中任何一个的进一步的变化都不对另外一个构成影响,因此当y1的值被改为1998后,y2的值仍为2001,如图3-4所示: 引用类型对象md1的构造和初始化过程:图3- 5 引用空间分配示意图 1. 执行语句"MyDate md1;"时,系统为引用类型变量md1分配引用空间(定长32位),其初值为null,尚未指向任何对象,因此还不能调用MyDate类中定义的方法,见图3-5: 2. 执行语句"md1 = new MyDate();",先调用构造方法创建一个MyDate类的对象----为新对象分配内存空间用来存储该对象所有属性(year,month,day)的值,并对各属性的值进行默认的初始化,默认初始化的原则,如表3-6所示: day m null month year
28
对象的构造和初始化(2) Java引用类型成员变量默认初始化原则 成员变量类型 取值 byte short int long 0L char
short int long 0L char '\u0000' float 0.0F double 0.0D boolean false 所有引用类型 null
29
对象的构造和初始化(3) 进行属性(成员变量)的显式初始化,显式初始化取值来自于类的定义中属性声明部分
private int day = 12; private int month = 6; private int year = 1900; day 12 m null month 6 year 1900
30
对象的构造和初始化(4) 执行构造方法 day 22 m null month 9 year 2001
public Mydate(int y, int m, int d) { year = y; month = m; day = d; } day 22 m null month 9 year 2001
31
对象的构造和初始化(5) 为引用类型变量m赋值 m = new MyDate(22, 9, 2001); m day 22 month 9
0x3a478b 0x3a478b 22 month 9 year 2001
32
EX 5 运行P26页程序,体会Java引用数据类型的实现机制并思考: 基本数据类型和引用数据类型的区别? 引用类型变量和对象的区别?
类和对象的关系?
33
String 类 String是最常用的一种Java引用类型 String类对象保存不可修改的Unicode字符序列
String常量是用双引号括起来的0到多个字符,例如:String s = "HelloWorld"; String类型数据可以和任何其它数据类型进行"+"操作,实现字符串连接的效果。
34
值传递 Java中进行赋值操作或函数调用中传递参数时,遵循值传递的原则: 基本类型数据传递的是该数据的值本身
引用类型数据传递的是对对象的引用(句柄),而非对象本身
35
值传递举例(1) class BirthDate { private int day; private int month;
private int year; public BirthDate(int d,int m,int y){ day = d; month = m; year = y; } public void setDay(int d) { day = d; } public void setMonth(int m) { month = m; } public void setYear(int y) { year = y; } public int getDay() { return day; } public int getMonth() { return month; } public int getYear() { return year;} public void display(){ System.out.println(day + " - " + month + " - " + year);
36
值传递举例(2) public class Example{ public static void main(String args[]){
Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234;} public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);}
37
值传递演示(1) 栈内存 堆内存 main 程序开始执行时内存状态 public class Example{
public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234;} public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);} 栈内存 堆内存 main 程序开始执行时内存状态
38
值传递演示(2) 栈内存 堆内存 main 处内存状态 1 1 2000 d2 354752 d1 587934 7 i 9 7 ex
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234;} public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);} 栈内存 1 堆内存 1 2000 d2 354752 d1 587934 main 7 i 9 7 ex 110925 1970 处内存状态
39
值传递演示(3) 栈内存 堆内存 change1 main 处内存状态 1 1 i 9 2000 d2 354752 d1 587934 7
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){ i = 1234;} public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);} 栈内存 1 堆内存 1 change1 i 9 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
40
值传递演示(4) 栈内存 堆内存 change1 main 处内存状态 1 1 i 1234 2000 d2 354752 d1
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);} 栈内存 1 堆内存 1 change1 i 1234 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
41
值传递演示(5) 栈内存 堆内存 main 处内存状态 1 1 2000 d2 354752 d1 587934 7 date 9 7 ex
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);} 栈内存 1 堆内存 1 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
42
值传递演示(6) 栈内存 堆内存 change2 main 处内存状态 1 1 b 587934 2000 d2 354752 d1
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){ b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);} 栈内存 1 堆内存 1 change2 b 587934 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
43
值传递演示(7) 栈内存 堆内存 change2 main 处内存状态 1 1 b 666888 22 2000 d2 354752 2
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){ b = new BirthDate(22,2,2004); } public void change3(BirthDate b){b.setDay(22);} 栈内存 1 堆内存 1 change2 b 666888 22 2000 d2 354752 2 main d1 587934 7 2004 date 9 7 ex 110925 1970 处内存状态
44
值传递演示(8) 栈内存 堆内存 main 处内存状态 1 1 2000 d2 354752 d1 587934 7 date 9 7 ex
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22);} 栈内存 1 堆内存 1 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
45
值传递演示(9) 栈内存 堆内存 change3 main 处内存状态 1 1 b 354752 2000 d2 354752 d1
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){ b.setDay(22);} 栈内存 1 堆内存 1 change3 b 354752 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
46
值传递演示(10) 栈内存 堆内存 change3 main 处内存状态 22 1 b 354752 2000 d2 354752 d1
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22); } 栈内存 22 堆内存 1 change3 b 354752 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
47
值传递演示(11) 栈内存 堆内存 main 处内存状态 22 1 2000 d2 354752 d1 587934 7 date 9 7
public class Example{ public static void main(String args[]){ Example ex = new Example(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); } public void change1(int i){i = 1234; } public void change2(BirthDate b){b = new BirthDate(22,2,2004);} public void change3(BirthDate b){b.setDay(22); } 栈内存 22 堆内存 1 2000 d2 354752 main d1 587934 7 date 9 7 ex 110925 1970 处内存状态
48
EX 7 练习值传递演示中的例程,Example.java,体会和巩固Java中值传递的思想。
编写Java类MyTool,实现下述功能并测试: 复制BirthDate类(见P9页)页对象; public BirthDate copy(BirthDate d){……} 给定一个BirthDate对象,返回对应其一周后日期的BirthDate对象(假定每月均为30天) public BirthDate nextWeek(BirthDate d){……}
49
关键字this(1) Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。
构造方法中指该方法所创建的新对象 普通方法中指调用该方法的对象
50
关键字this(2) 范例0404 Test.java
51
关键字this(3) public class ThisSample{ private int year;
private int month; private int day; public ThisSample(int year,int month,int day) { this.year = year; this.month = month; this.day = day; } public void setYear(int year) { this.year = year; } public void setMonth(int m) { month = m; } public void setDay(int d) { day = d; } public void setting(){ this.setYear(2001); this.setMonth(9); setDay(11); //同this.setDay(11);
52
EX 8 运行程序并分析流程,体会This的用法。 public class TestMyDate {
public static void main(String[] args) { MyDate m1 = new MyDate(22, 7, 1964); MyDate m2 = m1.copy(m1); m1.display(); m2.display(); } }//类MyDate的定义见下一页
53
EX 9 public class MyDate{ private int year, month, day;
public MyDate(){} public MyDate(int day,int month,int year) { this.year = year; this.month = month; this.day = day; } public void setYear(int year) { this.year = year; } public void setMonth(int m) { month = m; } public void setDay(int d) { day = d; } public void setting(){ this.setYear(2001); this.setMonth(9); setDay(11); //同this.setDay(11); public MyDate copy(MyDate d){ MyDate m = new MyDate(); m.year = d.year; m.month = d.month; m.day = d.day; return m; public void display(){ System.out.println(day + "-" + month + "-" + year);
54
Java 编码惯例1 命名惯例: 包名 package banking.domain; 类名 class SavingsAccount
接口名 interface Account 方法名 balanceAccount() 变量名 currentCustomer 常量名 HEAD_COUNT MAXIMUM_SIZE
55
Java 编码惯例2 缩进规则 使用注释----说明类/属性/方法的功能,参数的作用 运算符与运算数间用空格间隔
Similar presentations