《跨平台程序设计语言》课件-第 3 章 类和对象_第1页
《跨平台程序设计语言》课件-第 3 章 类和对象_第2页
《跨平台程序设计语言》课件-第 3 章 类和对象_第3页
《跨平台程序设计语言》课件-第 3 章 类和对象_第4页
《跨平台程序设计语言》课件-第 3 章 类和对象_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

第3章类和对象1.1面向对象编程思想主讲人:_________

什么是面向对象面向过程面向过程是解决问题的常规思路,更加符合解决问题的想法,但是随着步骤越来越多,就很难满足需求了。面向对象面向对象是把东西分拆为各个对象,每个对象完成自己的核心动作,分工合作,对象之间交互完成功能。什么是面向对象例如,在真实世界的学校里,会有学生和老师等实体,学生有学号、姓名、所在班级等属性(数据),学生还有学习、提问、吃饭和走路等操作。学生只是抽象的描述,这个抽象的描述称为“类”。在学校里活动的是学生个体,即张同学、李同学等,这些具体的个体称为“对象”,“对象”也称为“实例”。面向过程和面向对象区别要把大象放冰箱,怎么做?提问面向过程和面向对象区别打开冰箱门->把大象放进冰箱->关上冰箱门面向过程打开冰箱门打开冰箱门打开冰箱门Method1Method2Method3面向过程和面向对象区别两个对象,大象和冰箱。大象有自己的固有属性高和重量,还有两个动作分别是进冰箱和出冰箱。冰箱也有自己固有属性高和重量,动作也有开门和关门。面向对象特征:身高、重量动作:进冰箱、出冰箱特征:身高、重量动作:开门、关门大象冰箱面向过程和面向对象区别面向过程面向过程是解决问题的常规思路,更加符合解决问题的想法,但是随着步骤越来越多,就很难满足需求了。面向对象面向对象是把东西分拆为各个对象,每个对象完成自己的核心动作,分工合作,对象之间交互完成功能。第3章类和对象1.2类和对象主讲人:_________

类和对象的概念(a)设计图纸(b)申请地皮(d)可居住的房子居民自行设计:根据需要,设计图纸,包括用途、功能、布局、面积等等。向土地管理者申请:在什么地方、地点、相邻关系、朝向、大小等等。给出红线图。申请者:根据申请的用途、以及批准的地点、大小,在给定位置上建造房子。房子:建造完成。根据需要进行装修,完成所需的居住功能,形成可以居住的房子。类对象变量实例化对象面向对象程序设计主要步骤:定义类

