java语言程序设计(基础篇) 第七章.ppt_第1页
java语言程序设计(基础篇) 第七章.ppt_第2页
java语言程序设计(基础篇) 第七章.ppt_第3页
java语言程序设计(基础篇) 第七章.ppt_第4页
java语言程序设计(基础篇) 第七章.ppt_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第7章 对象和类,在前一部分(2到6章),我们学习了编程基础,学会使用基本数据类型、控制语句、方法以及数组,这些都是所有的面向过程的语言都具有的特征,但, Java,是个面向对象的语言,不但具有面向过程语言的要素,也具有抽象、封装、继承、多态等特征以实现强大的灵活性、模块化、以及可重用性以开发软件,在这一部分,我们将学习如何定义、扩展以及使用类与对象,2,Objectives,To understand objects and classes and use classes to model objects (7.2). To learn how to declare a class an

2、d how to create an object of a class (7.3). To understand the roles of constructors and use constructors to create objects (7.3). To use UML graphical notations to describe classes and objects (7.3). To distinguish between object reference variables and primitive data type variables (7.4). To use cl

3、asses in the Java library (7.5). To declare private data fields with appropriate get and set methods to make class easy to maintain (7.6-7.8). To develop methods with object arguments (7.9). To understand the difference between instance and static variables and methods (7.10). To determine the scope

4、 of variables in the context of a class (7.11). To use the keyword this as the reference to the current object that invokes the instance method (7.12). To store and process objects in arrays (7.13). To apply class abstraction to develop software (7.14). To declare inner classes (7.17 Optional).,3,面向

5、对象编程的概念(OO Programming Concepts),面向对象编程(Object-oriented programming: OOP) 就是使用对象进行编程。一个对象表示一个真实世界的可以独立标识的实体. 例如:一位学生、一个桌子、一个圆、一个按纽,都可以看作对象,一个对象有独一的标识、状态以及行为,对象的状态由一系列的数据域(也叫属性)所组成,而对象的行为由一系列的方法所定义。,4,7.2. 为对象定义类,例如一个圆对象(circle),有数据域圆半径(radius)(标识了圆的属性),圆的行为就是其面积可以通过方法getArea计算而得。同类型的对象使用一个公共的类来定义。类就

6、是定义对象的数据和方法的模板.。一个对象是类的实例(instance)。你可以生成一个类的很多个实例,产生一个实例也叫做实例化(instantiation).术语对象、实例通常可互用,类和对象的关系类似于书版和从书版印刷出很多的书。 下面是个圆的例子。,5,对象,对象具有状态和行为,状态定义对象,而行为定义对象做什么。,6,Classes,Classe类是同类型对象的构造者. Java类使用变量定义数据域,而用方法定义行为,另外,类提供类一种特殊的方法,叫做构造子,被调用时用来从类生成构造对象,7,类,Circle类和我们前面学习过的类都不同,它没有main方法,故,无法独立运行。,8,UML

7、类图(UML Class Diagram),在UML类图中: 数据域的表示: dataFieldName: dataFieldType 构造子的表示: ClassName(parameterName: parameterType) 方法的表示: methodName(parameterName: parameterType): returnType,9,7.3 构造子,Circle() Circle(double newRadius) radius = newRadius; ,构造子是特殊的方法,用来构造对象,10,构造子是特殊的方法,其特殊性:, 构造子必须和类同名. 没有返回值,甚至也不是

8、返回void. 构造子使用new操作符被调用,用来生成一个对象,它扮演初始化对象的角色。 (无参数的构造子叫做no-arg constructor.),11,使用构造子生成对象,new ClassName(); Example: new Circle(); new Circle(5.0);,12,默认构造子,类可以没有构造子,这种情况下,就相当于类中声明了一个无参数的空体构造子,这叫做默认构造子( default constructor), 仅仅在没有定义构造子的情况下自动生成。,13,注意,有个常见错误,在构造子之前加上void关键词作为返回类型。 如:public void Circle(

9、) 则 Circle() 就不是构造子了。,14,7.4. 通过引用变量存取对象,新产生的对象保存在内存中,如何存取之呢? 对象通过对象引用变量(指向对象的引用)来存取的,15,声明对象引用变量,要引用一个对象,要把此对象赋予一个引用变量. 声明引用变量,语法: ClassName objectRefVar; Example: Circle myCircle;,一个类名定义了一种类型,这里叫做引用类型,和基本数据类型不同。,16,一步完成声明、生成对象,ClassName objectRefVar = new ClassName(); Example: Circle myCircle = ne

