您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 全面的面向对象知识点
成员变量的特点:1、成员变量有默认值引用类型:null基本类型:整数:byte0short0int0long0L小数:float0.0Fdouble0.0布尔:false(true)字符:用的unicode'\u0000'2、成员变量VS局部变量共同点:都是变量,用于保存可变的数据格式:类型变量名;既然是变量都应该满足java标识符的规则不同点:局部变量在使用之前必须初始化,而成员变量自动在定义的时候就初始化(默认值见上)作用域不同,局部变量在包含自身的函数或者代码块中有效,而成员变量在整个类中有效在内存中的区域不同,局部变量在栈中,成员变量在堆内存访问方式不同,局部变量可以通过变量名直接访问,成员变量必须以来于(实例.)来访问细节:调用函数的时候,需要注意的是如果函数有返回类型,那么可以调用打印语句将返回的数据进行输出,反之,编译出错!匿名对象的特点:1、创建实例的方式new类();2、访问属性的方式2种:Stringcolor=newCar().颜色;System.out.println(newCar().颜色);3、匿名类创建的实例的有效范围是匿名类创建结束4、使用匿名类改变实例的属性是不可取的,因为改变之后该实例访问不到(每个对象用完之后就消失)5、匿名类的使用范围:函数的调用和实参的传递使用场景:函数的调用:当只需要调用一次类的成员函数的时,可以采用匿名类,多次调用必须起名字。实参的传递:当开发者创建一个实例只是想要将该实例作为实际的参数传递给函数,那么就可以使用封装的概念:1.封装即在描述一个类的时候,将原来的逐步的功能(面向过程),组装进类中。属性和函数2.封装2.1属性的封装实现:将属性的访问权限设置为private,然后提供共有的访问方法对于属性而言,要提供getXxx()和setXxx()2.2函数的封装实现:函数本身就是封装,因为函数本身就是一个具有特定功能的函数函数也称之为:功能封装的实现:属性封装:将类中的成员属性设置为私有的访问方式,对外提供公有的访问权限封装的好处:1、将变化隔离2、便于使用3、提高代码的复用性4、提高代码安全性(记忆)构造函数:就是一个普通的用来对类进行初始化操作的函数构造器的特点:1、在描述一个类的时候,类本身有一个默认的无参数的构造函数2、构造函数没有返回值类型,但是也不能写void3、构造函数的名称和类名一致4、一旦开发者自己定义了构造函数,那么编译器就不会自动给类添加默认的无参数的构造函数5、构造函数可以按照函数重载的形式出现(最常见的重载的例子)6、在一个构造函数中不能以一般的调用函数的方式来调用构造函数new7、没有return应用:构造函数主要在初始化的时候调用注意:1、定义变量的时候可以初始化,优先级最高(加载类)2、构造函数也可以初始化成员变量,只不过覆盖1中的值代码块:使用{}括起来的一些java语句分类:在函数中:局部代码块在类中:构造代码块特点:1、按顺序执行2、可以嵌套3、变量不能冲突,但是可以在变量释放后再定义同名的变量4、先是默认初始化inta;再是显示的初始化inta=23;构造代码块初始化{a=45}构造函数初始化a=67;区别:构造代码块给所有的实例初始化构造函数是给特定的对象进行初始化项目应用:可以将多个实例都需要初始化的变量放在构造代码块中一次性初始化可以提高代码的效率this关键字:该关键字主要用来解决局部变量和成员变量之间的命名冲突问题this用法:this.成员变量|函数使用细节:1、可以调用成员2、调用构造函数格式:this(//构造函数的参数列表);注意:使用this调用构造函数的时候一定要放在第一行因为实例的初始化工作要先进行构造函数中不允许递归的出现(自己调用自己称作递归)A调用BB又调用A,也就递归(注意这里的AB都是构造函数)Static关键字:类变量:属于类,而且需要使用static修饰,作用范围:可以用来修饰属性、函数和类,还可以修饰代码块特点:所有的实例都共享一份成员属性可以通过实例访问还可以通过类名直接访问(核心的特点)静态方法中只能调用静态的成员,不能使用非静态成员(变量和函数),但是定义自己的局部变量是允许的静态函数中不能使用this、super关键字------------------------------------------------------------------------------------main()函数简介:publicstaticvoidmain(String[]args){....}分析:1、该函数是由JVM帮助开发人员调用的2、该函数的名称必须是mainpublic:控制该函数的访问的权限,其他的类都可以调用,直接通过类名来访问static:说明该函数是一个静态函数,可以使用类名直接访问,也可以通过对象来访问void:说明该函数没有计算的结果main:函数名称可变,但是JVM只认识main(),如果没有则抛出异常如://java.lang.NoSuchMethodErrorString[]:函数的形参,args可变,也可以写为可变参数的形式:publicstaticvoidmain(String...args)注意:如何给虚拟机传递main函数的参数:javaDemo534455678原理:将class文件后的参数以“”分割后组装成为一个String类型的数组传递进去静态代码块:主要用于对静态成员变量进行初始化,当类被加载的时候执行,而且执行一次格式:static{...}需求:请以不同的方式打印helloworld总结:类的初始化过程:---------------------静态初始化-------------------------1、类被装载2、类的静态变量先做默认的初始化工作staticinta;//03、编译器对静态变量进行显示的初始化工作staticinta=90;//904、类的静态代码块对静态变量进行初始化---------------------非静态初始化-------------------------5、类的非静态成员进行默认的初始化工作inta;6、类的非静态变量进行显示的始化工作inta=8;//87、类的构造代码块对非静态变量进行初始化工作8、类的构造函数对非静态变量进行初始化工作(创建对象时)单例设计模式:java中借鉴了工程的一些设计的思想java中就有一些常见的设计模式(解决一类问题的思想或者方案)java的设计模式23种(书籍)单例的设计模式:为什么要使得一个对象是单个的:为了避免堆内存中过多的垃圾对象(如果对象过多,会导致内存溢出)默认的堆内存的空间是64M单例模式:1、将类的构造函数私有化(private)2、创建一个类类型的变量,使用私有的构造函数来初始化3、对外提供获取对象的共有的方法4、将所有的成员定义为static的单例的实现方式:1、饿汉式privatestaticServerser=newServer();2、懒汉式classServer{/*饿汉式privatestaticServerser=newServer();//属性privateServer(){//私有的成员只能在本类中使用}publicstaticServergetInstances(){//成员函数returnser;}*///懒汉式privatestaticServerser=null;//属性privateServer(){//私有的成员只能在本类中使用}publicstaticServergetInstances(){//成员函数if(ser==null){ser=newServer();}returnser;}}/*继承:继承主要用来解决类和类直接的重复代码问题实现:extends(扩展)应用:1、不要为了继承而继承2、当父类中所有的成员子类都需要的时候,可以使用继承如果父类中有一些某些子类不需要的成员,那么就不能单独的为了代码的共享而继承细节:1、private修饰的成员无法被继承2、java中是单继承(同时只能扩展一个类),但是可以通过接口来完成多实现继承的特点:1、属性1.1子类可以直接继承父类的非私有的成员属性(private)1.2子类可以通过super关键字来获取父类中定义的与子类同名的成员1.3子类可以通过默认的调用this或者super来调用父类的静态成员-----------------------------------------------------------------------------------------------2、函数2.1子类可以直接调用父类的非private的成员函数2.2子类可以定义和父类相同的函数,称之为覆盖(Override)|重写如果调用子类的函数,则执行子类重写后的函数,如果调用父类的使用super关键字。如:super.show()2.3子类中的函数不能使用this关键字调用自己(递归)2.4函数的重写需要函数的声明完全一致(包括函数的返回类型)2.5如果父类是静态的函数,那么子类也必须使用静态的函数进行重写,否则会访问父类的静态函数重写:(Override)1、函数名必须一致2、参数列表必须一致3、返回类型必须一致4、如果是static的必须相同5、修饰符只能大于等于父类父默认子默认public父public子public父private子不能继承6、子类抛出的异常必须小于等于父类的异常父A子A也可以抛出A的子类重载:(Overload)1、函数名要相同2、参数列表不同final:最终的、最后的作用范围:可以用来修饰类、函数、变量(成员变量、局部变量)修饰类:标志该类不能被继承;无法从最终Person进行继承什么样的类应该被修饰为final的?1.1所有的工具类应该被修饰为final(一般情况)1.2字符串类中所有方法都是对字符串进行操作的,那么其他的类进行重写是没有意义如果一个类的功能都是完成自身的对象的一些操作,那么该类也可以是final的如:String1.3如果该类的功能不需要被其他类进行继承(扩展)的化,那么也可以修饰为final修饰函数:标志函数不能被重写:Zi中的function()无法覆盖Fu中的function();被覆盖的方法为fi应用:当父类的功能和子类是一致的,而且不能让子类来重写,那么该函数就可以被final修饰修饰变量:成员变量:1.1如果final用来修饰成员变量,那么该变量就会变为常量,并且需要赋初始化值finaldoublemoney=34.0;1.2一旦给常量赋值了,那么该常量就不能被改变(值)局部变量:1.1当final修饰局部变量时,当作常量来使用1.2面试题:请问final是否可以修饰形式参数?yes为什么要使用final来修饰实参?因为该参数在局部的函数中不需要被修改,这样可以提高代码的效率注意:当类中定义了一个局部内部类,那么局部内部类中只能访问final的变量如:classA{voidshow(){inta=90;classB{//局部内部类//a=34;报错}}}抽象类:使用abstract修饰的类称之为抽象类特点:1、抽象类不能被直接实例化:是抽象的;无法对其进行实例化2、如果抽象类中有抽象的函数,那么继承该抽象类的子类必须实现父类的所有的抽象函数或者把自己(子类)也声明为抽象类3、包含抽象函数的一定是抽象类抽象类中不一定包含抽象函数4、只能被继承注意:定义抽象函数的时候,一定不能有{}其实{}代表实现,没有{}就是函数没有实现应用:1、当父类不确定子类的具体的实现方式时,可以将父类中的该函数定义为抽象的抽象==未知|不确定那么该类就一定是抽象类作用:1、可以将未知的实现抽取出来统一定义为抽象类2、可以强制子类实现父类没有实现的函数3、使用抽象类编程可以提高代码的扩展性模板设计模式:测试代码的执行时间:思想:代码执行前看表1代码执行后看表2看表2-看表1实现:看表模版方法设计模式:模版:1、根据具体的需求写出实现
本文标题:全面的面向对象知识点
链接地址:https://www.777doc.com/doc-4920846 .html