用类创建对象。下面结合一栋房子的建造过程,来理解向对象程序设计的基本概念。(c)施工建设用类定义变量类的概念类是一个概念类是对某一具体事物进行抽象的概念,是对事物进行描述的模型;根据观测事物的需要,构建一个描述事物主要特征、行为的框架,叫做类;同一事物,由于观察的侧面不同、用途不同,所提取的类也不同。例如:在进销存管理系统中,有商品、客户、供应商等类。商品类特征:商品编号、商品名称、商品简称、商品产地、规格、单位、单价、数量、包装、批号、批准文号、商品简介、供应商编号等;行为:进货、退货、销售、出库、盘点。客户类特征:客户编号、客户名称、客户简称、地址、电话、传真、邮政编码、联系人、联系人电话、开户银行、账号;行为:购买、退货。供应商类特征:供应商编号、供应商名称、简称、地址、邮政编码、电话、传真、联系人、联系人电话、开户银行、账户;行为:供货、退货、售后服务。成员变量(属性)定义格式:[修饰符]˽变量类型˽变量名[=初始值];创建一个Java类在课程中,加上方括号部分表示可以缺省。privateintiAge=24;StringsName;例如[修饰符]˽class˽类名{[构造方法]

成员变量(属性)定义列表

方法列表}修饰符有:public、private、protected、static、final,在后续课程详细说明;变量类型:可以是简单类型、也可以是复合类型、以及自定义类型,上一章介绍过;变量名:Java合法标识符,建议第一个字母标识变量的类型,小驼峰命名,如b表示byte型等等;初始值:也叫默认值,是当变量没有重新赋值之前的值,在大部分情况下不对变量赋初值。格式其中创建一个Java类publicdoubletotal(double[]x,intm){inti;doublesum=0.0;for(i=0;i<m;i++)sum+=x[i];returnsum;}例如成员方法定义格式其中修饰符有:public、private、protected、static、final,在后续课程详细说明;返回值类型:指的是本方法有返回结果,其结果的类型;没有返回值定义为void;方法名称:符合标识符定义规则,建议方法名用首字母大写、其余小写的形式;方法体:符合Java语法规则的语句块。形式参数列表:形式为“类型变量名1,类型变量名2,……”,其中的类型可以是简单类型、复合类型、自定义类型,变量名要求符合标识符定义规则;[修饰符]˽返回值类型˽方法名称([形式参数列表]){

方法体;}创建一个Java类作用:构造方法的作用是实例化用该类定义的对象、且对对象中的属性进行初始化。形式同成员方法,但构造方法没有返回值类型;其修饰符为public;构造方法名称要求与类名同名;一个对象定义以后,被实例化时、执行new时首先执行的是构造方法;在Java中,构造方法不是必须的,如果在类中没有定义声明构造方法,JVM会给这个类一个默认的构造方法;一个类也可以定义多个构造方法。规定:构造方法例:进销存管理系统进销存管理系统商品供应商客户客户ID客户名称地址电话传真联系人联系人电话开户银行账号客户ID客户名称地址电话传真联系人联系人电话开户银行账号商品ID商品名称规格计量单位单价数量供应商ID库存管理至少涉及三个类例:进销存管理系统—创建一个商品类//商品类://成员变量(属性)和方法classCommodity{ //成员变量列表 StringsID; //商品ID publicStringsName;//商品名称 StringsSpecifications;//规格 StringsUnit; //计量单位 floatfPrice; //单价 intiQuantity;//数量 StringsSupplerID;//供应商ID //下面是方法列表 //进货处理,经过经手人验收即可入库publicvoidGoodsReceiv(intiNumber,StringID){ if(ID==sID) iQuantity+=iNumber; else System.out.println(“ID错误!”);}publicvoidSoldOff(intiNumber,StringID){ if(ID==sID) iQuantity-=iNumber; else System.out.println(“ID错误!”); }publicvoidWarehousing(intiNumber,StringID){ System.out.println("管理员ID="+ID+"收到"+iNumber+"件"); }}商品类的方法,包括入库、出库等。方法的定义包括方法名、参数、方法体等。成员变量(属性)列表,包括商品ID、名称、规格、单位、单价、数量、供应商等。缺省修饰符为private。例:进销存管理系统—创建一个供货商类classSupplier{ StringsSupplierID;//客户ID StringsName;//客户名称 StringsEddress;//地址 StringsTelphone;//电话 StringsFax; //传真 StringsContacts;//联系人 StringsContTel;//联系人电话 StringsNank;//开户银行 StringsAccountNumber;//账号

publicvoidSupplyCommodity(intiNumber,StringID){

System.out.println("供应商品ID="+ID+","+iNumber+"件。");

}

