版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计期末考试范围面向对象部分为主Chapter 8, 10, 11, 13, 14时间2小时,英文题目,熟记每章后面的英文术语( Key Terms变量和方法变量、方法,如:变量的申明:数据类型 变量名int a;方法的申明:返回类型 方法名(参数列表)语句int add(int a, int b), void setParameter(int a, int b), 注意大小写main方法main方法是一个特殊的方法,是程序运行的入口main方法的形式是固定的。public static void main(String args) /String args int a = 10;
2、int b = 12;int sum = a + b;Java程序构成Java是一种完全面向对象的程序设计语言,程序中不允许单独出现任何方法类是构成Java程序的基本单位,也就是说,前面出现的变量、方法 都必须申明在类的内部。这些变量和方法称为类的成员变量(属性,Attribute)和成员方法(Method),统称为类的成员(Member)。一个Java程序可以包含多个类,这些类可以封装在不同的包中Java类申明类的语法规则修饰符class类名变量的申明成员变量(属性)方法的申明成员方法)申明成员变量和申明成员方法的次序无关一个类可以同时申明多个成员变量和成员方法,也可以不申明任何变量或者方法
3、,这些都是合法的。在方法的内部也可以申明变量,这样的变量称为局部变量。Java类举例public class Person属性:name、age、gender方法:setName方法:getNameJava程序举例综合以上知识,我们将前面的 main方法申明为类Test的一个成员:public class Testpublic static void main(String args)int a = 10; /变量a是一个局部变量int b = 12;int sum = a + b;习惯:类名首字母大写,变量/方法名首字母小写数据类型简单数据类型:如int类也是一种数据类型,称为引用数据类型(
4、复杂数据类型,referencetype)。因此以下变量和方法的申明都是正确的:int a = 10;Person p;Test b;Person getPerson() 我们有时候也将类称为类型,如变量p的类型为Person类型,注意:这时候程序中必须已经申明了 Person类,否则将产生错误。Java程序举例class Person public class Testpublic static void main(, )int a = 10; /变量a是一个局部变量int b = 12;int sum = a + b;Person p;该Java程序由Person和Test两个类构成自定义
5、类和预定义类Java已经预先定义了很多类,这些类称为预定义类如:String与此相对应,由我们自己定义的类则称为自定义类,如前面的Person类和Test类如前面所说,类是一种数据类型。因此,无论是预定义类还是自定义类,在程序中我们都可以用它们来申明变量的数据类型、或者作为方法的返回类型。Java类举例public class PersonString name;int age;public void setName(String str) public String getName()return name;Java源程序源程序保存在后缀名为.java的文件中。一个Java源文件可以同时包含
6、多个类的申明,但是其中最多只能有一个用public修饰的类,即公有类。源文件的名称必须和公有类的名称相一致,包括大小写举例:Hello.javapublic class Hellopublic static void main(String args)System.out.println( Hello World!” );对象的创建对象是类的实例假设程序中申明了 Person类,那么我们就可以在程序的任何地方创建任意的Person类的实例,即Person类型的对象对象创建的语法形式:new类名(,);括号中是否有参数,要依据构造方法比如:new Person();Person 类public
7、class PersonString name;int age;public void setAge(int a)age = a;public int getAge()return a;对象的存在形式对象存在于内存(堆,heap)0 x3A5C对象的引用对象由相应类型的变量引用,如:Person pl = new Person();Person p2 = new Person();nameageQx3A5c对象的操作语法形式:对象.成员,如:p1.setAge(18);p2.setAge(29);nameage0 x3 A 5c必须是对象.成员,不能是类.成员,除非该成员是static修饰的P
8、erson.setAge(20) Error关于方法调用如方法有返回类型,则必须使用return语句,返回的值必须与返回类型匹配void返回类型可以没有return语句,也可以包含一个没有值的return 语句public class Personint age;public void setAge(int a)age = a;return;构造方法(ConstructorJava中的每个类都有构造方法,构造方法具有和类名相同的名称(包括大小写),而且无任何返回值(包括 void)。构造方法一般对成员变量赋一些初值;如果一个类没有声明构造方法,Java自动为该类生成一个默认的无参的构造方法,并
9、且该默认构造方法的内容为空。即,Java类可以通过两种方式获得构造方法使用系统默认的无参构造方法显式定义一个或多个构造方法一旦显式定义了构造方法,系统不再提供默认构造方法一个类至少有一个构造方法,可以有多个构造方法,根据参数的不同决定执行哪一个(重载)Perso读public class PersonString name;int age;public Person() / 构造方法public void setAge(int a)age = a;public int getAge()return a;引用数据类型8种基本数据类型int long short boolean char doub
10、le float byte除此以外的数据类型称为引用类型引用类型数据以对象的形式存在引用类型变量的值是某个对象的句柄(对象在内存中的地址),而不是 对象本身声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个 具体的对象,引用类型可赋值为null类中的变量属性变量(成员变量):在方法体外定义的变量,是类的成员,可以是 基本类型、引用类型甚至是类本身,只要对象存在其属性变量就存在。作用域:类。局部变量:在方法体内定义的变量,也称为 stack variable,作用域: 方法。方法执行时存在,方法执行完毕后消失局部变量在使用前必须进行初始化,而属性变量可以不需要显式进行初始化,因为在创建
11、对象时会进行默认的初始化。举例:MyDate类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
12、(22, 9, 2001); m.display();)对象的构造和初始化(1)为引用类型变量分配引用空间MyDate m;m null创建新对象-首先为新对象分配内存空间,并进行属性(实例变量)的默认初始化,newday mnull month year对象的构造和初始化(2)Java引用类型成员变量默认初始化原则成员中呈至耳物侑忡。0short0Ifit0longOLU1000TfloatOOFdoubleO.gboceontai所有中瞅里nnull对象的构造和初始化(3)进行属性(成员变量)的显式初始化,显式初始化取值来自于类的定义中属性声明部分private int day = 12;
13、private int month = 6;private int year = 1900;m null对象的构造和初始化(4)执行构造方法public Mydate(int y, int m, int d) year = y;month = m;day = d;new MyDate(22, 9, 2001);innull对象的构造和初始化(5)为引用类型变量m赋值m = new MyDate(22, 9, 2001);0 xja4-Sb封装类Java编程语言提供wrapper类来操作作为对象的原始数据元素。每个Java原始数据类型在java.lang包中具有相应的 wrapper类。使用wr
14、apper类的示例:int pInt = 420;Integer wInt = new Integer(pInt);/ this is called boxingint p2 = wIValue();/ this is called unboxing自动装箱与开箱Integer intArray - new Integer (2), Eqm 虱 ctI integer intArray - i2r 3);new Integer (4) , new Integer 3);Integer i = 3;不仅限于Integer,所有 wrapper类都可以Object o = 3, fal
15、se); / 合法转换Integer integerObject = Integer.valueOf(12);int number = Integer.parseInt (12);注:Integer.parseInt (“xyz”)编译时没问题,但运行时会异常访问权限(Permission)Public; Protected;缺省(default); privateModifier on members in a classAccessed from the same classAccessedAccessedfrom thefrom asame package subclassAccesse
16、d from a different packagepublicVprotectedMMdefaultprivateM数组数组由一组相同类型的元素构成元素的个数称为数组的长度,通过数组下标访问元素,下标0代表第一个元素数组是一个对象,数组类型属于引用数据类型,可赋值为 null.数组的申明和创建数组的申明inta;或int a;Point p;或Point p;数组对象必须通过他w关键字创建数组的初始化mtn a = 1,2, 3,4, 5);Point口 p = newPointfljl), new Point(2,2);StringQ users = “John”, “Mary”;参数传递
17、1基本变量传值,引用变量传地址class MyDate private int day;private int month;private int year;public MyDate(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 getMon
18、th() return month; public int getYear() return year;public void display()System.out.println(day + - + month + - + year);参数传递2基本变量传值,引用变量传地址public class Examplepublic static void main(String args)Example ex = new Example();int date = 9;MyDate d1= new MyDate(7,7,1970);MyDate d2= new MyDate(1,1,2000);e
19、x.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(MyDate b)b = new MyDate(22,2,2004);public void change3(MyDate b)b.setDay(22);参数传递演示1public class Examplepublic static void main(String args)
20、Example ex = new Example();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000);ex.changel(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 Bir
21、thDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);参数传递演示2public class Examplepublic 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.changel(date);ex.change2(d1);ex.change3(d2);System.out.
22、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);mam参数传递演示3public class Examplepublic static void main(String args口)Example ex = new Example();int date = 9;Birt
23、hDate 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(Birth
24、Date b)b.setDay(22);参数传递演示4public class Examplepublic 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.displ
25、ay();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);参数传递演示5public class Examplepublic static void main(String args)Example ex = new Example();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2=
26、 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参数传递演示6public class Exa
27、mplepublic 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;new
28、public void change2(BirthDate b)BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);栈内存change2 bd2main Jdldateex110925卜处内存状态7T1970587934354752587934T参数传递演示7public class Examplepublic static void main(String args)Example ex = new Example();int date = 9;BirthDate d1= new BirthDate(7,7,19
29、70);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 = newBirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);栈内存change2
30、b 666888 f d2 354752参数传递演示8public class Examplepublic 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.disp
31、lay();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);参数传递演示9public class Examplepublic static void main(String args)Example ex = new Example();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d
32、2= 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);public class Examplepubl
33、ic 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
34、 change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22); 参数传递演示11public class Examplepublic 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.chan
35、ge2(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); 静态方法以static关键字申明的方法就称为静态方法,也称为类方法对于静态方法,可以由类直接调用,当然,也可以通过对象进行调用静态变量一个由static
36、关键字修饰的变量,就称为静态变量,也称为类变量,(请对照实例变量)如果一个类变量的访问级别为public,那么可以通过类直接访问该静态变量静态变量是多个对象间共享的方法的重载在同一个类中可以定义多个同名方法-方法重载public class PrintStream TOC o 1-5 h z public void println(int i) ,public void println(float f) ,public void println(String s) ,重载方法的参数列表必须不同重载方法的返回值类型可以相同,也可以不同构造方法重载构造方法重载举例:public class Pro
37、ject TOC o 1-5 h z public Project() ,public Project(String code) ,public Project(String code, String name) ,构造方法重载,参数列表必须不同可以在构造方法的第一行使用this关键字调用其它(重载的)构造方法关键字this指代当前对象自身public class Project private String proj_code =;private String proj_name =;public void setName(String name)j_name=name; /
38、 等价于 proj_name=name, public class Test public static void main(String args)Project proj_1 = new Project(); proj_1.setName( “abc” );/this 是 proj_1Project proj_2 = new Project(); proj_2.setName( “xyz” );/this 是 proj_2public void setName(String proj_name)j_name=proj_name; /解决了变量的命名冲突和 不确定性问题),调
39、用重载的构造方法public class Project private String proj_code =;private String proj_name =;public Project(String code) , )public Project()this( “abc”); /this必须是方法中的第一条语句, )this指代当前对象,可以return thisthis可以调用重载的构造方法,但不能直接用this初始化对象,newthis()是非法的类的继承类继承语法规则 class extends (Object类是所有Java类的最高层父类Java只支持单继承,不允许多重继承一
40、个子类只能有一个父类一个父类可以继承出多个子类public class Person public String name;public int age;public Date birthDate;public String getInfo() 为描述和处理学生信息,定义类 Studentpublic class Student public String name;public int age;public Date birthDate;public String school;public String getInfo() 通过继承,简化Student类的定义public class Pe
41、rson public String name;public int age;public Date birthDate;public String getInfo() .public class Student extends Personpublic String school;方法的重写/覆盖在子类中可以根据需要对从父类中继承来的方法进行改造-方法的重写重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型重写方法不能使用比被重写方法更严格的访问权限构造方法不能被重写,只能通过 super调用方法重写举例public class Person protected String
42、name;protected int age;protected Date birthDate;public String getInfo() return Name: + name + n +age: + age;public class Student extends Personprotected String school;public String getInfo() return Name: + name + nage: + age + nschool: +school;关键字super 在Java类中使用super来引用父类的成分super可用于访问父类中定义的属性super可用
43、于调用父类中定义的成员方法super可用于在子类构造方法中调用父类的构造方法super的追溯不仅于直接父类关键字super举例public class Person protected String name;protected int age;protected Date birthDate;public String getInfo() return Name: + name + n +age: + age;public class Student extends Personprotected String school;public String getInfo() /调用父类的方法r
44、eturn super.getInfo() + nschool: + school;调用父类构造方法在子类的构造方法中可使用super(argument_list)语句调用父类的构造方法,super语句必须是构造方法的第一条语句如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错在子类中,不能通过父类的构造方法名调用父类的构造方法,只能通过super关键字调用父类构造方法举例public class Person private St
45、ring name;private int age;private Date birthDate;public Person(String name, int age, Date d) = name;this.age = age;1011121314151617181920212212345678this.birthDate = d;)public Person(String name, int age) this(name, age, null);)public Person(String name, Date d) this(name, 30, d);)public P
46、erson(String name) this(name, 30);)/ ,)public class Student extends Person private String school;public Student(String name, int age, String s) super(name, age);school = s;)public Student(String name, String s) super(name);school = s; TOC o 1-5 h z )public Student(String s) / 编译出错:no super() super()
47、;13school = s;14)15)不能通过this关键字去初始化父类的属性,只能通过super利用父类的构造方法去初始化父类的属性,不能通过父类构造方法名调用父类 构造方法public class Student extends Person private String school;public Student(String name, int age, String s) = name; this.age = age /errorschool = s;)public Student(String name, String s) Pernson(name); /e
48、rrorschool = s;11public Student(String s) / 编译出错:no super()super();school = s;)多态(1)多态-在Java中,子类的对象可以替代父类的对象使用一个对象只能有一种确定的数据类型一个引用类型变量可能指向(引用)多种不同类型的对象,父类的引用变量可以指向子类实例,反之不成立Person p = new Student();Object o = new Person();o = new Student();Object口 o = new Person(), new Student();Student s = new Pers
49、on() /error多态(2)一个引用类型变量如果声明为父类的类型, 但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法Student m = new Student();m.school = pku; / 合法Person e = new Student();e.school = pku; / 非法public class Person public int getInfo()Object o = new Person();o.getInfo() 非法动态绑定/虚方法调用正常的方法调用Person e = new Person(); e.getInfo();Student
50、 e = new Student(); e.getInfo();动态绑定(多态情况下)Person e = new Student();e.getInfo(); 此时调用的是 Student类中定义的getInfo方法Person a = new Person(), new Student()Person0.getInfo() 调用 Person类中的方法Person1.getInfo() / 调用 Student 类中的方法编译时类型和运行时类型多态性应用举例(1)同类收集(homogenous collections)MyDate口 m = new MyDate2;m0 = new MyD
51、ate(22, 12, 1964);m1 = new MyDate(22, 7, 1964);异类收集(heterogeneous collections)Person p= new Person3;p0 = new Student();p1 = new Person();p2 = new Graduate();多态性应用举例(2)方法声明的参数类型为父类类型,可以使用子类的对象作为实参调用该方法public class Testpublic void method(Person e) /,e.getInfo();)public static void main(Stirng args)Tes
52、t t = new Test();Student m = new Student();t.method(m);instance。臊作符 public class Person extends Object, public class Student extends Person, public class Graduate extends Person, Person p = new Student();p instanceof Student; /true因此从(p instanceof Student)不能推断p被声明为Student类型 public void method1(Perso
53、n e) if (e instanceof Student) /处理Student类型及其子类类型对象 else if (e instanceof Graduate) 处理Graduate类型及其子类类型对象 else 处理Person类型对象=#作符与equals方法public boolean equals(Object obj) return (this = obj);)Object中的equals()方法利用=实现Person a = new Person(); Person b = a; b.equals(a)=true;基本类型使用=时比较值;引用类型使用= 寸仅比较地址;如果想要
54、比较引用类型不同实例的值(内容),必须重写equals方法举例public boolean equals(Object o) if (o instanceof Circle) return radius = (Circle)o).radius;)elsereturn false;)Circle a = new Circle( 1”);Circle b = new Circle ( 1 );a!=b 和 a.equals(b) = true 同时成立toString(方法任彳Java类都是Object的子类Object定义了一个toString()方法,它返回一个实例(对象)所属类的名 称亥对象在内存的地址;System.out.println(person);等价于 System.out.println(person.toString();同样:Person : + person ;等价于 “ Person : + person.toString();抽象类在有些情况下,可以暂时不实现类的某个成员方法,这时可以用abstract关键字修饰类、以及相应的方法。以abstract修饰的类称为抽象类,以abstract修饰的方法称为抽象方 法不能对抽象类直接进行实例化。在子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 严格执行酒店规章制度
- 语文学习计划范本七篇
- 2024中小学教师聘用合同(含课后服务与社会实践指导)2篇
- 餐饮食品行业行政后勤工作总结
- 2024年度基础设施建设投资管理与咨询顾问服务合同范本3篇
- 酒店客房管理的流程分析
- 浙江 城市乡村高考浙江作文题目
- 大气课程设计锅炉燃煤
- 2024全新酒店资产转让合同样本下载3篇
- 把课程设计做好英语
- 浙江省温州市2023-2024学年九年级上学期期末数学试题(含解析)
- DL∕T 571-2014 电厂用磷酸酯抗燃油运行维护导则
- 2021电子商务淘宝天猫客服培训资料
- 中国法律史-第二次平时作业-国开-参考资料
- (高清版)JTGT D81-2017 公路交通安全设施设计细则
- 浙江省宁波市鄞州区2023-2024学年九年级上学期期末语文试题(含答案解析)
- 环酯红霉素的药物安全性评价及其临床前研究
- (正式版)SHT 3551-2024 石油化工仪表工程施工及验收规范
- MOOC 大学生劳动教育-南京大学 中国大学慕课答案
- 人教版五年级数学上册期末考试卷
- 铁路工程绿色设计标准
评论
0/150
提交评论