资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,面向对象编程,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第三章 面向对象编程,学习目标,掌握:掌握创建和使用类对象、使用包的基本方法。,理解:理解面向对象程序设计的基本思想和面向对象的概念。,了解:类的多态,接口的声明及实现方法。,重点,明确各种修饰符的作用,理解继承和复用的概念,理解父类和子类,学会,Java,类的定义和对象的创建。,难点,理解多态性是如何扩充和维护系统性能,类多态的实现。,本讲要点,面向过程和面向对象,面向过程程序设计示意图,面向对象程序设计示意图,1-4,3.1,面向对象的思想,面向对象的基本概念,对象是具有某种特性和某种功能的东西。,将同一种类型的对象归为一个类。,类是对象的抽象,对象是类的实例。,类的特征和行为分别命名为属性和方法,类,是,对象,的模板,而,对象,是,类,的,实例;,共性与个性的关系,是抽象与具体的关系,。,例如:电视机,类,属性:尺寸,颜色,型号,方法:打开,关闭,选择节目,3.1,面向对象的思想,一个类中定义的方法可被该类的对象调用,对象方法的每一调用被称作发送一个消息,message,给对象 。,对象间是相互独立,通过发送消息相互影响。一个消息由三部分组成:,(1),消息目标对象;,(2),执行方法的名字;,(3),执行方法所需要的参数(,parameters,)。,封装性,封装性就是把对象的属性和方法结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。对外形成一个边界,或者说形成一道屏障,,只保留有限的对外接口使之与外部发生联系。,继承性,特殊类的对象拥有其一般类的全部属性与方法,称作特殊类对一般类的继承,.,一般类为父类(,superclass,超类),特殊类为子类,(subclass),。,多态性,对象的多态性是指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。,面向对象的特点,面向对象三大机制:,封装:隐藏内部实现,继承:复用现有代码,多态:改写对象行为,3.2,类,类由数据成员和方法组成。类封装了一类对象的状态和方法 。,汽车(类),品牌,型号,颜色,-,加速与减速设计,转向设计,刹车设计,类的声明,类的修饰符用于说明类的特征和访问权限,包括,public,,,abstract,,,final,,,friendly,。,public,:表示此类为“公共”类,; abstract,:表示此类为“抽象”类,; final,:表示此类为“最终”类,.,类名是,Java,标识符。通常,类名的第一个字母为大写。,类的修饰符,class,类名,extends,父类名, implements ,,接口名,成员变量;,成员方法;,(,简称方法,),类声明,类体,系统定义类,(,系统提供的类,),:已经定义好的类,可直接使用。,用户定义类,(,用户自己定义的类,),:创建一个新类,即创建一个新的数据类型。,Java,类,一个,Java,程序可以定义很多个类,但只能有一个,public,类,程序的主类必须是,public,类。每个程序都从主类开始执行。,class,,,extends,,,implements,都是,Java,关键字。,class,表明定义类。,extends,表明目前定义的类是父类继承而来的子类,该父类必须存在。,implements,表明类要实现某个接口。各接口名之间用逗号“,”分隔。,类体包含:,实现类功能的,Java,语言程序代码、成员变量、成员方法。,类的成员变量定义,:,修饰符,数据类型 成员变量,=,初值,;,成员变量的修饰符,访问控制修饰符,public,、,protected,、,private,;,存在修饰符,static,、,abstract,和,final,。,类的声明,其中:,final,:表示该变量不能再被修改,称为常量。,例如:,final int a=3;,static,:表示该变量时静态变量,也称为类变量。属于这个类的所有对象的变量。而实例变量只属于某个对象。通过“类,.,变量名”和“对象,.,变量名”引用。,默认修饰符,如果某个成员变量没有设置访问权限,允许类自身以及在同一个包中的所有类的变量访问。,class Example,int i;,static int j;,public static void main(String args),Example a=new Example();,a.j=3;,Example.j=2;,a.i=4;,Example.i=5;,类的成员方法,定义的一般形式为:,方法修饰符, ,(,),方法体,成员方法修饰符,主要有,public,、,private,、,protected,、,final,、,static,、,abstract,和,synchronized,七种 。,成员方法的返回值类型,方法返回值用,return,语句来实现,返回的数据类型必须与,方法说明中的方法返回值类型,一致 ;,如果,不需要,返回值,则其返回值类型被说明为,void,;,类的声明,final:,为最终方法,不能在其所在类的子类中被重载,只能被继承,不能被重写。,static:,不需要初始化该方法所在的类。也不能被它的子类所重载。,在一个,static,方法中,只能访问被定义为,static,的类变量和类方法。,abstract:,抽象方法,只有方法说明,没有方法体。在它所在的类的子类中具体实现。抽象方法所在的类称为抽象类。,synchronized:,同步方法,在多线程中使用。,方法名,成员方法名是,Java,语言合法的标识符。,参数列表,成员方法的参数列表是由逗号分隔的类型及参数名组成,是可选项。,方法体,方法体是一个方法定义的主要部分,包含了所有实现方法功能的,Java,语言程序代码,方法体用“, ”,括起来 。,例,3-2,:源程序名为,TestCir.java,;定义一个方法,其功能是根据参数,r,的大小,返回圆的面积。,运行结果:,类的声明,public class TestCir,public static void main(String args) /main,方法,double k;,TestCir mj=new TestCir();,k=mj.area(5,);,System.out.println(k);,public double area(int r) /,定义,area,方法,带有一个参数,r,final double PI=3.14; /,定义常量,PI,为,3.14,return PI*r*r; /,由,r,的值,计算面积,返回面积值,类的声明,项目任务:,定义一个正方形,它的数据成员包括长和宽,成员函数包括设置长和宽的值,求长方形的面积。在主方法中定义正方形对象,求长是,5,,宽是,3,的面积。然后再求长是,8,,宽是,4,的面积。,定义一个职员类,Emplyee,(姓名,年龄,性别,薪水),一个显示信息的方法,并输出职员信息。,构造方法,构造方法是一种特殊的方法,其名称与类名相同。,Java,语言中每个类都有构造方法 。,构造方法的特点,构造方法没有返回值类型,没有,void,。其修饰符只能是访问控制修饰符,即,public,、,private,、,protected,中的任一个。,构造方法不能从父类中继承。,构造方法可以重载,一个类可以有任意多个构造方法。不同的构造方法根据参数的不同状态来选择合适的构造方法。,构造方法不能直接通过方法名引用,必须通过,new,运算符。,在构造方法中调用当前类和其父类的构造方法,但必须在方法体的第一条语句。,在前一个任务的基础上,构造,3,个构造函数。,this,对象本身,表示对象本身,在不同方法中表示调用这个方法的对象,在构造方法中表示新创建的对象,作用,使用,this,访问域及方法,使用,this,解决局部变量与成员变量同名,在构造方法中,用,this,调用另一个构造方法,必须放在第一句,不能通过,this,引用类变量、类方法,class Person,String,name,;,public void ex1(String,name,),/name=name;,this.name,=,name,;,public void ex2(),ex1(,“,XMJ,”,);/?,this.ex1(,“,XMJ,”,);/?,/,局部变量与成员变量同名,public class A,public A(int i),public A(int i,int j),this(5);/,第一句,/,调用另一个构造方法,super,直接父类,使用,super,访问父类被子类隐藏的同名的成员,使用父类的构造方法,super(),必须放在第一句,class A,int i;,void value(),i=10;,System.out.println(i);,class B extends A,int i;,void value(),i=20;,super.value();,System.out.println(i);,System.out.println(super.i);,this,与,super,的区别,this,使用当前类的构造方法,,super,使用其父类的构造方法。,this,用以指代一个对象自身,它的作用主要是将自己当成对象作为参数,传送给别的对象中的方法;,super,为了访问父类的成员变量或方法,采用,super,加上点和成员变量或方法的形式。,构造方法,例,3-3,:源程序名为,Inheritance.java,,是构造方法的例子。,/*,定义一个父类,superclassname*/,class superclassname,int x;,superclassname() /,父类无参数构造方法,x=3;,System.out.println(,在父类中,x=+x);,void dosomething() /,父类中成员方法,System.out.println(,在父类中,dosomething();,/*,定义一个子类,subclass,,从,superclassname,继承而来*,/,class subclass extends superclassname,int x;,subclass(),super(); /,调用父类无参数构造方法,x=5;,System.out.println(,在子类中,x=+x);,void dosomething() /,子类中成员方法,super.dosomething(); /,调用父类中成员方法,dosomething(),System.out.println(,在子类中,dosomething();,System.out.println(super.x=+super.x+ sub.x=+this.x);,/*,利用,super,引用父类对象,利用,this,引用当前对象*,/,/*,定义主程序类,inheritance*/,class Inheritance,public static void main(String args),subclass subc=new subclass();,/,调用子类构造方法创建一个对象,subc,subc.dosomething(); /,调用子类的成员方法,dosomething(),运行结果:,3.3,对象,对象的定义,=,new,(参数,1,,参数,2,,,);,或者:, ,;, =,new,(参数,1,,参数,2,,,);,创建对象实际执行了三个操作:,说明对象,、,实例化对象,和,初始化对象,。,说明对象,:就是给对象命名,也称定义一个实例变量。,一般形式为:, ,;,实例化对象,:给对象分配存储空间,用来保存对象的数据和代码。,new,运算符用来实现对象的实例化。, = new ,(参数,1,参数,2,);,对象的使用,初始化对象,通过调用该对象所在类的构造方法来实现的。,引用对象的方法一般形式:,(,),;,例,3-4,:程序,TwoArea.java,,是引用对象的例子。,执行结果:,/*,定义一个类,Point*/,class Point,public int x; /,定义成员变量,public int y; /,定义成员变量,public Point() /Point,构造方法,不带参数,this.x=0; /,引用当前,x,this.y=0; /,引用当前,y,public Point(int x,int y) /Point,构造方法,带两个参数,this.x=x; /,引用当前,x,this.y=y; /,引用当前,y,/*,定义一个类,Graph*/,class Graph,public int width=0; /,定义成员变量,public int height=0; /,定义成员变量,public Point origin; /,定义成员变量,public Graph() /Graph,构造方法,1,,不带参数,origin=new Point(0,0);,public Graph(Point p) /,Graph,构造方法,2,,带一个参数,origin=p;,public Graph(Point p,int w,int h),/Graph,构造方法,3,,带三个参数,origin=p;,width=w;,height=h;,public void move1(int x,int y) /,成员方法,move1,origin.x=x;,origin.y=y;,public void move2(int a,int b) /,成员方法,move2,origin.x+=a;,origin.y+=b;,public int area() /,成员方法,area,return width * height;,public class TwoArea /*,定义主程序类*,/,public static void main(String args),int x=3,y=4;,int w=4,h=5;,Point p1=new Point(x,y); /,将原点,p1,定在,(3,,,4),坐标点,Point p2=new Point(6,8); /,将原点,p2,定在,(6,,,8),坐标点,Graph r1=new Graph(p1,w,h);,Graph r2=new Graph(p2,8,10);,r1.move1(4,6); /,把矩形,r1,的原点移到(,4,,,6,),r2.move2(-2,4); /,把矩形,r2,的原点,x,坐标减,2,,,y,坐标加,4,System.out.println(,两个矩形面积差,=+(r2.area() - r1.area();,/*,调用成员方法计算矩形,r2,与,r1,面积差*,/,System.out.print(r1,的原点为,(+r1.origin.x+,);,System.out.println(r1.origin.y+);,System.out.print(r2,的原点为,(+r2.origin.x+,);,System.out.println(r2.origin.y+);,3.4,继承与多态,继承性,子类可以沿用父类的某些特征。子类也可以具有自己独立的属性和操作。,继承分单继承和多继承。,什么是继承,在日常生活中,经常遇到如下问题。有一辆自行车,自行车有颜色和型号大小之分,而公路赛车也有颜色和型号大小之分,公路赛车多了一项速度的优势。自行车有的东西公路赛车全都有,而公路赛车有的东西自行车不一定有,它们相同地方有很多。在,Java,中,对于这种情况下就采用继承来完成这个功能。,/,这是一个类,表述的是一个自行车,public class bike,public String color; /,自行车的颜色,public int size; /,自行车的大小,即型号,/,这是一个类,表述的是一个公路赛类,pubic class racing_cycle,public String color; /,自行车的颜色,public int size; /,自行车的大小,即型号,public String speed; /,公路赛车的速度,/,这是一个类,表述的是一个自行车,public class bike,public String color;/,自行车的颜色,public int size; /,自行车的大小,即型号,/,这是一个类,表述的是一个公路赛车,它继承于自行车,pubic class racing_cycle extends bike,public String speed; /,公路赛车的速度,在,Java,中,被继承的类叫超类(,superclass,),继承超类的类叫子类(,subclass,)。因此,子类是超类的一个功能上的扩展,它继承了超类定义的所有属性和方法,并且添加了特有功能方法。,Java,是单继承的,子类可以有很多,父类只能有一个。上面的例子,如果加一个,Friend,类,,Son,只能继承自,Father,,要么继承,Friend,,不能同时继承,Father,和,Friend,。,Java,的继承是多层继承的,是一个类可以有很多子类,而子类下面又可以有很多子类。,父类没有定义一个无参的构造器,那么编译器就默认生成一个无参的构造器,也可以在子类构造器里显示使用,super,方法调用父类构造器,,super,方法里写几个参数就可以表示调用的是父类的哪一个构造器。,当父类中没有构造方法或只有不带参数的构造方法时,系统会在子类构造器自动加上super语句,可以不显式地添加对父类构造器方法的调用,但如果父类中有带参数的构造器方法,那么,必须显式在构造器中使用super调用父类的带参数的构造器方法,否则编译出错。,继承性,继承的目的:实现代码重用。,子类不能继承父类中访问权限为,private,的成员变量和方法。,子类可以继承父类方法和成员变量,但它不能继承构造方法。,创建子类格式:,Public class SubClass extends SuperClass,访问权限,class,类名,extends,父类,例,3-5,:源程序名,Car Demo .java,,是类的继承。,class Car,int car_number;,void set_number(int car_num),car_number=car_num;,void show_number(),System.out.println (My car No. is :+car_number);,继承性,class Bus extends Car,int capacity;,void set_capacity(int bus_car_capacity),capacity=bus_car_capacity;,void show_capacity(),System.out.println(My capacity is: + capacity);,class CarDemo,public static void main(String args),Bus DemoBus = new Bus();,DemoBus.set_number(6868);,DemoBus.show_number();,DemoBus.set_capacity(30);,DemoBus.show_capacity();,运行结果:,继承性,项目任务:,点类,x,坐标和,y,坐标,方法(获取,x,和,y,的坐标),圆类,x,坐标和,y,坐标,半径,r,方法(获取,r,)和(获取面积),圆柱类,x,坐标和,y,坐标,半径,r,,高,h,方法(获取,h,)和(计算体积),多态性,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。,方法重写:指方法的含义被重写后替代 。,子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。,子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。,方法重写时应遵循的原则:,改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。改写后的方法不能比重写的方法产生更多的例外。,自行车的移动和公路赛车的移动都是靠外力来移动,二者是相同的。公路赛车继承了这一特点,但公路赛车的移动速度就不相同了,移动的快慢就是由它们各自移动特性不相同决定的,,class bike,/自行车的移动速度,public void move(),System.out.println(速度慢的!);,public class racing_cycle extends bike,/公路赛车的移动速度,public void move(),System.out.println(速度快的!);,public static void main(String args),racing_cycle rc = new racing_cycle(); /创建了一个公路赛车的对象,对象引用为rc,rc.move(); /执行了move()方法,例,3-6,:源程序名,Rewritex.java,,是方法的重写的例子。,class SuperClass,int x;,void setF( ),x=0;,System.out.println(Super,的变量,x,的值,+x);,void setF( ), /,重写了父类的方法,setF(),x =6;,System.out.println(Son,的变量,x,的值,+x);,class SubClass extends SuperClass,int x;/,隐藏了父类的变量,x,多态性,class Rewritex,public static void main(String args),SubClass Son = new SubClass ();,Son.setF();,SuperClass Father= new SubClass ();,Father.setF();,运行结果:,多态性,方法重载,方法重载是指同样方法在不同的地方具有不同的含义。,方法重载使一个类中可以有多个相同名字的方法。编译器根据参数的不同来静态确定调用相应的方法。,方法重载中这些方法的参数必须不同,或是参数的数量不同,或是参数的类型不同。,例,3-8:,源程序名,TestLoad.java,,方法重载的例子。,多态性,/*,定义一个方法重载的类*,/,class Load,void receive(int i) / receive,方法,带有,int,类型参数,1,个,System.out.print(Receive one data!,:,);,System.out.println(i=+i);,void receive(int x,int y) / receive,方法,带有,int,类型参数,2,个,System.out.print(Receive two datas!,:,);,System.out.println(x=+x+,y=+y);,void receive(double d) / receive,方法,带有,double,类型参数,1,个,System.out.print(Receive one double data!,:,);,System.out.println(d=+d);,void receive(String s) / receive,方法,带有,string,类型参数,1,个,System.out.print(Receive a sting!,:,);,System.out.println(s=+s);,/*,主程序类*,/,public class TestLoad,public static void main(String args),Load mo=new Load (); /,创建对象,mo,mo.receive(1); /,调用,receive,方法,带,int,类型参数,1,个,mo.receive(2,3); /,调用,receive,方法,带,int,类型参数,2,个,mo.receive(3.14159); /,调用,receive,方法,带,double,类型参数,1,个,mo.receive(It is a Test!); /,调用,receive,方法,带,string,型参数,1,个,运行结果:,项目任务,设计一个,math,类,通过它可以实现整数的加法运算和实数的加法运算。,设计一个,employee,类,包括数据成员(姓名,年龄,工号,工资),构造方法,,addsalary,方法增加工资(加薪,10%,),,list,显示信息。再设计一个,manager,类,增加数据成员,position,,改写,addsalary,方法增加工资(加薪,20%,)。,3.5,抽象类和接口,抽象类(见,Animal.java),只给出抽象结构,不给出每个成员函数的完整实现的类。,抽象方法:是指该方法只有方法说明却没有方法体。,用,abstract,关键字来修饰一个抽象类,用,abstract,关键字来修饰一个抽象方法。,抽象类必须被继承,抽象方法必须被重写。,例,3-9,源程序,Abstract.java,,一个带有抽象成员函数的类。,abstract class A,abstract void callme( );,void me( ),System.out.println(,在,A,的,me,成员函数里,);,抽象类,class B extends A,void callme( ),System.out.println(,在,B,的,callme,成员函数里,);,public class Abstract,public static void main(String args),A a = new B( );,a.callme( );,a.me ( );,运行结果:,抽象类,用关键字,abstract,修饰的类称为抽象类,abstract class A /,类,A,为抽象类,不能直接被实例化,因此一般作为其它类的父类,定义目的是提供可由其子类共享的一般形式。,抽象类需要继承,子类根据自身需要扩展抽象类。,抽象类,用关键字,abstract,修饰的方法称为抽象方法,abstract class A,abstract int aa(int x,int y);/,方法,aa,为抽象方法,抽象类中可以没有抽象方法或某个方法不是抽象方法,有抽象方法的类一定是抽象类,抽象方法,只能位于抽象类,。,接口,Shape.java,Java,语言不支持多继承性,即一个子类只能有一个,父类,但有时子类需要继承多个父类的特性,因此,,引入了接口。,接口,(Interface),,是一些抽象方法和常量的集合。,接口的定义,使用关键字,interface,。,接口定义的一般形式为:,接口修饰符, interface extends ,接口体,public abstract class aaa,/,抽象类里的抽象方法,abstract public void show();,/,抽象类里的方法,public int getMax(),/,定义,int,类型的私有变量,i,int i = 123;,/,将变量,i,返回出去并退出方法,return i;,public class test extends aaa,public static void main(String args),test t=new test();,t.show();,public void show(),System.out.println(“,实现了抽象类中的方法,”);,接口,首先来举一个例子,汽车的移动就好比一个接口,在以后生产的汽车中都遵循这个接口进行制造。而接口中只定义了汽车移动的形式,没有具体的去定义是怎么进行移动的,所以接口就好比是一个规定。,接口修饰符,interface,接口名称,/,成员变量和方法的申明,接口修饰符和类的修饰符是一样的。,interface,是定义接口的关键字。,接口里的成员变量默认为,public static final,类型的,接口不能声明为,final,的,因为,final,类型的必须要实现。,接口就是一个特殊的抽象类,抽象类里有抽象的方法和普通的方法,而接口里方法全为抽象的,需要在其子类进行具体的方法实现。类就是一个产品的详细功能说明,而接口就是这些功能的简要说明。,接口,如果一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是,接口定义,。,接口,是抽象方法和常量值的定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。,可以使用,extends,来继承接口的常量和抽象方法,但它与类中的,extends,不同,它,可以继承有多个父接口,(,多重继承,),,各父接口间用逗号隔开。,接口中的所有,常量必须是,public static final,,方法必须是,public abstract,,这是系统默认的,不管你在定义接口时,写不写修饰符都是一样的。,接口的定义,接口修饰符,接口修饰符为接口访问权限,有,public,和,缺省,两种状态。,public,状态,:用,public,指明任意类均可以使用这个接口。,缺省状态,:,在缺省情况下,只有与该接口定义在同一 包中的类才可以访问这个接口,而其他包中的类无权访问该接口。,父类接口列表,一个接口可以继承其他接口,可通过关键词,extends,来实现,其语法与类的继承相同。被继承的类接口称为父类接口,当有多个父类接口时,用逗号“,,,”分隔。,接口体,接口体中包括接口中所需要说明的常量和抽象方法。,接口的实现,使用关键字,implements,。,在实现一个接口时,类中对方法的定义要和接口中的相应的方法的定义相匹配,其,方法名,、,方法的返回值类型,、,方法的访问权限,和,参数的数目,与,类型信息,要一致。,例,3-10,源程序名,interfacetest.java,,是接口的例子。,interface superinterface1 /*,定义接口,1*/,static final double PI=3.14; /,说明常量,public double Area(); /public,状态方法,interface superinterface2 /*,定义接口,2*/,double bulk(); /,缺省状态方法,/*,定义一个主程序类实现接口*,/,public class interfacetest implements,superinterface1,superinterface2,double r;,double l;,public interfacetest() /,不带参数构造方法,this.r=0.0;,this.l=0.0;,public interfacetest(double r,double l) /,带两个参数的构造方法,this.r=r;,this.l=l;,接口的实现,public double Area() /,实现接口方法, return 2*PI*(r+1);,public double bulk() /,实现接口方法, return PI*r*r*l; ,public static void main( String args ),interfacetest c1=new interfacetest(10.0,6.0); /,创建类对象,double arearesult;,arearesult=c1.Area();,double bulkresult;,bulkresult=c1.bulk();,System.out.println(,面积为,+arearesult);,System.out.println(,体积为,+bulkresult);,包,所谓包,就好比日常生活中的箱子,是一个存放东西的空间。在,Java,中包的概念就好比,Windows,里的目录的概念,是一层一层的关系。按照功能的分类分别存放在各个包里。,使用包是为了更好地将代码进行分别管理,首先介绍如何创建一个包,语法为:,package,包名,;,例如下面的程序语句。,package a.b;,创建包时有几个注意事项。,package,为,Java,保留的关键字,不能使用别的符号进行代替。,package,语句必须在第一行。,package,语句只能有一个,不能有多个。,如果包有多层的话用句点,”,.,”,分隔,包的定义,包定义的一般形式为,:,package ,.,;,package,语句通过使用,“,”,来创建不同层次的包,这个包的层次对应于文件系统的目录结构。,例如:,package java.awt.image,表明这个包存储在,javaawtimage,目录中。,在,JDK,环境下创建一个包,编译,Java,程序的命令为:,javac,d ,使用,-d,参数,编译结束后,扩展名为,class,的文件被存储在,package,语句所指明的目录中。,包名全部用小写字母,包的引入,使用关键词,import,语句来引入一个包 。,如果有,package,语句,则,import,语句紧接在其后,否则,import,语句应在程序首位。,引入,import,语句的一般形式,:,import .,包名,2.,包名,3,.(,类名,|*),;,包的访问权限,包中封装了类和其他的包,,Java,语言提供了许多不同级别的访问权限修饰符来控制对成员变量和成员方法的访问权限。因此,,Java,语言的包中也存在访问权限问题。,例,3-11,源程序,TestMan.java,,创建包和引用包的例子,.,package mypackage;,public class Man,String name;,int age;,public Man(String n,int a), name=n;,age=a;,public void show(),if (age18),System.out.println(name+,的年龄是,+age);,/TestMan.java,文件代码,import mypackage.*;,public class TestMan,public static void main(String args),Man test=new Man(,李阳,15);,test.show();,Java API,API,是系统提供的类库,它不是用户定义的,而是,Java,系统自带的,供程序员编程时直接使用。使用过程中,程序员只需要根据实际情况安排若干个,API,实例对象,再调用这些对象的各种方法,就可以完成相应任务。,Java,提供了编程所需的一些基础,API,类,这些类分布在不同的包中。,3.7,系统常用类,系统常用包,Java.lang,包:主要含有与语言相关的类 。,J,包:含有与网络操作相关的类。,Java.io,包:主要含有与输入输出相关的类,Java.util,包:包括许多具有特定功能的类,有,Arrays,、,Date,、,Calendar,和,Stack,等 。,Java.swing,包:提供了创建图形用户界面元素的类。,Java.applet,包:含有控制,HotJava,浏览器的类。,Object,类,Object,类处于,Java,开发环境的类层次树的根部。,Object,类,Object,类的常用方法:,clone ( ),:生成并返回当前对象的一个拷贝。,equals,(Object obj),:比较两个对象是否相同,结果为一布尔值。,getClass,( ),:返回一个对象在运行时所对应的类的表示,从而得到相关的类的信息。,finalize,( ),:定义回收当前对象时所需完成的清理工作。,toString,( ),:返回描述当前对象的字符串信息。,例,3-12,源程序,ObjectExam.java,,,Object,类的常用方法示例。,Rect(double len, double width) /,定义有两个参数的构造方法,a=len;b=width; ,double area() return a*b; ,class ObjectExam,public static void main(String args),class Rect,double a,b;,Rect() a=0.0; b=0.0; /,定义无参数的构造方法,Integer a = new Integer(1);,Integer b = new Integer(1);,Rect c = new Rect (20,5);,System.out.println(a.equals(b); /a=b,,返回,true,System.out.println(The Objects class is: +,a.getClass();,System.out.println(c.toString();,Character,类,Character,类的构造方法为:,public Character(char,value),Character,类的一些常用方法及其说明 :,isLowerCase,(charch),:判断字符为小写格式。,isUpperCase,(charch),:判断字符为大写格式。,isDigit,(charch),: 判断字符是否为数字。,isLetter,(charch),: 判断字符是否为字母。,charValue,( ),: 返回字符变量。,boolean Boolean char Character byte Byte,short Short,int Integer,long Long,float Float,double Double,例,3-14,源程序,Char2.java,public class Char2,public static void main(String args ), /,构造方法,Character ch = new Character(a);,char c = ch.charValue(); /,返回字符变量,if (Character.isUpperCase(c),System.out.println(The character + c + is upper case.);,else,System.out.println(The character + c + is lower case.);,boolean b = Character.isDigit(c);,boolean y= Character.isLetter(c);,int x = Character.digit(c,16); /,十六进制中,,c,代表,10,。,System.out.println(b= + b);,System.out.println(y= + y);,System.out.println(x= + x);,Integer,类,Integer,类有两种构造方法,public Integer(intvalue),public Integer(Strings) throws NumberFormatException,Integer,类的常用类变量及其说明,MAX_VALUE,:规定了,int,类型的最大值。,MIN_VALUE,:规定了,int,类型的最小值。,Integer,类的常用方法及其说明,parseInt,(Strings),:将字符串,s,转换为带符号十进制整数,结果为,int,量。,valueOf,(Strings),:将字符串,s,转换为一个,Integer,对象,该对象对应的,int,数值与字符串表示的数值一致。,例,3-15,源程序名,IntTest .java,public class IntTest,public static void main(String args ), /,构造方法,Integer a = new Integer(1);,Integer a2 = new Integer(1);,int i = a.intValue( );,int i2 = Integer.valueOf(22).intValue( );,int i3 = Integer.parseInt(66);,System.out.println(i);,System.out.println(i2);,System.out.println(i3);,System.out.println(a.equals(a2);,byte largestByte = Byte.MAX_VALUE;,short largestShort = Short.MAX_VALUE;,int largestInteger = Integer.MAX_VALUE;,int smallestInteger = Integer.MIN_VALUE;,long largestLong = Long.MAX_VALUE;,float largestFloat = Float.MAX_VALUE;,double largestDouble = Double.MAX_VALUE;,System.out.println(The largest byte value is + largestByte);,System.out.println(The largest short value is + largestShort);,System.out.println(The largest integer value is +,largestInteger);,System.out.println(The smallest integer value is +,smallestInteger);,System.out.println(The largest long value is + largestLong);,System.ou
展开阅读全文