您好,欢迎访问三七文档
基础知识回顾今日任务1、面向对象回顾2、常用API回顾3、集合回顾4、IO回顾5、泛型技术6、反射技术7、debug调试程序8、junit测试1、面向对象回顾1.1、面向对象思想和对象创建流程1.1.1、面向对象的思想:Java是面向对象的语言,在Java中把生活中的所有事物都使用对象来描述和封装。生活中的事物都有自己的特点(属性、行为(功能))。把每个事物的具体的属性和行为(功能)用Java中的变量和方法描述。而生活中的这个事物就是Java中的类来描述,这样就把生活中的事物和Java中的类对接起来。我们就可以用Java这门计算机语言来描述我们身边的所有事物。要描述生活中的某个事物:我们首先要想象生活具体一个存在的实例(个体),然后把这个具体的个体的一些特点进行抽象(概括)的描述。描述人:人的特点:属性:年龄性别姓名行为:睡觉学习把用文件体现的生活中的事物用Java中的类来封装:classPerson{//描述人的属性intage;Stringsex;Stringname;//描述人的行为publicvoidsleep(){}publicvoideat(){}}当把生活中的事物用类封装完成之后,最终我们的目的在java中来使用当前封装的这个类。要使用某个类,这时就必须使用Java中的new关键字来创建当前这个类在java中的一个具体的实例(个体)。这样就可以通过这个具体的个体来调用封装的属性和行为。1.1.2、对象的创建流程:类加载过程:当在程序中使用到某个类的时候,这时JVM会先到内存中找有没有当前这个class文件,如果没有这时会到相应的路径下面去查找对应的class文件,然后把这个class文件加载内存中。加载的过程中,会把所有非静态的成员(变量、方法、构造方法、构造代码)会加载到方法区中的非静态区中。而类中的所有静态成员(变量、方法、静态代码块)会被加载到方法区中的静态区中。所有的静态加载完成之后,开始对类中的静态成员变量进行默认初始化,当所有的静态成员变量默认初始化完成之后,开始对所有的静态成员变量进行显示初始化,显示初始化完成之后,执行类中的静态代码块。当所有的静态代码块执行完成之后,类加载完成。对象的创建过程:使用new关键字开始创建对象,这时需要先在堆内存中分配对象所属的内存空间,给类中的所有非静态的成员(非静态成员变量会在创建对象的时候随着对象的创建在堆中出现)默认初始化,开始执行与之对应的构造方法,在构造方法中有隐式的三步(1、super()2、成员变量显示初始化3、构造代码块执行)并且要把这三步执行完成之后,才能执行构造方法中的代码。隐式三步解释:1、super()找当前类的父类,要执行父类的构造方法,然后对继承到的父类中的内容进行初始化动作。2、成员变量显示初始化在定义类的时候,我们可能在非静态的成员变量上有显示的赋值语句,这时就在这里把显示的数据赋值给当前成员变量3、构造代码块运行执行本类中的构造代码块1.1.3、类中常用的关键字:封装的概念:把不需要外界直接访问的内容私有起来,给外界提供间接的访问方式。类中的成员变量不需要外界直接操作,全部私有起来,就需要使用private关键字。private:只能修饰类中的成员(变量和方法)。当使用了私有关键字把类中的成员私有了,那么在本类以外的地方是没有权限来访问的。当把类中的成员变量私有,外界需要获取或者设置成员变量的数据时,这时需要对外提供get或者set方法。classPerson{privateintage;publicvoidsetAge(intage){this.age=age;}publicintgetAge(){returnthis.age;}}1.1.4、static:当类中某个成员变量值是所有对象共享的数据,这时就可以把这个成员变量静态起来,被静态修饰后,它会在类加载的时候存储在方法区的静态区中,后面创建的所有对象都来共享当前这个静态变量。当类中的某个成员方法不需要对象来调用,它就可以执行运行时,这时这个方法也可以使用静态的来修饰。在JDK中提供的所有工具类,它们中方法都是静态的,静态方法的本质原因是这个方法没有访问到本类对象中的特有数据。静态的细节:静态不能调用非静态。非静态可以调用静态。1.1.5、this:当某个方法运行的时候,这个方法如果是非静态的方法,那么就需要对象来调用,在方法中有个隐式的关键字this来记录当前调用这个方法的那个对象。谁调用当前的方法,this就是谁。父类中的this,也有可能指向自己的子类对象。this可以区别成员变量和局部变量格式:this.成员变量名this在构造方法中,可以调用本类的其他构造方法,格式:this(实参);1.1.6、构造方法:构造方法主要是给特定的对象进行初始化的,它是在创建对象的时候,对象中的非静态成员变量默认初始化完成之后执行的。并且一个类中有多个构造方法时,只有和创建对象时参数一致的那个构造方法才会运行。构造方法只有在创建对象的时候,被对象来调用,当对象创建完成之后,构造方法就已经执行完了,我们不能手动的去调用构造方法。一个类中可以有多个构造方法是以重载的形式体现,这时在构造方法之间要调用可以使用this()形式。在构造方法中可以调用其他的方法,但是其他方法不能调用构造方法。当一个类在定义的时候如果没有给类中书写任何的构造方法,在编译完成之后会在这个class文件中添加一个空参数的构造方法(默认构造方法),如果自己在定义类的时候书写了构造方法,这时默认的构造方法就没有了。在定义类的时候,如果这个类不能让外界创建空参数的对象,这时一定不要对外提供空参数的构造方法。1.1.7、单例设计模式:保证在本次程序运行的过程中对象是唯一的。单例的代码体现形式:1、私有本类的构造方法2、创建本类的对象3、对外提供访问本类对象的方法常用的两种书写形式:1、饿汉式classSingle{privateSingle(){}privatestaticfinalSingles=newSingle();publicstaticSinglegetInstance(){returns;}}2、懒汉书classSingle{privateSingle(){}privatestaticSingles=null;publicstaticSinglegetInstance(){if(s==null){s=newSingle();}returns;}}一个类中都能书写什么东东:成员变量成员方法静态代码块构造代码块构造方法内部类1.2、继承和多态1.2.1、继承:Java用类来描述事物,生活中的事物之间有一定的关系。这时当我们要把这些关系也描述出来的话,就需要使用Java中的继承了。继承是让类和类之间产生关系了,需要使用extends关键字来完成。使用继承的时候,一定要保证两个类属于同一类事物,这时才能使用继承。继承的好处:让类和类产生关系,父类描述好的事物,子类可以不用再描述,子类可以执行使用。继承的弊端:打破了封装性。Java只支持单继承,不支持多继承,但支持多重继承。1.2.2、继承中的细节:继承中,继承体系的底层永远描述的都是这个体系中最共性的内容。当父类描述好的内容,子类是可以不用描述的,但如果子类功能相同,但具体的动作有差异,这时子类就可以把父类的功能给重写。成员变量当子父类中出现了同名的成员变量,在子类中要使用父类的成员变量时,通过super.父类的成员变量名。成员方法当子父类中出现了同名的成员方法时,这时就发生了方法的复写(重写,覆盖)。父类定义的功能,不适合子类时,子类就可以延用父类的方法定义,但是把方法体重新书写,建议适合子类自己的功能体。方法重写的时候需要注意问题:1、子类复写父类中的方法的时候,要求子类的方法的访问权限大于或者等于父类的权限。2、父类中私有的成员方法不参与复写。私有的只能在本类中访问,子类是没有权限访问的。3、静态的方法只能被静态复写。子类复写父类的方法时,一定要保证不能修改方法的访问方式。4、子类复写父类的方法时,如果父类方法上声明了多个异常,子类复写的时候可以声明多个异常中的子集。5、子类复写父类的方法时,如果父类方法上没有声明任何异常,子类复写的时候也不能声明异常。如果子类中真的有编译时期异常,这时能在子类中捕获。6、子类复写父类的方法时,如果父类方法上有异常,子类复写时,可以声明父类方法上声明的异常的子类异常。classFu{intx=100;publicFu(intnum){}publicvoidshow()throwsException{}}classZiextendsFu{publicZi(){super(123);}publicvoidshow()rhrowsIOException{}}构造方法:子类继承了父类,在子类的构造方法中有隐式super()调用父类的构造方法。注意当父类中没有空参数的构造方法时,需要手动的在子类的构造方法中显示的声明调用父类的哪个构造方法。1.2.3、多态:多态是父类或者接口的引用指向了自己的子类或者实现类的对象。这时就称为多态。Fuf=newZi();多态了多态中的细节:成员变量多态中,通过引用来操作成员变量的时候,编译时期看引用所属的类中有没有这个成员变量,运行时期依然运行的是引用所属类中那个成员变量。编译运行都看左边。成员方法多态中对于非静态的方法调用:编译时期看引用所属类中有没有这个方法,没有编译报错。运行时期看引用所指的对象所属的类中有没有这个方法,如果子类把这个方法复写了,就调用子类的,如果子类没有复写就调用父类的。编译看左边,运行看右边静态方法多态中的静态调用:编译运行都看引用所属类。编译运行都看左边。多条中,导致把子类类型提升成了父类或者接口的类型,那么在运行程序的时候,导致只能调用父类或接口中定义的功能,而无法使用子类的特有功能,当要使用子类特有功能时,一定要向下转型,在使用向下转型的时候,需要对引用类型进行判断,if(引用instanceof子类类名){}如果没有进行判断,直接进行向下转型,就有可能发生ClassCastException。在转型中始终只有子类或者实现类的对象做着类型的转换而已,对象永远都是同一个。1.3、抽象类和接口抽象类:抽象类依然属于类,也是在描述事物,但是在描述事物的过程中,事物中的某些行为没有办法描述具体,这时就需要使用抽象方法来描述当前这个事物具备的这个行为。由于一个类中有抽象方法,导致这个类变成了抽象类了。就需要使用抽象关键字来修饰这个类。abstract1、抽象类一定是父类吗?一定是,但不一定是顶层父类。2、抽象类中有构造方法吗?有3、抽象类能够创建对象吗?不能。4、抽象类中可以没有抽象方法吗?可以。这个类作为适配器类。如果一个接口中有多个抽象方法时,需要具体实现类把接口中的所有方法全部给实现,但是可能只有接口中部分方法需要使用,而其他的方法不需要使用,这时这个实现类,还必须把那些不需要使用的方法也给实现了。于是就可以先定义一个实现类,把这接口中的所有方法全部给空实现。而这个类是实现了接口,但没有对其中的方法做任何的具体实现,这时创建这个类的实例没有意思。于是就不让创建这个类的对象,只能把这个类变成抽象类。5、抽象关键字不能和那些关键字共存:staticfinalprivate接口:抽象类、一般的类都是在描述事物,都属于事物体系中的一部分。而当事物体系中出现了不属于这个事物体系固有的功能时,这时这个功能就不能抽取到父类中去。这时就可以定义一个接口,把这个不属于事物提供固有的功能抽取到接口中。那个事物具备了这个额外的功能,那个事物就去实现这个接口。接口的第一个功能,就是给事物体系增加额外功能。接口的第二个功能,定义规则(规范)。类和类之间继承关系,类和接口之间是实现关系,并且一个类可以实现多个接口,接口和接口之间继承关系。接口使用interface定义。接口中的变量都是常量,有固定的修饰符publicstaticfinal接口中的抽象方法也有固定的修饰符:publicabstr
本文标题:JAVA基础总结1
链接地址:https://www.777doc.com/doc-4358997 .html