第三章 类和对象.ppt.ppt
《第三章 类和对象.ppt.ppt》由会员分享,可在线阅读,更多相关《第三章 类和对象.ppt.ppt(130页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 类和对象类和对象本章主要内容:本章主要内容:3.1类和对象的概念类和对象的概念重点重点3.2 static关键字关键字3.3 this关键字关键字3.4 继承继承重点重点3.5 final关键字关键字3.6 抽象方法和抽象类抽象方法和抽象类重点重点3.7 接口重点3.8 内部类和匿名类难点3.9 包(package)了解3.10 综合举例难点3.11上机实验3.1类和对象的概念基本数据类型:如int,float等,系统已定义好其上的操作,如算术运算等。复合数据类型:用户自己定义的数据类型,需要程序员自己定义一些方法,对该类型的实例进行所需要的操作。数据类型加上其上的操作就称为抽象
2、数据类型。Java语言中最重要的抽象数据类型由类来实现。3.1.1类和对象的概念类:封装的实体=变量(数据)+方法(行为)变量:描述属性或状态 方法:作用于数据上的操作对象:类的具体化,实例化。类的结构成员变量成员变量成员方法成员方法可以是基本类型可以是基本类型或复合类型或复合类型3.1.2 类的定义Java中类定义的一般格式为:访问权限 class 类名 extends 父类名 访问权限访问权限 类型类型 成员变量成员变量1;访问权限访问权限 类型类型 成员变量成员变量2;.访问权限访问权限 类型类型 成员方法成员方法1(参数列表)(参数列表)类型类型 局部变量局部变量;方法体;方法体;.【
3、例3-1】定义一个日期类。class Date int year;int month;int day;上面定义的Date类只包含了year,month,day三个成员变量,没有定义成员方法。【例3-2】定义一个学生类。class student /类名 /类体开始的花括号 int id;/学号 string name;/姓名 float score;/成绩 Date birthday;/生日 void setName(String sname)/成员方法 name=sname;String getName()/成员方法 return name;/类体结束的花括号上面的student类定义里,既
4、有成员变量,也有成员方法。类的成员变量成员变量:就是类中所包含的数据,一般根据实际问题的需求来决定某个类中需要定义哪些成员变量及其对应的数据类型,成员变量的数据类型可以是Java数据类型中所规定的任意一种合法类型。在例3-2中定义的学生类student中,就包括了四个不同类型的成员变量:id、name、score及birthday。类的成员方法成员方法:就是类中所包含的数据上的操作,类似于C语言中的函数,所以类中的成员方法也称为成员函数。例如:中定义的学生类student中,就包括了两个成员方法:setName(String sname)和getName()。但在 Java语言中,所有的成员方
5、法的定义都必须在包括在类内,类外不允许定义任何方法。4.4.类的实例化类的实例化对象对象对象是类的实例化,或者说是“类”类型的变量。学生类学生类学号学号姓名姓名修改姓名()修改姓名()获取姓名()获取姓名()学生对象学生对象1001张三张三修改姓名()修改姓名()获取姓名()获取姓名()对象的定义对象声明一般格式如下:类名 对象名列表;例如:student s1,s2;/声明了两个student类类型的对象s1和s2对象的成员变量和方法的调用调用成员变量的格式:对象名.变量名;例如:s1.name=“ZhangSan”;调用成员方法的格式:对象名.方法名(实际参数表);例如:s1.setNam
6、e(“ZhangSan”);3.1.3 构造方法构造方法:是类的一个非常特殊的成员方法,主要用于在创建(构造)对象时初始化对象的数据成员。使得每个新创建的对象的数据成员都有初值。构造方法的特点构造方法的名称和类名同名;构造方法没有返回值,void都不能有;构造方法可以根据需要定义多个,当然形参是不同的,即允许重载;通常是public类型的,即公有的,允许外部访问;【例3-3】构造方法的定义class student /类名 /类体开始的花括号 int id;/学号 String name;/姓名 int age;/年龄 float score;/成绩 student()/无参的构造方法 id=
7、0;name=”;age=0;score=0;/有参的构造方法 student(int sid,String sname,int sage,float sc)id=sid;/将id的值初始化为sid name=sname;/将name的值初始化为sname age=sage;/将age的值初始化为sage score=sc;/将score的值初始化为sc /类结束括号默认的构造默认的构造方法方法当在类中没有显式定义构造方法时,系统将自动为该类生成一个默认的构造方法。默认构造方法还具有如下的特点:没有形式参数,每个类只有一个默认构造方法把对象的数据成员都初始化为0、0或null。如果类中显示定义
8、了无参的构造函数,那么这个无参的构造函数就是默认的构造方法,系统将不再自动生成。3.1.4类的实例化对象的构造1.无构造函数时对象的构造无构造函数时对象的构造 当对应类中没有显示定义构造函数时,系统会自动增加一个默认的构造函数。在实例化对象时,对象的数据也将按照默认的构造函数进行初始化。【例3-4】默认构造函数的对象构造class student /类名 /类体开始的花括号 int id;/int型成员变量,表示学号 String name;/String型成员变量,表示姓名 int age;/int型成员变量,表示年龄 f loat score;/float型成员变量,表示成绩 public
9、 static void main(String args)/主函数 student s1=new student();/构造student对象s1 student s2=new student();/构造student对象s2 /输出两个对象s1,s2的成员变量 System.out.println(“s1.id=”+s1.id+”s1.name=”+s1.name+”s1.age=”+s1.age+”s1.score=”+s1.score);System.out.println(“s2.id=”+s2.id+”s2.name=”+s2.name+”s2.age=”+s2.age+”s2.s
10、core=”+s2.score);运行结果2.有构造函数时对象的构造调用student类的student()构造方法进行初始化s1的成员变量student s1=new student();调用student类的student(int sid,string sname,int sage,float sc)构造方法student s2=new student(1001,”Zhang”,20,90.0);new 是Java 语言提供的运算符,用于创建对象时使用。在创建对象时,系统会为该对象申请相应的内存空间,而且将自动调用该类的某个构造函数。3.3.显式的成员初始化显式的成员初始化 在定义类时,如
11、果在定义成员时就进行初始化,这样的初始化成为显式的初始化,这样的初始化也是允许的。例如:class student int id=1001;/显式初始化成员idstring name=“ZhangSan”;/显式初始化成员nameint age=20;/显式初始化成员agefloat score=90;/显式初始化成员score4.4.对象构造时的初始化对象构造时的初始化顺序顺序在使用new运算符创建对象时,就发生了对象的构造。构造调用构造方法时,会按下面顺序进行初始化工作:(1)为新对象分配内存空间,并进行默认的初始化;(2)执行显式的初始化;(3)执行显式的构造方法。【例3-6】构造方法的
12、顺序class student /类名 /类体开始的花括号int id=1000;/显式初始化成员idString name=“ZhangSan”;/显式初始化成员nameint age=20;/显式初始化成员agefloat score=90.0;/显式初始化成员scorestudent(int sid,string sname,int sage,float sc)/有参的构造方法 id=sid;/将数据成员id的值初始化为sid name=sname;/将数据成员name的值初始化为sname age=sage;/将数据成员age的值初始化为sage score=sc;/将数据成员scor
13、e的值初始化为scpublic class TestS public static void main(string args)student s1=new student(1001,”LiSi”,19,80.0);System.out.println(“id=”+s1.id+”name=”+s1.name+”age=”+s1.age+”score=”+s1.score);【例3-6】的运行结果是:id=1001 name=LiSi age=19 score=80.03.1.5 访问权限1.类成员的访问权限类成员的访问权限在定义类的成员时,访问权限的修饰符有public,private,pro
14、tected或者没有(缺省的),根据这些访问权限关键字出现的位置不同,它们既可以用来修饰类,也可以用来修饰类中的成员变量或成员方法。不同的权限决定了在程序运行时被处理的方式。表3-1 访问权限修饰符 权限权限关键字关键字访问类型访问类型publicprotectedprivate无修饰符无修饰符同一类内同一类内是是是是同一包中的同一包中的子类子类是是否是同一包中的同一包中的非子类非子类是是否是不同包中的不同包中的子类子类是是否否不同包中的不同包中的非子类非子类是否否否【例3-7】类成员的访问权限 class Authority public int a;/定义了一个public型的成员变量a
15、protected int b;/定义了一个protected型的成员变量b private int c;/定义了一个private型的成员变量c int d;/定义了一个缺省型的成员变量d public setData(int n1,int n2,int n3,int n4)a=n1;/在类内,将局部变量n1赋给成员变量a b=n2;/在类内,将局部变量n2赋给成员变量b c=n3;/在类内,将局部变量n3赋给成员变量c d=n4;/在类内,将局部变量n4赋给成员变量d public printData()System.out.println(a+”+b+”+c+”+d);/输出成员变量a,
16、b,c,d public class testAuthority public satic void main(String args)Authority objA1=new Authority();objA1.a=1;/在类外,可以直接访问public型成员 objA1.b=2;/在类外但同一包内,可以直接访问protected型成员 objA1.c=3;/在类外,不允许直接访问privaite型成员 objA1.d=4;/在类外但同一包内,可以直接访问缺省型成员 objA1.printData();/在类外,可以调用public型的方法printData objA1.setData(10,
17、20,30,40);/在类外,可以调用public型的方法setDataobjA1.printData();/在类外,可以调用public型的方法printData2.2.类的访问类的访问权限权限在Java 中,类前面的访问权限修饰词可以用于确定在某个程序库中的类哪些对于该库的使用者是可用的。对于类的访问权限,仅有两个选择:public(公有的)或是缺省的(仅限同一包内允许访问)。例如:public class A ;/类A是public型的权限,任何地方都可以使用class B ;/类B是缺省型的权限,仅限同一包内使用3.1.6 3.1.6 内存垃圾内存垃圾回收回收在Java中,内存垃圾是指
18、那些被对象占用的内存如果不再使用的话,将会被系统视为“内存垃圾”而进行回收。回收后的内存将进入系统空闲内存区,可以分配给其他申请内存的程序。在Java中,使用垃圾回收器(System.gc()方法)在系统空闲时自动来回收无用对象占据的内存资源。并使用finalize()方法完成在“垃圾回收时刻”做一些重要的清除工作。【例3-8】内存垃圾回收class point int x,y;point(int a,int b)x=a;y=b;System.out.println(point constructor-);public void finalize()/注意该方法 System.out.prin
19、tln(point finalizer-);public class testFinalize public static void main(String args)point p1,p2;p1=new point(1,1);p2=new point(2,2);p1=null;p2=null;System.gc();/垃圾收集 System.out.println(The end in main-);3.2 static3.2 static关键字关键字3.2.1 static变量变量 在Java中,static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以定义静态stat
20、ic代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。1.static1.static变量的变量的定义定义格式如下:static 类型 变量名列表;例如:class sV static int a,b=2;/定义了static变量2.static2.static变量的访问变量的访问方式方式静态变量可以直接通过类名来访问,也可以通过对象来访问。访问语法为:类名.静态变量名 对象名.静态变量名;/不推荐,实例变量的访问一般只有这种方式【例3-9】static变量的使用public class sV static int a,b=
21、2;/定义了static变量 public static void main()sV.a=sV.b+3;/通过类名.变量名访问,推荐 sV v=new sV();v.b+;/通过对象.变量名访问,不推荐 System.out.println(sV.a+”+sV.b);3.2.2 static3.2.2 static方法方法静态方法:可以直接通过类名调用,任何的实例对象也都可以调用,因此静态方法中不能用不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员方法),只能访问所属类的静态成员变量和成员方法。1.static1.static方法的方法的定义定义定义格式如下:sta
22、tic 返回值类型 方法名(形参列表)【局部变量】;/可以定义局部变量 其他语句;/可以使用静态变量,但不允许使用类的实例变量;2.static2.static方法的访问方法的访问方式方式访问静态方法可以为:类名.静态方法名(实参列表);对象名.静态方法名(实参列表);/不推荐使用,非静态的方法只有这一种调用方式【例3-10】static方法的使用public class staticF static int a;/定义static变量 int b=3;/定义了实例变量 static void fM()/定义static方法 int t;/局部变量 staticF.a=2;/静态方法中使用类变
23、量 t=staticF.b;/错误用法,b不是静态变量 staticF sf=new staticF();t=sf.b;/这样可以用 System.out.println(staticF.a+”+sf.b+”+t);public static void main(String args)staticF.fM();/通过类名调用静态方法 3.2.3 static3.2.3 static代码块代码块 静态代码块:采用static修饰的代码块。Java虚拟机(JVM)加载类时,采用先加载静态的,再加载其它的代码,所以会优先执行static代码中的内容。JVM加载类时会执行这些静态的代码块,如果sta
24、tic代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。【例3-11】static代码块的使用public class StaticTest private static int a;/静态成员变量aprivate int b;/一般成员变量b(非静态的)static /静态代码块 StaticTest.a=1;System.out.println(a);StaticTest t=new StaticTest();t.f();t.b=100;System.out.println(t.b);static StaticTest.a=2;StaticTest.
25、b=200;/这个用法会出错!因为b不是静态成员变量 System.out.println(a);static StaticTest.a=3;System.out.println(a);public void f()System.out.println(Test in f!);public static void main(String args)static int t=2;/编译会出错!static不能修饰方法中的局部变量 3.3 this关键字在Java中,this关键字用于类的成员方法内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 类和对象.ppt 第三 对象 ppt
限制150内