10、w Circle();,生成对象,把对象引用赋给变量myCircle,17,数组当着对象,数组在JAVA中是当作对象看待的,创建数组要使用new操作符,数组变量实际上也是一个包含一个指向数组的引用,18,存取对象的数据和方法,引用对象的数据: objectRefVar.data e.g., myCircle.radius 调用对象的方法: objectRefVar.methodName(arguments) e.g., myCircle.getArea(),对象创建以后,利用点操作符( dot operator ),其数据可以存取,其方法可以调用, 这个操作符也叫对象成员存取操作符。,19,数

11、据域radius被称为是一个实例变量,因为其依赖于特定的实例,同样的原因,方法getArea被称为实例方法,因为只可以调用之作用于一个特定的实例,20,匿名对象(anonymous object),大多数情况下,你创建一个对象并赋给一个变量,然后你可以使用这个变量引用变量, 但,有时,一个对象不需要在后来引用,这种情况下,你可以创建一个对象却不赋给一个变量,例如: 1、new Circle(); 2、System.out.println(Area is + new Circle(5).getArea(); 称为匿名对象,21,范例:简单的类Circle,目的: 演示创建对象、存取对象的数据以及

12、使用其方法,TestCircle1,Run,22,Trace Code,Circle myCircle = new Circle(5.0); SCircle yourCircle = new Circle(); yourCircle.radius = 100;,Declare myCircle,no value,myCircle,animation,23,Trace Code, cont.,Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100;,no value,

13、myCircle,Create a circle,animation,24,Trace Code, cont.,Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100;,reference value,myCircle,Assign object reference to myCircle,animation,25,Trace Code, cont.,Circle myCircle = new Circle(5.0); Circle yourCircle = new

14、 Circle(); yourCircle.radius = 100;,reference value,myCircle,no value,yourCircle,Declare yourCircle,animation,26,Trace Code, cont.,Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100;,reference value,myCircle,no value,yourCircle,Create a new Circle object,ani

15、mation,27,Trace Code, cont.,Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100;,reference value,myCircle,reference value,yourCircle,Assign object reference to yourCircle,animation,28,Trace Code, cont.,Circle myCircle = new Circle(5.0); Circle yourCircle = ne

16、w Circle(); yourCircle.radius = 100;,reference value,myCircle,reference value,yourCircle,Change radius in yourCircle,animation,29,这个程序有两个类,第一个类 TestCircle1是主类(main class),其唯一的目的是测试第二个类 Circle1,每次运行此程序,JVM调用主类中的main方法。 你可以把两个类放在一个文件中,但这个文件中仅有一个类可以是公共类(public class),而且,公共类的类名必须和文件名相同,因此,这个文件只能是TestCir

17、cle1.java如果类TestCircle1和类Circle1在同一个文件中。 用面向过程的编程语言如C语言来编写getArea,你会把半径radius作为参数传送这个方法或者函数,但在面向对象的编程中,半径 radius和方法getArea是定义在对象中的,半径radius是这个对象的成员,并为getArea方法存取,用面向过程的编程语言中,数据和方法是分隔独立的,在面向对象的编程中,数据和方法是组合在一起的。 方法 getArea是个实例方法,总是由一个给出了半径值的实例调用,30,See Objects in JBuilder Debugger,You can view the con

18、tents of an object in the debugger.,JBuilder Optional,myCircle,yourCircle,31,注意:静态方法和非静态方法,回忆一下,你曾经使用过: Math.methodName(arguments) (e.g., Math.pow(3, 2.5) 来调用 Math 类. 你可以仿照之调用getArea() 使用 Circle1.getArea()? 答案是不可以.我们前面用的方法是静态(static)方法,方法定义中前面有static 修饰关键词,而方法 getArea() 是非静态的(non-static),要调用它,必须从一个对

19、象进行: objectRefVar.methodName(arguments) (e.g., myCircle.getArea(). 更完善的解释见7.7, “静态变量、常量以及方法”,32,引用类型作为数据域,public class Student String name; / 字符串是引用类型 int age; / age has default value 0 boolean isScienceMajor; / isScienceMajor has default value false char gender; / c has default value u0000 ,33,The

20、null Value,如果一个引用类型的数据域没有指向任何对象,这个数据域的值就是一个特殊的直接量:null. ,null是引用类型的直接量就如true和false是boolean类型的直接量,34,数据域的默认值,引用类型:null, 数值型:0, 布尔型:false 字符型:u0000.,public class Test public static void main(String args) Student student = new Student(); System.out.println(name? + ); System.out.println(age?

21、 + student.age); System.out.println(isScienceMajor? + student.isScienceMajor); System.out.println(gender? + student.gender); ,演示一下,35,实例,public class Test public static void main(String args) int x; / x has no default value String y; / y has no default value System.out.println(x is + x); System.out.

22、println(y is + y); ,编译错误: 变量未初始化(variables not initialized),但对于方法内部的本地变量,JAVA不给其赋默认值,演示一下,36,基本数据类型和对象类型变量的区别,每个变量都代表一个内存地址,这个内存空间存放相应的数值,当你声明一个变量时,你告诉编译器这个变量对应的内存地址将存放什么类型的数据,对于基本数据类型,这个地址存放基本数据类型的值,而对于引用类型,存放的是指向对象存放位置的引用(地址),37,基本数据类型和对象类型变量的区别,38,基本数据类型和对象类型变量的拷贝,39,垃圾收集,正如前图所示,在赋值语句 c1 = c2执行之后

23、, c1指向c2所引用的同一个对象,c1原来所引用的对象不再引用,这种对象叫做垃圾,垃圾占用内存空间,垃圾一般由JVM收集.,40,垃圾收集,TIP: 如果你知道一个对象不再需要了,你可以显识地赋值null给引用这个对象的变量,JVM会自动回收不被任何变量引用的对象占用的空间,41,从Java类库( Library)使用类,Example 7.1 声明了类 Circle 并且创建了一些对象,另外使用类的路线是使用JAVA类库中的类来开发程序,你学会了获得当前时间的方法:System.currentTimeMillis(), 这就是类System中的方法,又如JOptionPane,42,日期类

24、(Date Class),Java provides a system-independent encapsulation of date and time in the java.util.Date class. You can use the Date class to create an instance for the current date and time and use its toString method to return the date and time as a string.,43,The Date Class Example,For example, the f

25、ollowing code java.util.Date date = new java.util.Date(); System.out.println(date.toString(); displays a string like Sun Mar 09 13:50:19 EST 2003.,44,The Random Class,You have used Math.random() to obtain a random double value between 0.0 and 1.0 (excluding 1.0). A more useful random number generato

26、r is provided in the java.util.Random class.,45,The Random Class Example,If two Random objects have the same seed, they will generate identical sequences of numbers. For example, the following code creates two Random objects with the same seed 3.,Random random1 = new Random(3); System.out.print(From

27、 random1: ); for (int i = 0; i 10; i+) System.out.print(random1.nextInt(1000) + ); Random random2 = new Random(3); System.out.print(nFrom random2: ); for (int i = 0; i 10; i+) System.out.print(random2.nextInt(1000) + );,From random1: 734 660 210 581 128 202 549 564 459 961 From random2: 734 660 210

28、581 128 202 549 564 459 961,46,静态变量、常量、方法,前述circle类的数据域radius是一种实例变量,也即,依赖于特定的类的实例(对象);它不能在这个类的不同对象间共享。例如,创建如下的对象: Circle circle1 = new Circle(); Circle circle2 = new Circle(5); 对象circle1中的radius和对象circle2中的radius是独立的,并被存放在不同的内存位置,对于circle1的数据域radius的改变不会影响circle2的数据域radius,反之亦然(and vice versa. ),如果

29、你想一个类的所有实例(对象)共享数据,使用静态变量(static variables),.静态变量存储的数据是放在公共的内存空间,因为这一点,若,一个对象改变这个变量的数值,同一类的所有对象都会手影响而相应改变。 Java还支持静态方法,它可以在不创建类的实例(对象)的情况下就进行调用,这和实例方法不同。,47,静态变量、常量、方法,如果你想一个类的所有实例(对象)共享数据,使用静态变量(static variables),.静态变量存储的数据是放在公共的内存空间,因为这一点,若,一个对象改变这个变量的数值,同一类的所有对象都会手影响而相应改变。 Java还支持静态方法,它可以在不创建类的实例

30、(对象)的情况下就进行调用,这和实例方法不同。 我们下面修改类 Circle,加入一个静态变量numberOfObjects来计数产生了多少个Circle对象。当这个类的第一个对象创建后:numberOfObjects = 1. 第二个对象创建后,numberOfObjects =2,其中,定义了实例方法getRadius, setRadius, 和 getArea,以及静态方法getNumberOfObjects. (提示: UML类图中静态变量和方法的要加下划线.),48,静态变量、常量、方法,静态变量为一个类的所有实例共享。静态方法不依赖于特定的对象。(tied to a specifi

31、c object. ) 静态常量Static constants are final variables shared by all the instances of the class.,49,静态变量、常量、方法:声明的方法,使用 static修饰符,static int numberOfObjects; static int getNumberObjects() return numberOfObjects; ,50,静态变量、常量、方法:,51,范例,Constants in a class are shared by all objects of the class. Thus, c

32、onstants should be declared final static. For example, the constant PI in the Math class is defined as: final static double PI = 3.14159265358979323846; c1.numberOfObjects和c2.numberOfObjects可以改为Circle2.numberOfObjects.还可以把Circle2.numberOfObjects改为Circle2.getNumberOfObjects().,TestCircle2,Run,Circle2

33、,52,静态变量和方法可以由类中的实例方法和静态方法使用,然而,实例变量和方法仅可以在实例方法中使用,不可以在静态方法中使用,因为静态变量和方法整体属于类而不是某个特定的对象,,演示一下, 编译错误,53,什么时候使用静态变量、方法,如果一个变量或方法依赖于这个类的特定的对象实例?它就应该是实例变量、方法, 当变量或方法不依赖于特定的实例对象,就应该是静态的 例:每个圆都有其特定的半径,不同的圆不能共享半径,不能有共同的半径,所以半径radius就是实例变量,因为 getArea依赖于特定的圆,就应该是实例方法,而Math类中的方法,如random, pow, sin, cos,是独立于特定的

34、实例对象的,因此,就应该是静态方法。Main方法是静态的,故可以直接从类调用。,54,设计错误,把应该设计为静态的方法编写为实例方法: 例如:阶乘运算factorial()应该设计为静态方法还是实例方法?,55,See Objects in JBuilder Debugger,Optional for JBuilder,You can view the contents of an object in the debugger.,Static variable numberOfObjects,56,7.7 访问权限修饰符,public 类、数据域、方法可以由任何包任何类存取. private

35、数据、方法只可以在本类中存取. 默认情况(没有public和private)类、变量、方法可以被其所在包中的任何类存取,57,私有(private)修饰符限制对类内部的存取,默认修饰符限制对包内部的存取,公有(public)修饰符则没有任何限制.,58,从类内部存取其成员,从类内部对其成员没有存取限制:对象不可以存取其私有成员(数据域和方法),但这个对象在自己的类中声明的则可以存取本类里面的私有成员,演示一下, 编译错误,59,注意,存取限制修饰符用来修饰类的成员 不能用来修饰方法里面的本地变量 一般而言,构造方法应该是public,但如果你想禁止用户创建一个类的实例,你可以使用私有priva

36、te构造方法,例如:Math类是没有必要实例化的,因为其所有的数据域和方法都是静态的,这样,就可以定义一个哑(dummy)私有构造方法,则就不可以实例化了,因为其构造方法为私有:private Math() ,注意:这个方法什么都没有做,其唯一作用就是阻止Math的实例化.,60,7.8 数据域的封装,数据域 radius和numberOfObjects(类 Circle2)可以直接修改 (e.g., myCircle.radius = 5 or Circle2.numberOfObjects = 10).这是不好的设计: 首先,数据可能被损坏,例如, numberOfObjects用来计数创

37、建的对象数目,但它可能被设置一个任意的数值,至少你无法阻止这种设置 (e.g., Circle2. numberOfObjects = 10). 第二,它是类难于维护,并容易出现bugs.假如你想在其他程序已经使用这个类之后修改类 Circle2 以确保半径 radius 是非负数,你将不的得不修改Circle2类,还要修改使用 Circle2 类的程序,因为这种程序可能经常直接存取radius)(e.g., myCircle.radius = -5).,这种程序叫做客户端(clients) 为防止对于数据域的直接修改,你应该声明之为私有private, 这就叫做数据域的封装.,61,为什么数

38、据域应该设置为私有, 保护数据(不被任意破坏) 使类易于维护,62,get和set方法,私有数据域不可以在类以外由对象通过直接引用存取,但客户端程序经常需要抽取或者设置数据域,为存取私有数据域可以提供 get方法返回数据域的数值,还可以使用set方法来更新数据域.设置新的数值.,63,范例:数据域的封装,Circle3,Run,TestCircle3,1、利用get和set方法,你对radius有完全的控制,如果你要改变这 些方法的实现编程,客户端程序是不需要改动的.这使类容易维护 2、numberOfObjects 是私有的,也没有set方法,你无法改变之。 这避免了这个数据的损坏,要使之为

39、100,只有创建100个对象。,64,7.9 不可变对象和类(Immutable),如果一旦对象创建以后其内容就不可改变,这样的对象叫做不可变对象(immutable object) ,其类叫做不可变类( immutable class), 如果你删除前面的Circle 类的set方法,这个类就是不可变的,因为:半径radius私有并没有set方法。,一个类的数据域都为私有并没有set方法并不必然说明它是不可变的,例如:,65,Example,public class Student private int id; private BirthDate birthDate; public Stu

40、dent(int ssn, int year, int month, int day) id = ssn; birthDate = new BirthDate(year, month, day); public int getId() return id; public BirthDate getBirthDate() return birthDate; ,public class BirthDate private int year; private int month; private int day; public BirthDate(int newYear, int newMonth,

41、 int newDay) year = newYear; month = newMonth; day = newDay; public void setYear(int newYear) year = newYear; ,public class Test public static void main(String args) Student student = new Student(111223333, 1970, 5, 3); BirthDate date = student.getBirthDate(); date.setYear(2010); / Now the student b

42、irth year is changed! ,66,类如何才不可变,要使一个类不可变,必须标记所有的数据域为私有,并不能提供set方法, 并且也没有什么方法提供指向可变对象的引用。,67,7.10 对象作为参数传给方法,目前我们学过把基本数据类型或者数组作为参数传给方法. 下面要学习把对象作为参数传给方法,和数组类似,实际上是传送对象引用的值. JAVA实际只有一种参数传送模式:传值(pass-by-value ),对引用类型,就是传对象的引用的值,68,7.10 对象作为参数传给方法,范例:解释程序,TestPassObject,Run,69,对象作为参数传给方法,70,7.11 变量的作用

43、域,第五章 方法 讲述了本地变量(在方法内部)的作用域的问题,这里讲述类中所有的变量的作用域. 实例和静态变量的作用域是整个类,他们可以在类中任何地方声明. 本地变量作用域开始于其声明处,终止于其所在块的末尾.本地变量在使用前必须被初始化.,71,7.11 变量的作用域:本地变量与类变量同名,请问打印哪个x,请问打印哪个y,演示:,规则: 本地变量优先,提示: 一般不在类中使用同名变量,以免混淆,方法参数除外.,72,7.12 this关键字,this用来表示正在调用这个实例方法的对象 使用this存取实例的数据域. 使用this调用同一个类的重载构造方法,73,作为调用实例方法的对象的代理(

44、 Proxy),74,调用重载构造方法,75,7.13 对象数组,在第六章,我们学习了数组,但那里我们只讨论了基本数据类型的数组,你也可以创建由对象组成的数组. 例如 Circle circleArray = new Circle10; 创建了由10个圆对象组成的数组.,76,对象数组,Circle circleArray = new Circle10; 对象数组实际上是引用变量的数组,于是调用 circleArray1.getArea()涉及两层引用,circleArray引用到数组,circleArray1引用Circle对象.,77,对象数组,Circle circleArray = n

45、ew Circle10; 初始化;/这里省略初始化语句,不初始化,则为null circleArray1.getArea(),78,实例,求圆Circle数组中的圆面积之和,TotalArea,Run,79,7.14 类的抽象和封装,在第五章 方法 里,你学会了方法的抽象以及用之进行程序开发,但Java提供许多层次的抽象机制. 类的抽象(Class abstraction )就是把类的实现和使用隔离.类的创建者提供类的描述让使用者知道如何使用这个类。类的使用者不需要知道类是具体实现的,类的实现细节被封装并对使用者隐藏。 classs contract. The collection of me

46、thods and fields that are accessible from outside the class, together with the description of how these members are expected to behave, serves as the classs contract.,80,类的抽象和封装,例如,类Circle的使用者只要求创建对象并计算面积,并不需要知道这个面积是如何具体计算的,当然,这个例子比较简单。,81,类的抽象和封装是硬币的两面,实际生活中有许多实际的例子可以演示类的抽象的概念。 计算机的组装:计算机由很多组件组成,如C

47、PU, CD-ROM, 软盘,硬盘,主板,风扇,等等(and so on),每个组件可以看成一个对象,具有属性和方法,为使这些组件协同工作,你需要知道的只是这些组件如何使用,以及他们如何相互连接交互,你不需要知道其内部工作原理(如不知道硬盘的内部原理细节不影响你使用硬盘)内部的实现细节就被封装并对你这个用户隐藏了。你就可以组装一台计算机却不需要知道各部件的内部细节。,82,面向对象的方法:每个组件可以看成类的对象,你可以有个类建模计算机中的各种风扇,风扇具有属性(数据域):尺寸、转速,方法:启动、停止。一个特定的风扇就是这个类的实例,具有特定的尺寸、转速,83,范例: 贷款类(Loan Cla

48、ss),Run,Loan,考虑获得贷款的问题,每一笔贷款可以看成贷款类的实例对象,利率、贷款数额、以及贷款年数,是其数据属性,你要求计算月还款额,以及总还款数额作为这个类的方法, 如果你要购买一量汽车,可以创建贷款对象,带有参数:贷款利率、贷款数额、贷款年数。你就可以使用它来计算月还款数额以及总还款数额。作为贷款类(Loan class)的使用者,你不需要知道这个类是具体如何实现的。,UML图见下页,84,85,范例: 贷款类(Loan Class),上述UML图用着类Loan的使用协议. 在本课程的学习过程中,年既是类的使用者,也是类的创建者,虽然在实际程序看法中两者往往是分开的,类的使用者

49、不需要知道类的具体实现细节,只要知道如何使用类(通过类的使用协议),下面假定这个类已经创建了,我们来考虑如何使用这个类,见下面的程序。,TestLoanClass,86,范例: 贷款类(Loan Class),从类的开发人员来看,一个类是设计用来为许多不同的人员使用的,可以应用于光法的应用领域,这就要求类提供各种方法来完成类的定制(customization),通过提供适当的构造方法、数据域、方法。,87,教学提示(Pedagogical Tip),The UML diagram for the Loan class is shown in Figure 7.23. Students shou

50、ld begin by writing a test program that uses the Loan class even though they dont know how the Loan class is implemented. This has three benefits: It demonstrates that developing a class and using a class are two separate tasks. It makes it possible to skip the complex implementation of certain clas

51、ses without interrupting the sequence of the book. It is easier to learn how to implement a class if you are familiar with the class through using it. For all the examples from now on, you may first create an object from the class and try to use its methods and then turn your attention to its implem

52、entation.,88,Example: The Course Class,TestCource,Run,Course,89,Example: The StackOfIntegers Class,Run,TestStackOfIntegers,90,Implementing StackOfIntegers Class,StackOfIntegers,91,Note to Instructor,You can now cover Chapter 8, “Strings and Text I/O,” or Chapter 12, “GUI Basics.”,92,Creating Windows

53、 Using the JFrame Class,Objective: Demonstrate using classes from the Java library. Use the JFrame class in the javax.swing package to create two frames; use the methods in the JFrame class to set the title, size and location of the frames and to display the frames.,TestFrame,Run,Optional GUI,93,Tra

54、ce Code,JFrame frame1 = new JFrame(); frame1.setTitle(Window 1); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle(Window 2); frame2.setSize(200, 150); frame2.setVisible(true);,Declare, create, and assign in one statement,reference,frame1,: JFrame title

55、: width: height: visible:,animation,94,Trace Code,JFrame frame1 = new JFrame(); frame1.setTitle(Window 1); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle(Window 2); frame2.setSize(200, 150); frame2.setVisible(true);,reference,frame1,: JFrame title: W

56、indow 1 width: height: visible:,Set title property,animation,95,Trace Code,JFrame frame1 = new JFrame(); frame1.setTitle(Window 1); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle(Window 2); frame2.setSize(200, 150); frame2.setVisible(true);,reference,frame1,: JFrame title: Window 1 width: 200 height: 150 visible:,Set size property,animation,96,Trace Code,JFrame frame1 = new JFrame(); frame1.setTitle(Window 1); frame1.setSize(200, 150); frame1.setV

温馨提示

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

评论

0/150

提交评论