欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面向对象编程(类和对象、构造方法、关键字this)

程序员文章站 2022-03-03 10:36:41
1.面向过程和面向对象面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。...



面向过程和面向对象

面向过程和面向对象都是对软件分析、设计和开发的一种思想。它指导着人们以不同的方式去分析、设计和开发软件。

1.面向过程和面向对象的总结

  • 都是解决问题的思维方式,都是代码组织的方式。
  • 面向过程是一种“执行者思维”,解决简单问题可以使用面向过程。
  • 面向对象是一种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象。
  • 面向对象离不开面向过程:
    • 宏观上:通过面向对象进行整理设计。
    • 微观上:执行和处理数据,仍然是面向过程。

1.1面向过程和面向对象的区别和联系

早期先有的面向过程的思想,随着软件规模的扩大,问题复杂性渐渐提高,面向过程的弊端越来越明显的显示出来,然后出现了面向对象思想并成为目前主流的方式。
所以面向对象和面向过程的区别在于:面向过程更适合用在简单的,可以用线性思维解决的事物。而比较复杂,使用线性思维无法解决的事物责更适合使用面向对象思维解决。
面向过程和面向对象都是解决实际问题的一种思维方式,二者线相辅相成,并不对立。解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析这个系统;但是具体到微观操作,仍然需要使用面向过程方式来处理。
面向对象编程(类和对象、构造方法、关键字this)

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关键字可以调用成员变量。例如:this.name

3.构造方法及构造方法重载

3.1构造方法

构造方法也叫构造器,用于对象的初始化。构造器是一个创建对象时自动调用的特殊方法,目的是对象的初始化。构造器的名称应该与类名一致(首字母大写)。Java通过new关键字调用构造器从而返回该类的实例。

构造方法的4个要点:
构造方法的方法名必须与类名一致。
构造方法通过new关键字调用。
构造方法不能定义返回值类型。
如果没有定义构造方法,编译器会自动定义一个无参数的构造方法,如果已经定义构造方法编译器不会自动添加。(所以当我们创建了有参数的构造方法,并且需要无参构造方法时需要手动创建无参数构造方法。)

创建一个对象的步骤

  1. 分配对象空间,并将对象成员变量初始化为0或null。
  2. 执行属性值的显示初始化。
  3. 执行构造方法。
  4. 返回对象地址给相关变量。

3.2构造方法的重载

构造方法的重载和普通方法的重载基本相同。
举个栗子
面向对象编程(类和对象、构造方法、关键字this)

 //构造方法 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