面向对象
什么是面向对象?
就像是一个执行者,强调什么人做的,把任务都分配给每
一个人,每一个人都完成一部分,注重谁来做,重在找“参与者”,强调具备功能的对象,以类/对象为最小单位。
什么是面向过程?(常见编程语言:C语言等等···)
对于简单的事情,就按照每一步具体的步骤来做,按照步骤一步一步往下做,重在过程,需要知道每一步怎么往下做,注重参与的过程。注重过程中的具体的行为,以函数为单位。
(面向过程–>面向对象)就是(执行者–>指挥者)的过渡。
- 什么是类?
类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。
自我理解:所有物体共同具有的特征,在程序中把每一个代码共有的东西都归纳到一起,叫做类;类的属性不是对象
类就是对对象向上抽取象的部分,形成类,类就是一个模板。
- 什么是对象?
对象就是一个真实世界中的实体,对象与实体是一一对应关系的,意思就是现实世界的每一个实体都是一个对象,所以对象是一个具体的概念。
万事万物都是对象,对象是具体的事物,也是实物。
面向对象的三个阶段:
- 面向对象分析—- Object Oriented Analysis
- 面向对象设计—-Object Oriented Design
- 面向对象编程—-Object Oriented Programming
类与对象的区别:
1,类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
2,对象是类的一个具体。它是一个实实在在存在的东西。
3,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。
4,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
方法的重载
方法名相同但形参列表不同(个数不同、类型不同、顺序不同),在调用方法时率先调用相同类型的数据类型,多个方法调用时,按照顺序调用(char,byte,short < int < long < false < double)。
方法的递归
在一个方法中调用自身的方法。
调用自身的方法,但必须要有结束条件语句,
类的创建、对象的创建及其内存分析
- 属性
定义该类或该类对象包含的数据或者说静态特征,当以对象的特性。作用范围整个类体。
定义格式:
【修饰符】+属性类型=【默认值】;
- 方法
定义该类或该类实例的行为和功能的实现。方法是类和对象行为特征的抽象。
【修饰符】+方法返回类型+方法名(形参列表){
执行语句
}。void代表没有返回值。
方法的作用:重写代码,封装功能,便于修改。
- 放在方法外的叫成员变量,放在方法里的叫局部变量。
- 在调用定义的类中方法时,需要用到类名开辟空间( 类名+对象名=new+类名【类名+对象名=new+类名】)及其运用,
- 不同对象都有自己特有的值,都可以调用类中的通用方法,
- 第一次创建对象时,第一次类会加载一次,在未给对象的属性赋值时,有自己默认的初始化值。之后的类不会再加载。
- 局部变量与成员变量的区别:
- 局部变量在方法中、在代码块中,访问局部变量时只能在就近{ }可以访问,局部变量(没有默认值)必须给初始化值;成员变量在类中、方法外,成员变量在类中任何位置都可以访问,成员变量有(默认值)可以不给初始化值,后续使用时再赋值。
- 局部变量:作用于当前方法中(代码块中)
成员变量:作用于整个类中的方法
-
- 局部变量在栈内存中
成员变量在堆内存中
-
- 成员变量的作用时间:从当前对象创建到销毁
局部变量的作用时间:当前方法的执行到结束
- 引用数据类型,默认值时null。
- 局部变量放在栈中,栈中存在堆给的地址,堆中的内存是参照方法区来开辟的,栈中存放局部变量,堆中存放new出来的对象,方法区中存放字节码信息。
类的创建及对象的创建
- 类的格式:
【修饰符】+类名【extends+父名】+【implements+接口名】{
//类体,包括类的成员变量和成员方法
}
- 对象的格式:
类名+对象名 = new+类名();
- A类和B类之间可以相互作为成员变量,用A类名作为数据类型+变量名a(也可以作为B类的属性),然后用变量名a . A类的属性,进行访问,。
构造器(构造方法)
- 如果你没有写入构造器,那系统会给分配一个构造器。而自己可以把构造器编写出来,那系统就会进入到自己写的构造器里面去。
- 构造器的格式:
[修饰符]+构造器名(){
方法体
}
构造器与方法的区别:
-
- 构造器里面没有方法的返回值类型
- 构造器里面的方法体不能有return语句
- 构造器的名字很特殊—必须与类名一模一样
- 在构造器里面可以对类的属性进行赋值操作
- 构造器的作用:
不是为了构造对象,因为在调用构造器之前,这个对象就已经创建好了,并且苏还行有默认的初始化的值。在
调用构造器的目的是给属性进行赋值操作的
注意:一般不会对空构造器进行赋值操作(初始化操作),否则每一个对象的属性都是一样的。
- 构造器要把它写在那里不用进行初始化操作,如果不写在以后的学习中可能会报错,所以最好把它写在那里。 写在哪里都ok。
- 在重载构造器(跟方法的重载类似——形参不同就ok)中进行属性赋值。
- 在重载构造器后,假如空构造器忘写了,那系统也不会分配构造器。则调用构造器就会出错。重载构造器就是为了给成员变量(对象的属性)进行初始化。
- 当形参名字与属性名字一样时,程序有就近原则,指向最近且相同类型的。
- 在属性名字前加上this,则可以指向属性。
- 构造器会在栈中有一个此构造器的栈帧,在调用时基本数据类型直接传递进行赋值,而引用数据类型会来方法区中有一个常量池,把相应的值放在常量池中,常量池的空间会有两个位置指向值此位置,在栈帧中开辟的方法空间和构造器空间都要消失,main方法的栈帧不会消失而在堆中被mian方法指向的空间也不会消失。
this关键字
指代当前的对象(正在构建的对象或者正在使用的对象),在方法中可以访问对象的其他成员。
用法:
1、this.可以修饰属性,成员变量与局部变量名字冲突可以使用this.。
- 在同一类中时方法可以互相调用,此时this.可以省略写。
- 同一类中的构造器可以用this相互调用,其是修饰构造器,但用this修饰构造器必须放在此构造器(在这个构造器中调用其他构造器)的第一行。
static关键字
- 可以修饰属性、方法、代码块、内部类。不能修饰构造器
- 在类加载的时候,会将静态内容加载到方法区的静态域中,(静态内容优先于对象存在)(此静态内容被类其他对象共享)
- 可以通过类名.属性名的方式区访问static修饰的属性
- static修饰属性的应用场景:某些特定的数据 想要在内存中共享,可用static修饰。
- 属性分为:静态属性(类变量)和非静态属性(实例变量)。
- static修饰方法时只能访问被修饰的属性(在静态的方法中不能访问非静态的属性)。
- 在静态的方法中不能访问非静态的方法。在静态方法中不能使用this。
- 非静态的方法需要创建对象来访问类中的方法,而静态的方法可以直接用类名来访问或者使用对象名。
对象名.方法名 或 类名. 方法名(推荐)
调用方法
protected关键字
被protected修饰的类的成员既可以被同包下的类访问,又可以被其他包下的类访问。
default关键字
在接口中被default修饰的方法叫默认方法,用于接口中。
代码块
- 分类:普通块、构造块、静态块、同步块(多线程)
- 普通块在方法里面,构造块在方法外面(解决在方法外写代码的问题)
- 在构造块前加个static就是静态块了。优先执行静态块,在以后实战中一般把工厂、数据库的初始化信息。
- 顺序:静态块(常用)→构造块(不常用)→构造器→方法中的普通块。
包的作用
- 为了解决类名重名的问题
- 名字全部都是小写,不能是关键字,一般都是公司域名倒着写用.连接。
- 在使用其他包下的类需要导包操作。
- 想使用其他包下的同名类需要手动写所在的包。
- 在使用系统的包时可以使用*,代表此包下所有类
- 导包时都是平级关系。
- 静态导入:
import static 包名位置.*(*代表此包下所有的类)
类的封装
在属性的前面用private进行修饰,即在调用的时候不能被调用,会出错。但可以在类里面用public修饰的方法来调用此属性,从而实现在对象里面间接得到调用。
用快捷键自动生成方法名:alt+insert
类的继承
格式:
【修饰符】+class+子类名+extends+父名{}
在继承中不允许多重继承,只能单层继承,一个类被多个子类继承。可以多层继承,例如:A→B→C,一层一层继承下去。
重写父类方法:
名字一样只要更改方法体。
- 继承只能继承父类的属性不能继承父类属性里的具体实例。
- 子类继承父类的构造方法在使用super时,如果直接创建对象(子类名+对象名 = new 子类名)则默认为父类的第一个构造方法。
- 一个类可以作为另一个类的成员变量,就是引用数据类型。一个类作为另一个类的属性/形参
- 如果你在用其他类时作为引用数据类型,要进行实例化(要有具体的东西)才能使用,否则会报错(空指针异常)。类+对象名 = new+类
- 子类满意父类的方法则不用重写,不满意则要重写父类方法。
类与类的关系
(Null Pointer Exception—“空指针异常”)
- 将一个类作为另一个类的中方法的形参(形式参数)
- 空指针异常———要有实际赋值。要有具体的东西。
相应的案例
super关键字
调用父类的成员变量和成员方法的格式:
super.成员变量
super.成员方法名([参数1,参数2,参数3,……)
通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
1、在使用super调用父类的方法或者属性都要在子类的方法中去调用。
final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
- 声明类:
final class 类名 {//类体}
- 声明方法:
修饰符(public/private/default/protected)
final 返回值类型 方法名(){
//方法体}
注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final
- 只要被final修饰的类/方法/变量都不能继承/修改。
instanceof关键字
作用:解决两个类,一个类是否可以为另一个类的实例对象或者子类对象。
格式:
对象(对象引用变量) instanceof 类(接口)返回的值是Boolean类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/120314.html