java基础知识点整合

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

面向对象3.1面向对象介绍1.什么是面向对象对象其实就是现实生活中的各种物体,他们有各种各样的功能,当我们需要借助这些物体去完成我们的需求时,我们就是在面向这些对象,使用它们其中的功能,至于他们其中的功能是如何实现的,我们无需知道,只要能完成需求即可.2.什么是面向对象编程(OOP):ObjectOrientedProgramming是一种编程思想,使用对象去进行编程.它的特点有:封装,继承,多态3.对象从哪来:对象是需要先用类来描述,然后使用类来创建.类是对象的描述,对象是类的实例.4.面向对象的优点提高代码复用性.使用者无需关心对象其中是如何实现的.让程序员从一个编写者转换成一个使用者.更加符合人的思维能力,使编程更简单.3.2定义类1.成员变量在类中用变量来描述这一类对象公有的特征.2.成员函数在类中用函数来描述这一类对象公有的行为.3.3创建和使用对象1.怎么创建使用new类名()形式创建一个对象2.怎么使用通过.语法来访问类的成员.例如:Personp=newPerson();p.name=张三;p.eat();3.4对象的初始化过程1.加载类类在第一次使用的时候被加载到内存中2.初始化成员变量当创建对象的时候,成员变量会初始化为默认值,基本数据类型都是0,引用数据类型都是null3.5对象的生命周期1.开始new关键字创建对象的时候,生命周期开始2.结束没有任何引用指向对象,该对象成为垃圾,被虚拟机回收3.6匿名对象1.什么是匿名对象没有任何引用指向的对象,就叫匿名对象2.匿名对象有什么特点匿名对象在创建之后立即被回收,只能使用一次3.7封装1.什么是封装封装就是将一类事物的特征和行为封装在一个类中,定义成成员变量和成员函数创建对象之后,这些成员函数可以访问自己的成员变量2.对成员变量的封装使用private关键字将成员变量私有化如果需要对外部提供访问方式,写公有的get,set方法3.8构造函数1.什么是构造函数构造函数是一个特殊的函数.函数名必须和类名一致.没有返回值类型.(不等于void,不能写任何返回值).可以写return,但是不能写return+值(尽量不要写).new关键字创建对象时自动调用2.应用场景如果我们希望一段代码在创建对象的时候执行,就可以写在构造函数中通常我们使用构造函数对成员变量进行赋值3.构造函数和成员变量的执行顺序成员变量优先于构造函数先执行,因为通常使用构造函数都是对成员变量进行初始化,所以如果没有成员变量,构造函数是没有任何意义的.4.构造函数的重载和普通函数一样,参数列表不同(类型不同,顺序不同,个数不同)即可.重载只与参数列表有关5.构造函数的调用在创建对象时自动调用.在构造函数的第一条语句可以使用this(被调用的构造函数的实际参数)的形式调用该类其他构造函数.6.自动生成构造函数在一个类中构造函数是一定存在的.因为在一个类中如果没有写任何的构造函数,编译时也会自动生成一个无参的构造函数,里面什么代码都没有.如果写了任何一个构造函数,那么就不会有自动生成的了注意:我们在类中只写了一个有参构造函数的时候,这个类就不能使用无参的构造函数创建对象了7.构造函数的访问权限通常构造函数的访问权限都是公有的,因为构造函数就是为了让别人创建对象时调用的个别情况下在定义类时不希望外部创建对象,这时可以使用private修饰构造函数,例如:单例设计模式(Singleton)3.9成员代码块(构造代码块)1.什么是成员代码块在类中使用{}定义一段代码,这段代码在创建对象的时候会自动运行2.成员代码块和构造函数的区别构造函数在创建对象的时候是N个选1个调用而代码块是一定执行构造函数可以传入参数代码块不能传入参数3.创建对象时内存中的工作顺序在内存中查找指定的类,如果没有就加载类,有则直接引用在内存中开辟一块空间,将成员变量初始化为默认值,0和null按照类代码从上到下的顺序,执行代码块或者成员变量赋值执行构造函数中的代码4.在方法中也可以写代码块(方法代码块),但是不常用3.10成员变量和局部变量1.成员变量在类中定义的变量,(Field),在整个类都可以访问(用于描述着一类事物的共有特征).成员变量随着对象的建立而建立,存在于对象所在的堆内存中.成员变量有默认初始值(0/false/null)2.局部变量在方法/语句中定义的变量(LocalVariable),存在于栈内存中.作用范围一结束,变量的空间会自动释放.局部变量是没有初始值的.3.同名问题在同一个作用域中成员变量不能重复,局部变量也不能重复但是成员变量和局部变量可以同名,他们互相不冲突4.访问问题在局部变量和成员变量同名的时候,如果直接用变量名访问一个变量,那么是先找局部变量,如果不存在才找成员变量这时如果不想找局部变量,直接找成员变量,应该用this.变量名3.11this关键字1.构造函数中this(参数)形式可以在构造函数的第一条语句中调用其他的构造函数this.成员名形式可以调用当前对象的成员2.普通函数中this用在普通的函数中,可以代表调用当前函数的对象哪个对象调用this所在的函数,this就代表那个对象.3.内部类中可以使用外部类名.this.成员来访问外部类的成员.3.12静态(static)变量1.什么是静态变量用static修饰的成员变量就是静态变量(随着类的加载而加载)优先于所有非静态成员及成员代码块.2.静态变量和普通变量有什么不同静态变量在类加载后就初始化,不用创建对象可以直接使用.静态变量被类的所有对象共享(在共享区),通过一个对象改变,所有对象都改变.静态变量可以使用类名.变量名形式访问,Java推荐使用这种方式,而不是通过对象访问.3.类在什么时候加载类在第一次使用的时候加载例如:创建对象,使用静态变量,使用静态方法定义变量的时候不加载类.4.静态变量在什么时候使用在定义一个类的时候,如果希望这个类的所有对象共享一个数据时,就可以使用静态成员变量.3.13静态(staitc)方法1.什么是静态方法用static修饰的方法就是静态方法静态方法类加载后可以直接运行可以使用类名.方法名调用2.什么时候使用静态方法如果一个方法没有访问任何外部的非静态成员,那么就可以定义为static.这样在调用的时候不用创建对象即可使用,给人提供方便,并且效率更高.3.静态方法使用的注意事项1.静态方法不能直接访问方法外非静态成员.因为静态方法是随着类的加载而加载的,而非静态成员只有在对象创建才会加载.因此,当静态方法访问方法外非静态成员,对象不一定被创建,所以不能直接访问,除非在静态方法中创建本类对象,才可以访问,方法外静态成员.2.与静态方法不能直接访问方法外非静态成员相反,非静态方法是可以访问静态成员的,因为,对象被创建了,这个类一定被加载到内存中,所以可以访问.3.因为静态优先于对象存在,所以在静态方法中是不能出现this,super这两个关键字,道理很简单,静态被加载时还没有对象,而这两个关键字都和对象有关,所以不能使用.4.静态的利与弊静态好处:1.如果一个类里的某一个成员变量,他的所有需要共同使用它,没必要每一个对象都存储一份,可以将成员变量设为static,系统将进行单独空间(方法区/静态区)存储,节省内存空间.2.静态的成员可以直接被类名调用,使用简单.静态弊端:1.因为静态是随着类加载而加载的的,所以其生命周期是和类同存亡的.所以生命周期很长,比较浪费内存空间.2.因为静态只能访问静态,所以访问有一定的局限性.3.因为主函数是静态的,所以用主函数调用的方法再不创建对象的情况下,只能都是静态的.3.14静态代码块1.什么是静态代码块用static修饰的代码块类加载后直接运行,只能执行一次(因为类只会加载一次),如果在一个类中有主函数,他是优先于主函数运行的.不能访问外部非静态成员2.什么时候用静态代码块在定义一个类的时候,如果希望某一段代码在别人使用这个类的时候就执行,那么就可以写在静态代码块中.用于给类初始化.3.15单例设计模式设计模式:解决某一类问题最行之有效的方法.单例设计模式:让一个类只能创建一个对象.懒汉式和饿汉式饿汉式步骤:1.私有化构造函数.2.创建一个对象,并私有(防止类外改变对象内部内容).3.创建一个公有的,静态的方法,返回本类对象,使类外获取本类对象.懒汉式步骤:1.私有化构造函数.2.创建一个对象引用,并私有(防止类外改变对象内部内容).3.创建一个公有的,静态的方法,判断是否创建了一个对象如果创建了,返回本类对象,如果没有创建,创建一个对象返回,使类外获取本类对象.3.16继承1.什么是继承定义一个类,使用extends关键字可以继承另一个类,得到父类的所有非私有属性和方法.2.继承的特点Java只支持单继承,不支持多继承,但可以多重继承.一个父类可以有多个子类,但一个子类只有一个父类.3.java改良多继承的原因?提高代码的安全性,如果一个子类继承多个父类,而这多个父类中有同名的方法,子类要去访问的话,就不知道要访问哪一个方法了.降低了安全性..4.子类对象创建的过程子类对象之所以能调用父类的方法,是因为在创建子类对象的时候,其内部创建了一个父类对象.在new一个对象时,会先去子类构造函数,中寻找super()(如果没有显示指定父类构造函数)然后创建父类,然后再回到子类中创建对象.调用子类的方法时,虚拟机会先在子类中查找是否包含该方法,如果没有则找父类.在调用子类构造函数的时候,一定会使用super(参数)形式调用父类构造函数创建父类对象.子类中必须要有一个构造函数含有super调用父类构造函数..super和this类似,都是必须在构造函数的第一条语句使用如果构造函数写了this,那么则不能写super,反之亦然如果没写this也没写super,默认会自动调用父类无参的构造函数5.方法覆盖(重写)覆盖可以让子类将从父类继承来的方法进行扩展,提高代码复用性,减少冗余.覆盖时子父类的方法名子必须相同,包括返回值,参数列表,并且子类的权限必须大于或等于父类.只能覆盖非私有方法.6.重载(Overload)和重写(Override)的区别:重载:名字相同,参数列表不同只与参数列表相同.重写:子父类的方法名子必须相同,包括返回值,参数列表,子类的权限必须大于或等于父类.(如果父类返回值是一个类,子类返回值可以是和父类相同的类或其子类).7.向上转型子类可以当作父类使用,因为父类的功能子类都有Fuf=newZi();如果一个方法要求传入一个父类类型对象,我们也可以传入一个子类对象8.强制类型转换在子类当作父类来用时,不能调用子类特有的成员.如果一定要调用,需要把父类类型强转回子类类型.这种转换叫强制类型转换,在编译时不论类型是否匹配都不会报错,为了程序安全,通常在转换之前使用instanceof进行判断.3.17Object类及其中常用方法1.什么是Object类Object类是Java中所有类的父类,如果定义一个类不继承任何类,默认继承ObjectObject类中的方法会被所有的类继承2.finalize任何对象在成为垃圾被销毁之前,都会调用finalize方法Object类中的finalize方法是空的,什么都没有当我们希望在对象被销毁之前执行一段代码,就可以在类中重写finalize方法,把要执行的代码写在方法中.3.toStringtoString方法可以将一个对象转为字符串表示形式Object类中的toString方法返回的是类名@内存地址当我们希望调用toString时返回成员变量的值,就可以重写该方法调用System.out.println()方法时会自动打印对象toString的返回值4.equalsequals方法是用来比较两个对象的Object类中equals方法默认比较的是对象的地址如果我们希望比较两个对象的属性,那么可以重写equals方法,在方法内比较所有的属性在比较字符串时如果希望比较两个字符串的内容,就需要使用equals,String类是

1 / 69
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功