● 面向对象 (Object Oriented Programming):将功能封装进对象,强调具备了功能的对象(用类组织代码,将事物共有的特征提取出来,易于代码维护和扩展)
● 面向过程 ( procedure oriented programming ):强调的是功能行为(用方法组织代码,符合基本思维,但代码不易于维护和扩展)
------------------------------------------------------------------------------------------------------------------
面向对象的思想概述:
程序员从执行者转化成了指挥者:
● 完成需求时,先去找具有所需功能的对象,如果该对象不存在,那么创建一个具有所需功能的对象。这样简化开发并提高复用
类(class)和对象(object)是面向对象的核心概念:
● 类是对一类事物描述,是抽象的、概念上的定义
● 对象是实际存在的该类事物的个体,因而也称实例
注意:类是对象的模板,对象是类的具体实现。面向对象程序设计的重点是类的设计,定义类其实是定义类中的成员(成员变量和成员方法)
------------------------------------------------------------------------------------------------------------------
面向对象思想“落地”法则:
● 关注于类的设计 ,即设计类的成员:属性 、方法
● 类的实例化 ,即创建类的对象
● 通过“对象名.属性”、“对象名.方法”执行
------------------------------------------------------------------------------------------------------------------
java类及类的成员: (代码是由多个不同功能的类构成。类又由属性、行为和构造器构成)
● 属性 :定义在类中的变量。其定义在类中,方法之外叫成员变量(也叫全局变量),定义在方法中叫局部变量
● 行为 :定义在类中的成员方法(也叫功能、函数)
● 构造器 :用来创建对象的方法(也叫构造函数或者构造方法)
语法:
例子:
注意:不写修饰符表示为缺省的
------------------------------------------------------------------------------------------------------------------
类的成员之一: ( 属性:成员变量和局部变量 )
------------------------------------------------------------------------------------------------------------------
类的成员之二: ( 方法:指完成某个功能 )
● 形参 :接收传入值的参数
● 实参 :调用方法时传入的值(具体的值,变量的值,函数的返回值等)
● 参数类型 :该形参的数据类型
● 返回值 :方法在执行完毕后返回的数据
● 返回值类型 :方法执行完毕后返回数据的数据类型
注意:Java里的方法不能独立存在,必须定义在类中。定义方法要明确完成的功能,建议一个方法,完成一件事。如果有返回值,返回值的类型必须和定义方法时的返回值数据类型相兼容,如果没有返回值,返回值类型用关键字void表示,return语句可以省略不写。在方法内可以直接调用所在类中的方法,不需要声明对象。不能在方法内部定义方法
------------------------------------------------------------------------------------------------------------------
方法的重载: (overload, 同一个类中,存在两个及以上的同名方法,它们的参数个数或者参数类型不同 )
注意:与返回值,权限修饰符,参数名称无关
------------------------------------------------------------------------------------------------------------------
可变参数: (传入参数为指定数据类型的参数个数是可变多个)
● 声明方式: 方法名(参数的数据类型...参数名)
注意:方法的参数部分有可变形参,需要放在形参声明的最后
------------------------------------------------------------------------------------------------------------------
类的成员之三: ( 构造器:创建对象,给对象进行初始化 )
● 具有与类相同的名称
● 不声明返回值类型
● 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
● 根据参数不同,构造器可以分为无参、有参构造器
注意:每个类至少有一个构造器,当没有显示定义时,使用系统默认的无参构造器。一旦显式定义了构造器,则系统不再提供默认构造器,为避免后期出问题,我们大多显示的定义一个无参构造器,类中可以有多个构造器(多个构造器之间是构造器的重载关系),父类的构造器不可被子类继承
------------------------------------------------------------------------------------------------------------------
构造器重载:
● 构造器名称必须相同
● 参数列表不同(参数的个数不同,参数的类型不同)
注意:与形参名无关。形参名和成员变量名相同,如果没有使用this关键字,那么表示使用的是形参的值
------------------------------------------------------------------------------------------------------------------
类的成员之四:(代码块:可以有输出语句,对类的属性进行初始化操作)
静态代码块:(用static修饰的代码块)
● 不可以调用非静态的属性和方法
● 若有多个静态的代码块,那么按照从上到下的顺序依次执行
● 静态代码块的执行要先于非静态代码块
● 静态代码块只执行一次
非静态代码块:(没有static修饰的代码块)
● 可以调用静态的变量或方法
● 若有多个非静态的代码块,那么按照从上到下的顺序依次执行
● 每次创建对象的时候,都会执行一次。且先于构造器执行
------------------------------------------------------------------------------------------------------------------
类的成员之五:(内部类:一个类中声明有其他类的定义语句)
● 内部类中可以定义和外部类一样的内容(属性、方法、构造器、代码块、内部类)
● 内部类中的代码块如果是静态的,那么这个内部类也必须是静态的(不能使用外部类的非static的成员)
------------------------------------------------------------------------------------------------------------------
匿名内部类:
● 语法:new 父类构造器(实参列表)|实现接口(){ //匿名内部类的类体部分}
注意:匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类
------------------------------------------------------------------------------------------------------------------
对象的创建和使用:(在需要使用某个类中的属性或者方法时就需要构建当前类的对象出来)
● 语法:类名称 对象名 = new 类名称();
● 语法:“对象名.对象成员”的方式访问对象成员(包括属性和方法)
● 语法:“类名称.对象成员”直接调用,不需要创建对象;(静态方法:Static修饰的内容)
注意:使用new构造器创建对象。每个类的对象都具有独立的属性。一个类如果有多个对象,每个对象的属性互不影响。当对象创建时,生命周期开始,当离开作用域时,生命周期结束
------------------------------------------------------------------------------------------------------------------
类的访问机制:
● 同一个类中:方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过)
● 不同的类中:先创建要访问类的对象,再用对象访问类中定义的成员
------------------------------------------------------------------------------------------------------------------
对象的产生:
当对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型,如上面的Person及前面讲过的数组
------------------------------------------------------------------------------------------------------------------
内存结构:
------------------------------------------------------------------------------------------------------------------
匿名对象 :(如:new Person().info())
● 不创建对象,直接调用这个对象的方法。这样的对象叫做匿名对象
● 使用情况:一个对象只需要进行一次方法调用,那么就可以使用匿名对象
------------------------------------------------------------------------------------------------------------------