publicvoidReturnGoods(intiNumber,StringID){

System.out.println("退货商品ID="+ID+","+iNumber+"件");

}}例:进销存管理系统—创建一个客户商类classCustomer{ StringsCustomerID;//客户ID StringsName;//客户名称 StringsEddress;//地址 StringsTelphone;//电话 StringsFax; //传真 StringsContacts;//联系人 StringsContTel;//联系人电话 StringsNank;//开户银行 StringsAccountNumber;//账号

publicvoidPurchase(intiNumber,StringID){

System.out.println("购买商品ID="+ID+","+iNumber+"件。");

}

publicvoidReturnGoods(intiNumber,StringID)

{ System.out.println("退货商品ID="+ID+","+iNumber+"件。");

}}对象对象创建过程publicclassStockControl{ publicstaticvoidmain(Stringargs[]){ //用Commodity类创建对象 CommoditycElectricFan; cElectricFan=newCommodity(); cElectricFan.sName="箱式电扇"; cElectricFan.GoodsReceiv(100,"TS20160730030"); cElectricFan.SoldOff(30,"TS20160730030"); CommoditycComputer; cComputer=newCommodity(); cComputer.GoodsReceiv(500,"HW20160730030"); cComputer.Warehousing(500,"HW20160730030"); cComputer.SoldOff(4,"HW20160730030"); }}

在构建“类”的基础上,可以创建对象。构建商品(Commodity)、客户(Customer)和供应商(Supplier)三个类的基础上,创建一个进销存(库存管理)类。对象Commodity˽cElectricFan;cElectricFan=new˽Commodity();

①房子图纸:类②登记备案,申请红线图:定义对象变量③建造房子:实例化对象,分配对象存储空间④房子:对象定义对象变量。用已经定义的类Commodity(相当于要建造的房子的图纸)定义一个对象变量cElectricFan。对象变量cElectricFan在栈(Stack)中分配一个存储空间,其内容为null。对象实例化。执行newCommodity(),实质是在内存中的堆(Heap)空间分配一个可以存储由Commodity类模板定义的空间,把该空间的起始地址赋值给对象变量。第3章类和对象1.3变量的作用域按照作用域的不同,变量可分为三种类型什么是变量的作用域变量的作用域指变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就被确定了。成员变量在定义类时定义的变量,它的作用域是整个类,也叫做实例变量。例如Student类有一个成员变量name,在selfIntro()方法中也能访问这个name变量:publicclassStudent{Stringname; //定义name成员变量publicvoidselfIntro(){System.out.println("大家好,我是"+name); //使用name变量}}成员变量成员变量在对象实例化时,变量直接存储在堆区的对象实例中,同一个成员变量在不同对象中各自保存一个自己的副本,副本之间没有关系,可以理解成“对象局部变量”。在实例化过程中,如果成员变量没有赋初值,系统会给定初值:int类型初值为0float和double类型初值为0.0boolean类型为falsechar类型是空,编码值为0引用类型(复合类型)是null;在定义成员变量的类型前面加上“static”的,称为类变量,也叫静态变量。局部变量在一个方法的内部声明,它的作用域是当前方法。例如在selfIntro()方法中定义了局部变量name,只能在selfIntro()方法中访问变量name,而在main()方法中无法访问变量name:publicclassStudent{publicvoidselfIntro(){Stringname=“跨平台程序设计”; //定义name局部变量}publicstaticvoidmain(){System.out.println("大家好,我是"+name); //无法使用name变量,这里是错误的

}}局部变量局部变量前不能加权限修饰符;局部变量一定要赋初值方可使用;在没有赋值之前,不能访问局部变量;方法声明中的局部变量的作用域为定义该局部变量所在的方法体;其生命周期同方法体。局部变量局部变量的作用域与局部变量定义的位置有关,主要需要关注的是定义局部变量所在的语句块。publicclassStudent{publicstaticvoidmain(String[]args){{inti=0; System.out.println(i);//可以访问}System.out.println(i);//超出i的可见范围,不可访问}}方法参数方法参数的作用域是当前方法。例如以下参数name的作用域是当前的构造方法(方法的定义结构和什么是构造方法将在后面介绍):publicclassStudent{//定义name参数变量publicStudent(Stringname){name=“跨平台程序设计”; }publicstaticvoidmain(){System.out.println("大家好,我是"+name); //无法使用name变量,这里是错误的

}}总结Java中的作用域是指变量的可见范围,包括类作用域、方法作用域、代码块作用域、循环作用域和局部作用域。类作用域的变量可以在类的任何方法中使用,方法作用域的变量只能在该方法中使用,代码块作用域和循环作用域的变量只能在该代码块或循环中使用,局部作用域的变量只能在该局部作用域中使用。变量的作用域规则是从内向外,即变量的作用域范围从小到大。当一个变量的作用域结束后,它所占用的内存空间也会被释放。第3章类和对象2.1方法的定义和使用什么是方法Java方法是语句的集合,这个集合一起执行能完成某个功能。方法就是解决一类问题的组合体,比如:加法运算,减法运算,很多地方都要用到,把它抽出来作为一个方法,所有地方都可以调用。方法包含于类或对象中。方法在程序中被创建,在其他地方被引用。方法的本意是功能模块,是把一个公用功能抽出来作为一个方法,设计方法的时候,要保证方法的原子性,一个方法只完成一个功能,这样方便后期扩展。方法方法的定义一般情况下,定义一个方法包含以下语法:方法包含一个方法头和一个方法体。下面是一个方法的所有部分:访问修饰符:默认(default),告诉编译器如何调用该方法。定义了该方法的作用域范围。其他修饰符:可选。在定义方法时修饰符包括:静态域修饰符static、最终域修饰符final、易失(共享)域修饰符volatile、暂时性域修饰符transient等。<访问修饰符>[其他修饰符]<返回值类型><方法名>(参数类型参数名){...方法体...return返回值;}方法的定义返回值类型:方法可能会返回值。声明方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,返回值数据类型是关键字void。方法名:是方法的实际名称。方法名和参数表共同构成方法签名。小驼峰命名法:方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写。例如:addStudent。下划线命名法:方法的所有单词用小写,单词之间用

_

连接。例如:add_student一般情况下,定义一个方法包含以下语法:<访问修饰符>[其他修饰符]<返回值类型><方法名>(参数类型参数名){...方法体...return返回值;}方法的定义参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。参数之间用,间隔方法体:方法体包含具体的语句,定义该方法的功能。一般情况下,定义一个方法包含以下语法:<访问修饰符>[其他修饰符]<返回值类型><方法名>(参数类型参数名){...方法体...return返回值;}方法的定义一般情况下,定义一个方法包含以下语法:<访问修饰符>[其他修饰符]<返回值类型><方法名>(参数类型参数名){...方法体...return返回值;}方法的参数在程序设计语言中,参数有

形式参数

实际参数

之分,先来看下它们的定义:形式参数:是在定义方法名和方法体的时候使用的参数,目的是用来接收调用该方法时传入的参数,简称“形参”。实际参数:在调用一个方法时,方法名后面括号中的参数值称为“实际参数”,简称“实参”,可以是常量、变量、方法等确定得值。要求实参和形参遵守——对应原则。方法的参数在例子中定义了一个getMax方法,该方法有两个int类型的参数

a

b

,该参数即为形参。在main方法中,调用了getMax方法,传入了参数“a”和“10”,该参数即为实参。publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);inta=input.nextInt();intb=add(a,10);intc=add(a,add(a,10));System.out.println(b);}staticintgetMax(inta,intb){returna+b;}方法的参数回答:这是由方法的参数传递机制来控制的,参数传递机制有两种:提问:实参值是如何传入方法的呢?值传递引用传递方法的参数值传递:指在调用方法时将实际参数复制一份传递到方法中,这样在方法中如果对参数进行修改,将不会影响到实际参数。调用change:执行结束:publicstaticvoidmain(String[]args){inta=10,b=20;change(a,b);System.out.println(a+"-------"+b);}publicstaticvoidchange(inta,intb){inttemp=a;a=b;b=temp;}方法的参数引用传递:指在调用方法时将实际参数的地址传递到方法中,那么在方法中对参数所进行的修改,将影响到实际参数。classemployee{publicintid;}publicstaticvoidmain(String[]args){employeetom=newemployee();tom.id=10;employeejarry=newemployee();jarry.id=20;swap(tom,jarry);System.out.println(tom.id+"-------"+jarry.id);}//编写方法,实现值呼唤功能publicstaticvoidswap(employeea,employeeb){inttemp;temp=a.id;a.id=b.id;b.id=temp;}方法的参数调用change:执行结束:方法的return返回值java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。返回值类型是void。格式:返回方法指定类型的值,返回值类型不是void。格式:return返回值;return;方法练习题目:编写一个判断质数的方法,并实现输入一个

