面向对象编程(类和对象、构造方法、关键字this)
面向对象编程知识点整理1
面向过程和面向对象
面向过程和面向对象都是对软件分析、设计和开发的一种思想。它指导着人们以不同的方式去分析、设计和开发软件。
1.面向过程和面向对象的总结
- 都是解决问题的思维方式,都是代码组织的方式。
- 面向过程是一种“执行者思维”,解决简单问题可以使用面向过程。
- 面向对象是一种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象。
-
面向对象离不开面向过程:
- 宏观上:通过面向对象进行整理设计。
- 微观上:执行和处理数据,仍然是面向过程。
1.1面向过程和面向对象的区别和联系
早期先有的面向过程的思想,随着软件规模的扩大,问题复杂性渐渐提高,面向过程的弊端越来越明显的显示出来,然后出现了面向对象思想并成为目前主流的方式。
所以面向对象和面向过程的区别在于:面向过程更适合用在简单的,可以用线性思维解决的事物。而比较复杂,使用线性思维无法解决的事物责更适合使用面向对象思维解决。
面向过程和面向对象都是解决实际问题的一种思维方式,二者线相辅相成,并不对立。解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析这个系统;但是具体到微观操作,仍然需要使用面向过程方式来处理。
2.类和对象
- 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
- 类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。
例如,月饼模具和月饼。月饼模具可以看做是一个类,而月饼就是右月饼模具类实例出来的对象。
/**
* 创建一个 人 类
*/ public class Person { //成员属性 姓名,性别,年龄是所有对象“人”的共同属性 String name; String sex; int age; //构造方法 public Person(String name, String sex, int age) { this.name = name; this.sex = sex; this.age = age; } public Person() { } //成员方法 //吃饭,和睡觉是所有对象”人“都有的行为 public void sleep(){ System.out.println("睡觉"); } public void eat(){ System.out.println("吃东西"); } } public class Test { public static void main(String[] args) { //由Person类实例的对象p1,p2,p3 Person p1 = new Person("小明","男",18); Person p2 = new Person("小红","女",16); Person p3 = new Person("张大炮","男",23); //他们都可以执行Person类的方法 p1.eat(); p2.eat(); p3.eat(); } }
2.1对象的一些操作方法
-
如何创建对象
- Scanner input = new Scanner(System.in);
- Person p1 = new Person();
-
如何操作属性 对象名.属性名
- p1.name = “张二炮”;
- p1.age = 18;
-
如何调用方法 对象名.方法名
- p1.eat();
- p1.sleep();
2.2成员变量和局部变量
在类中定义的变量叫成员变量,在方法中(包括方法的参数,代码块中)定义的变量叫做局部变量。两者主要区别有
-
- 代码中位置不同
- 成员变量定义在类中,局部变量定义在方法中。
-
- 内存中位置不同
- 成员变量在堆内存中,局部变量在栈内存中。
-
- 是否有默认值
- 成员变量有默认值,局部变量没有默认值。
-
- 代码作用范围不同
- 成员变量作用范围在当前类的方法,局部变量作用范围在所属方法或代码块中。
-
- 生命周期不同
- 成员变量生命周期与所属类生成的对象声明周期相同,局部变量生命周期与所属方法或代码块相同。
补充:当成员变量与局部变量相同时,会优先调用局部变量。使用this关键字可以调用成员变量。例如:this.name
3.构造方法及构造方法重载
3.1构造方法
构造方法也叫构造器,用于对象的初始化。构造器是一个创建对象时自动调用的特殊方法,目的是对象的初始化。构造器的名称应该与类名一致(首字母大写)。Java通过new关键字调用构造器从而返回该类的实例。
- 构造方法的4个要点:
- 构造方法的方法名必须与类名一致。
- 构造方法通过new关键字调用。
- 构造方法不能定义返回值类型。
- 如果没有定义构造方法,编译器会自动定义一个无参数的构造方法,如果已经定义构造方法编译器不会自动添加。(所以当我们创建了有参数的构造方法,并且需要无参构造方法时需要手动创建无参数构造方法。)
创建一个对象的步骤
- 分配对象空间,并将对象成员变量初始化为0或null。
- 执行属性值的显示初始化。
- 执行构造方法。
- 返回对象地址给相关变量。
3.2构造方法的重载
构造方法的重载和普通方法的重载基本相同。
举个栗子
//构造方法 public Person() { } public Person(String name, String sex, int age) { this.name = name; this.sex = sex; this.age = age; }
4.关键字this
this的本质就是“创建好的对象的地址”,由于在构造方法调用钱,对象已经创建。所以,在构造方法中也可以使用this代表“当前对象”。
4.1 this的用法
- 调用成员变量 this.name
- 如果成员变量和局部变量同名,可以用this来区分两者。如果没有同名的局部变量,可以不写。
- 调用成员方法 this.eat()
- 这种情况下,this可以直接省略。
- 调用构造方法 this(…)
- 使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中使用,并且必须位于构造方法的第一句。
- this不能用于static方法中。
- 因为static修饰过的方法不依赖于对象,所以调用static方法时,对象可能并没有创建,也就没有this被创建。
5.声明
文档来源于“北京尚学堂”,本人只进行了知识点的整理,目的在方便自己。
本文地址:https://blog.csdn.net/weixin_45451375/article/details/108258844
上一篇: ABTEST实验平台
下一篇: 面向对象三大特性介绍