Java语言是一种完全面向对象的的程序设计语言,面向对象编程主要有3个特征:封装,继承和多态。
面向对象思想概述
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。
可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了。这时就开始思索,
能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。
面向对象思想特点
- 是一种更符合我们思想习惯的思想
- 可以将复杂的的事情简单化
- 将我们从执行者变为指挥者
面向对象的特征
- 封装
- 继承
- 多态
类
类是一个抽象的概念,是一组相关属性和行为的集合,它定义了对象的本质。
类的定义格式:
<类声明>{
<类主体>
}
类的声明
格式:
<修饰符> class <类名>
类声明通过使用关键字class来定义类,类名是Java的合法标识符,应符合Java编程规范。
类主体
<类声明>{
<成员变量的声明>
<成员方法的声明及实现>
}
成员变量
成员变量是指在类中方法外的变量
定义格式:
[变量修饰符]<变量类型><变量名>
成员方法
成员方法是指在类中定义的方法
定义格式:
[方法修饰符]<方法返回值类型><方法名>(参数列表){
方法体;
}
成员变量和局部变量的区别
- 在类中位置不同
成员变量在类中方法外,而局部变量在方法定义中或方法声明中。 - 在内存中位置不同
成员变量在堆内存中,而局部变量在栈内存中。 - 生命周期不同
成员变量随着对象的创建而存在,对象的消失而消失。而局部变量随着方法的调用而存在,方法的调用完毕而消失。 - 初始化值不同
成员变量有默认值,而局部变量没有默认值。
注意:局部变量可以和成员变量重名,这时就要使用this来区分开来。
关键字this
当局部变量和成员变量重名时,局部变量会隐藏成员变量,这是由于就近原则而产生的问题。这时我们就要使用关键字this来区分成员变量和局部变量。
特点:
是当前类对象的引用。
简单来说,就是在方法中出现this就表明,那么该方法被谁调用,这个this就代表谁。意思是说,如果这个对象调用的方法中含有关键字this,那么这个对象的地址就传给this。
参数传递
基本类型:形参的改变不影响实参。
引用类型:形参的改变直接影响实参。
匿名对象
匿名对象指的是在创建一个对象时,没有为这个新建的对象起对象名。
作用:
- 如果一个对象仅调用一次方法时,可以使用匿名对象
- 匿名对象可以作为实参传递。
封装
面向对象编程的核心思想之一就是对数据和对数据的操作即方法封装在一起。通过抽象,从具体的实例中抽取共同的性质形成一般的概念(即类)。
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的好处:
- 隐藏实现细节,提供公共的访问方式
- 提高了代码的复用性
- 提高安全性
封装的原则:
- 将不对外提供的内容都隐藏起来
- 把属性隐藏,提供公共方法对其访问
关键字private
私有访问控制符private用来声明类的私有成员,它提供了最高的保护级别。用private修饰的成员变量或方法只能被该类自身所访问和修改,而不能被任何其他类获取和引用。
如果我们对成员变量用private修饰,可以定义set和get方法,这样在别的类可以通过调用这两个方法来获取和访问被私有的成员变量。
构造方法
构造方法用于生成一个对象实例,并对对象实例中的成员变量初始化。当用new创建一个类的新的对象时,构造方法立即执行。构造方法名字必须与类名相同。
定义格式:
public 类名(参数列表){
语句序列
}
注意事项:
- 构造犯法没有返回值类型,甚至没有void。其修饰符只能是访问控制修饰符,即public、private、protected中的任一个。
- 系统默认提供无参的构造方法,该方法根据成员变量的类型进行初始化
- 构造方法不能从父类继承
- 构造方法可以重载,一个类可以有任意多个构造方法
- 构造方法不能直接通过方法名引用,必须通过new运算符
- 在构造方法中可以调用当前类和其父类的另一个构造方法,但必须是方法体的第一条语句。使用当前类的构造方法用this来引用,使用其父类的构造方法用super来引用。
关键字static
static可以用来修饰类的成员变量或成员方法,分别称为类变量(静态变量)和类方法(静态方法)。相应地,没有被static修饰的类的成员变量或成员方法称为实例变量或实例方法。
特点:
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象共享
- 可以直接通过类名调用
注意事项:
- 被static修饰的成员变量和成员方法会存在于方法区中的静态区
- 类方法中不能有this的出现,因为this是随着对象的创建而存在,而静态是优先于对象
- 静态方法只能访问静态变量,而非静态方法既可以访问静态变量,也可以访问非静态变量
静态变量和成员变量的区别
- 在内存中的位置不同
静态变量在方法区中的静态区,而成员变量在堆内存 - 所属不同
静态变量属于类,成员变量属于对象 - 内存出现时间不同
静态变量随着类的加载而存在,随着类的消失而消失。成员变量随着对象的创建而存在,随着对象的消失而消失 - 调用不同
静态变量可以通过类名调用,也可以用对象名调用。而成员变量只能用对象名调用。