>2

的整数n,判断n是否是质数,及求出0到n之间的所有质数(包含n)。方法练习先定义判断一个整数是否是质素的方法://判断一个数是否是质数staticbooleanisPrimeNumber(intnum){//假设num是质数(true)booleanbo=true;//通过for循环进行验证for(inti=2;i<num;i++){//判断num能否被当前i整除if(num%i==0){//能被整除,表示num不是质数(false)bo=false;}}//最后验证假设值得结果(true表示质数|false表示不是质数)returnbo;//这里我们直接将结果返回给方法,由外部调用者去判断}方法练习然后在主函数中调用该方法,实现题目要求://main主函数内的代码Scannerinput=newScanner(System.in);System.out.println("请输入一个>=2得整数"); //提示输入intnum=input.nextInt();//输入一个数//调用方法得到num是否是质数结果(boolean),然后判断这个数是否是质数booleanisNum=isPrimeNumber(num);if(isNum){System.out.println(num+"是质数"); //为true,表示质数}else{System.out.println(num+"不是质数"); //为false,表示不质数}//遍历2~num之间所有得质数for(inti=2;i<num;i++){//调用方法得到i是否是质数结果(boolean),然后判断这个数是否是质数booleanisI=isPrimeNumber(i);if(isI){System.out.print(i+"、"); //为true,表示质数,则输出当前i}}方法执行流程第3章类和对象2.2方法的重载和递归什么是方法的重载方法的重载方法重载是指在同一个类(class)中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。调用时根据实参的形式,选择与他匹配的方法执行操作的一种技术。实现方法的重载参数不同是指以下几种情况:相同位置上参数的数据类型不一样参数的个数不一样相同位置上参数的数据类型不一样,同时参数的个数不一样注意:参数个数和类型都一样,但返回值类型不一样,不能算重载。方法的重载例子举个例子:publicstaticvoidmain(String[]args){System.out.println(add(1,2)); //计算1+2System.out.println(add(1,2,3)); //计算1+2+3}publicstaticintadd(inta,intb){returna+b;}publicstaticintadd(inta,intb,intc){returna+b+c;}方法的重载练习题staticvoidsayHello(stringname){System.out.println("我是"+name);}staticvoidsayHello(stringname){System.out.println("Iam"+name);}判断代码是否属于重载:方法的重载练习题staticvoidsayHello(stringname){System.out.println("我是"+name);}staticvoidsayHello(intage){System.out.println("我的年龄"+age);}判断代码是否属于重载:方法的重载练习题staticvoidsayHello(stringname){System.out.println("我是"+name);}staticintsayHello(stringname){return10;}判断代码是否属于重载:方法的重载练习题判断代码是否属于重载:staticvoidsayHello(stringname1,stringnickname1){System.out.println("我是"+name1);}voidsayHello(stringname2,stringnickname2){System.out.println("我是"+name2+",昵称是"+nickname2);}什么是方法的递归方法的递归一个方法既可以调用其他方法又可以调用自己,而当这个方法调用自己时,就叫它递归。递归方法一直会调用自己直到某些条件满足,因此递归方法要有一个明确的递归结束条件,也就是递归出口。递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等问题。实现方法的递归递归分为两种:1方法自身调用自己。直接递归2A方法调用B方法,B方法调用C方法,C方法再调用A方法。间接递归方法的递归练习阶乘计算:输入一个正整数n,输出n!的值。其中n!=1*2*3*…*n。假设n=10。方法的递归练习不用递归实现:publicstaticvoidmain(String[]args){//累积变量intsum=1;for(inti=1;i<=10;i++){sum=sum*i;}System.out.println(sum);}方法的递归练习使用递归实现:执行流程:publicstaticvoidmain(String[]args){intsum=factorial(10);System.out.println(sum);}//求num!的值staticintfactorial(intnum){if(num==0){return1;}//返回当前num的阶乘结果:num!=num*(num-1)!returnnum*factorial(num-1);}方法的递归递归一定要有条件限定,保证递归能够停止下来,否则会形成死循环并发生栈内存溢出(StackOverflowError)。退出方法的条件是不调用自己。递归中虽然限定了停止下来的条件,但是递归次数不能太多,否则也会发生栈内存溢出。禁止构造方法递归。注意事项第3章类和对象2.3构造方法什么是构造方法构造方法:Java中构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,在类实例化时调用,初始化对象的数据成员。不带参数的构造函数称为“默认构造函数”。无论什么时候,只要使用new运算符实例化对象,并且不为new提供任何参数,就会调用默认构造函数。除非类是静态的,否则Java虚拟机将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。实现构造方法构造方法语法结构:注意事项:方法名必须与类名相同;可以有0个、1个或多个参数;没有任何返回值,包括void;只能与new运算符结合使用,并且在对象的生命周期内只调用一次;如果用户没有显式定义构造方法,编译器就会默认生成一份无参构造方法,而一旦用户定义了一个构造方法,编译器就不会自动生成构造方法;[访问修饰符]类名(参数列表){函数主体;}构造方法练习设计一个名为Person的类表示人类,这个类包括:一个名为name的String型的public成员变量;一个名为age的int型的public成员变量;一个名为info()的public方法实现在控制台打印信息(格式为:我叫{name},我的年龄是{age}),返回值为void型。创建人类的无参构造函数。创建name和age为指定值的有参构造函数。编写一个测试程序,创建两个Person对象:一个人类的name=小A,age=30,另一个人类的name=小红,age=18。分别调用这两个对象的info方法执行打印信息功能。构造方法练习编写Person类:publicclassPerson{ //无参的构造函数 publicPerson(){

} //有参的构造函数 publicPerson(Stringname,intage){ =name; this.age=age; } publicStringname; //姓名 publicintage; //年龄 //个人介绍方法 publicvoidinfo(){ Stringmsg="我叫"+name+",我的年龄是"+age; System.out.println(msg); }}构造方法练习编写mian主程序:publicstaticvoidmain(String[]args){//声明并示例对象Personp1=newPerson("小A",30);Personp2=newPerson("小红",18);//调用方法();();}第3章类和对象3.1包(package)包(package)一、包的创建package语句只能放在源程序的第一行,而且一个源程序文件只能有一个package语句;无论该源程序定义了多少个类,只要有一个package语句,就说明这个程序中的所有类均在这个包中;如果源程序前面没有package语句为无名包、或者叫做缺省包;包可以有多级,每一级中间用“.”隔开,对应与在当前目录下的文件目录结构;编译后的字节码文件,必须存放在对应的目录中,方可以运行;注意:在Java中,为了解决类命名冲突,引入了包的概念。所谓“包”就是Java的名字空间。Java采用与操作系统一致的目录结构,实现包的声明。Java包声明格式,在源程序的第1行加上语句:packagepackagename.subpackagename.subpackagename;packagermation;publicclassStudent{publicstaticvoidmain(Stringargs[]){ClassStudentstu=newClassStudent("ZhangYang",'M',24);stu.Study("OperatingSystem",90);}}classClassStudent{Stringname;charsex;intage;publicvoidStudy(Stringcourse,intscore){//登记学习成绩System.out.println(name+”\t“+course+”\t”+score);}}包(package)定义一个包,保存在rmation目录中。示例Java包应用示例包的创建其中:路径名用于指定编译后的包存放的位置。如果把包保存在当前目录下,对于上述源程序,编译如下:Javac–d.Student.Java此时,Java编译程序Javac.exe会自动创建对应的目录结构、且把字节码文件保存在包目录中。如上例中,Java会在当前目录“.”下自动创建一个叫做“demo”的目录,同时在demo目录下创建一个叫做“information”的目录,并且把编译好的两个字节码文件Student.class和ClassStudent.class保存在information目录中。Javac–d路径名源程序文件名.Java5.编译带有包语句的源代码程序时,用如下格式:包的创建注意必须在当前目录下运行,不能进入目录./demo/information目录下运行。Java包结构全名.程序名6.运行带包结构的程序时,采用如下格式:如上述程序的运行格式如下:Javarmation.Student或者Javademo/information/Student包的导入(import)自动导入包java.lang.*程序设计经常用到的String、System等类,这些类属于java.lang.*底下的类,这些类如果程序设计者没有导入,则Javac.exe在编译时,会自动导入;程序导入的包除java.lang.*包外,其他类包如果程序没有导入,编译时将导致错误,也就是说,程序必须导入类包。导入类包的格式:import包的路径.包名;注意包导入是一个语句,因此要用“;”结束。importjava.awt.event.*;importjava.awt.*;publicclassImportPackage{publicstaticvoidmain(Stringargs[]){FrameMyWin=newFrame();MyWin.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});MyWin.setTitle("Mywindow");MyWin.setResizable(true);MyWin.setBounds(120,150,400,200);MyWin.setVisible(true);}}包的导入(import)导入java.awt.*包。这个导入包语句的含义是:导入在这个目录下的所有字节码文件,不包含其中的目录。示例创建一个窗口它需要用到:java.awt.*和java.wat.event.*这里面的包,如果没有导入这些包,编译将出现错误。导入java.awt.event.*包。这个导入包语句的含义是:导入在这个目录下的所有字节码文件,不包含其中的目录。使用自建类包在团队开发中,需要从基础类开始开发,逐层构建,形成最终的软件系统。项目规划、设计人员也可以用包的形式,把抽象类、接口类发送给开发组中的成员:开始开发的基础类,经过测试,形成自己项目的包,便可以提供给项目的其他开发人员使用。一部分成员根据抽象类、接口实现类要求,进行相应开发;其他人员则可以直接使用接口、抽象类进行业务层、或者逻辑层的编写。在下面列中,生成:有一个包目录为rmation包含有ClassStudent.class字节码;另一个是ClassCourse.class字节码文件,保存在demo包目录中;创建包程序(1):在包目录demo下创建一个ClassCourse.class的字节码文件packagedemo;publicclassClassCourse{ Stringcourse; floatcredit; inthour; publicClassCourse(Stringcourse,floatcredit,inthour){ this.course=course; this.credit=credit; this.hour=hour; } publicvoidModifyCredit(floatcredit){ this.credit=credit; } publicvoidModifyHour(inthour){ this.hour=hour; } publicvoidCourseInf(){ System.out.println("Course:\n"+"\tName:"+course+ "\n\tCredit:"+credit+"\n\tHours:"+hour); }}创建包程序(2):packagedemo.information;publicclassClassStudent{ Stringname; charsex; intage; publicClassStudent(Stringname,charsex,intage){ =name; this.sex=sex; this.age=age; } publicvoidStudy(Stringcourse,intscore){ System.out.println(name+"\t"+course+"\t"+score); } publicvoidStudentInf(){ System.out.println("Student:"+"\n\tName:"+name+ "\n\tSex:"+sex+"\n\tAge:"+age); }}在包目录rmation下创建一个ClassStudent.class的字节码文件importdemo.ClassCourse;importrmation.ClassStudent;publicclassManagement{publicstaticvoidmain(Stringargs[]){ClassStudentstu=newClassStudent("ZhangYang",'F',21);ClassCoursecur=newClassCourse("OperatingSystem",3.5f,64);cur.CourseInf();stu.StudentInf();}}导入自建包:导入在chengyi目录包的ClassCourse.class节码文件,在这里直接指定一个字节码文件。导入在rmation目录包的ClassStudent.class节码文件,同样也是直接指定一个字节码文件。值得注意的是:放在包中供其他程序导入的类,其引用权限必须是“public”,否则将无法导入。发布如果需要发布,可以通过jar命令把它们打成school.jar包,放在当前目录中,命令如下:cvf—命令参数,要求jar命令创建一个jar包,且显示创建过程;school.jar—要生成的jar包;demo—需要打包的位置。jarcvfschool.jardemo其中:总结包:package,主要用于解决类名冲突引入的,用目录结构实现;包的创建:包的导入:在程序的第一个语句:package包名1.包名2.包名3;在编译时,javac–d路径源程序编译程序会根据package语句设置额报名结构,在指定的路径上创建相应的目录结构,并把编译好的字节码文件(.class)保存到package语句指定的最后一级的目录中。创建包后:运行程序必须带包名。在java程序中,引用某个类,必须在程序的前面导入对应的包;

自动导入包:java.lang.*包是编译程序自动导入的,不需要程序中加入导入语句;

自建包必须导入,才能引用包中的类。第3章类和对象3.2常用访问修饰符访问权限一、类中成员变量与方法的访问权限所谓“访问权限”,是指对象访问自己类中的成员变量、方法的权限。一个对象,经过定义、用构造方法实例化后,可以通过这个对象操作类中的变量和方法。在类中哪些变量、哪些方法允许对象通过“.”运算符进行访问,是由定义类时给定的访问权限修饰符类体现的。Java的访问权限修饰符包括:public、private和protected。private—私有的。用private修饰的变量和方法,只允许类中的方法访问;在其他类中创建的对象,无权访问私有变量和方法;public—公共的。用public修饰的变量和方法,不仅允许类中的方法访问,也允许在其他类中创建的对象、通过“.”操作符进行访问;protected—受保护的。用protected修饰的变量和方法,允许在同一个包中的其他类中的方法通过该类的类名访问这些变量和方法。访问权限所谓“访问权限”,是指对象访问自己类中的成员变量、方法的权限。一个对象,经过定义、用构造方法实例化后,可以通过这个对象操作类中的变量和方法。在类中哪些变量、哪些方法允许对象通过“.”运算符进行访问,是由定义类时给定的访问权限修饰符类体现的。Java的访问权限修饰符包括:public、private和protected。一、成员变量与方法的访问权限友好的—没有用private、public或者protected修饰的变量和方法,被称为友好变量和友好方法。友好变量和友好方法允许在同一个包中,不同类中用该类创建的对象,通过“.”运算符访问。如上一节中,我们把ClassStudent类放在“rmation”包中,把ClassCourse类放在“chengyi”包中,而应用这两个类的Management类放在当前目录中,它们三者都不在一个包中,因此,ClassStudent和ClassCourse类中,Management要访问的方法和变量都必须是public权限。访问权限权限控制修饰符本类同一包中的类继承类不同包中的类private√×××缺省(友好的)√√××protected√√√×public√√√√成员访问权限是控制本类、同一个包的类、继承类和其他类的访问成员变量和成员方法的权限。父类的protected成员是包内可见的,并且对子类可见;若子类与父类不在同一包中,在子类中,子类实例可以访问其从父类继承而来的protected方法,而不能访问父类实例的protected方法。protected权限:访问权限类权限修饰包内可以访问包外可以访问default(空)√×public√√缺省自建包:在同一文件夹中的类,被视作是同一自建包中的类,这个包叫做缺省自建包;Java缺省包:java.lang包。二、类的访问权限外部类的权限修饰为:public和default(空);类用default(空)修饰时,该类仅在包内可见、可以访问,在包外不可访问;类用public修饰时,则同一包内可以访问、包外同样访问。三、类的权限修饰符与成员的权限修饰符的关联首先根据成员所在类的修饰符,可以确定该类的对象是包内可访问、还是包外可访问。再根据成员的权限修饰符,可以确定成员在哪些类中可以访问。packageEduAdmin;importjava.util.ArrayspublicclassTeachingPlan{publicStringcourseName;protectedintHours;floatcredit;privateintsemester;publicstaticvoidmain(Stringargs[]){TeachingPlaned=newTeachingPlan("JavaProgramming",75,3.5f);ed.semester=5;//在第5学期开课ed.adjustHours(16);ed.infOfTeachingPlan();Teachingteaching=newTeaching("LiFeiPeng","JavaProgramming");teaching.dayOfWeek=newint[]{3,5};//教学安排

teaching.InfoTeaching();}访问权限例:编写一个包“EduAdmin”,包含两个类,一个为教学计划管理、另一个为教学管理。课程名称courseName为public权限,所有类都可以访问;课时数Hours为protected权限只能在同一包的类对象访问;学分数credit为友好成员变量,只能在同一包有访问权限;而开课学期semester为private权限只能是本类对象访问。publicTeachingPlan(Stringcourse,intHours,floatcredit){this.courseName=course;this.Hours=Hours;this.credit=credit;}protectedvoidmakePlan(intsemester){this.semester=semester;}privatevoidadjustHours(inthoursPerCredit){this.Hours=(int)this.credit*hoursPerCredit; }publicvoidinfOfTeachingPlan(){System.out.println("Course:"+courseName+"\nHours:"+Hours+"\nCredit:"+credit+"\nSemester:"+semester);}}访问权限练习—编写一个包“EduAdmin”定义一个访问权限为protected的方法makPlan。由于是在类中的方法,可以访问类中的所有成员变量:包括private访问权限的成员变量semester。定义一个访问权限为private的方法adjustHours。由于是在类中的方法,可以访问类中的所有成员变量。定义一个访问权限为public的方法infOfTeachingPlan。由于是在类中的方法,可以访问类中的所有成员变量。定义本类的构造方法。由于是在类中的方法,可以访问类中的所有成员变量:包括public权限的courseName、protected权限的Hours、或者是友好成员变量credit。classTeaching{publicStringteacher;publicStringcourse;protectedintdayOfWeek[];publicTeaching(Stringteacher,Stringcourse){this.teacher=teacher;this.course=course;}publicstaticvoidmain(Stringargs[]){TeachingPlantp=newTeachingPlan("OperatingSystem",54,2.5f); tp.makePlan(5); //tp.adjustHours(16); //不能访问 //tp.semester=5; //不能访问

tp.credit=3.0f; //合法的 tp.Hours=60; tp.infOfTeachingPlan();}访问权限练习—编写一个包“EduAdmin”上课教师teacher和承担课程course为public访问权限,所有类的对象都可以访问;每周那一天上课dayOfWeek为protected访问权限,只能同一包中的类对象、也就是TeachingPlan类的对象可以访问。访问权限练习—编写一个包“EduAdmin”上述访问权限设置后:在Teaching类中的main()方法中,可以访问TeahingPlan类对象的makePlan()和infOfTeahingPlan()方法、以及Hours成员变量,但不能访问adjustHours()方法。在TeachingPlan类对象中,可以访问Teaching类对象的infOfTeahing()方法和dayOfWeek成员变量。publicvoidInfoTeaching(){System.out.println("Teacher:"+teacher+"\nCourse:"+course+"\nDayofweek:"+Arrays.toString(dayOfWeek));}}importEduAdmin.TeachingPlan;publicclasseduAdminstration{Stringmanager;intposLevel;publiceduAdminstration(Stringname,intlevel){this.manager=name;this.posLevel=level;}publicvoidinfOfManager(){System.out.println("Manager:"+manager+"\nPositionlevel:"+posLevel);}publicstaticvoidmain(Stringargs[]){eduAdminstrationeduAdm=neweduAdminstration("ZhangQing",11);TeachingPlantp=newTeachingPlan("DataStructure",80,4.5f);Tp.courseName=”UserInterfaceDesign”;

温馨提示

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

评论

0/150

提交评论