面向过程 vs. 面向对象

面向过程

  • 步骤清晰简单,第一步,第二步...
  • 适合处理一些简单的问题

面向对象(Object Oriented Programming,OOP)

  • 解决问题时首先思考问题可以怎么分类,然后对这些分类进行单独思考,最后才对具体的细节进行面向过程编程
  • 使用面向对象的思路来分析整个系统,从宏观上把握,从整体上合理分析;但具体到微观操作,仍然需要面向过程的思路去处理
  • 面向对象的本质就是:以类的方式组织代码,以对象的组织封装数据
  • 适合处理复杂的大问题

类与对象

  • 类是一种抽象的数据类型,它是对某一类事物整体的定义,但并不能代表某一个具体的事物
  • 如Person类、Pet类、Car类...

对象

  • 对象是抽象概念的具体实例
  • 如张三就是人的一个具体实例,哈士奇就是宠物的一个具体实例

从认知角度,先有对象后有类。对象,是具体的事物;类,是对对象的抽象

从代码运行角度,先有类后有对象。类是对象的模板

类与对象的创建

new关键字

使用new关键字创建对象时,除了分配内存空间之外,还会给对象进行默认的初始化以及对类中构造器的调用

public class Hello {
//一个项目应该只有一个main方法
public static void main(String[] args) {
//类实例化后会返回一个自己的对象
//xm对象就是Student类的具体实例
Student xm = new Student();
xm.name = "小明";
xm.age = 3;
xm.print();
}
}
//创建学生类,抽象的
class Student{
//属性
String name;
int age;
//方法
public void print(){
System.out.println(name + " " + age + "岁");
}
}


构造器

类中的构造器也称为构造方法,是在进行创建对象时必须要调用的。构造器具有以下两个特点:

  • 必须和类的名字相同
  • 必须没有返回值类型,也不能写void

.java文件

public class Hello {
//一个项目应该只有一个main方法
public static void main(String[] args) {
//new 实例化了一个对象
Student student = new Student();
}
}
//创建学生类,抽象的
class Student{

}


Student.class文件反编译

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

class Student {
Student() { //可以看到创建类时,隐式定义了一个方法,其名字和类名一致,无参且没有返回值,这就是构造方法
}
}


new对象和构造器的关系

public class Hello {
//一个项目应该只有一个main方法
public static void main(String[] args) {
//new 实例化了一个对象
Student student = new Student();
System.out.println(student.name);
}
}
//创建学生类,抽象的
class Student{
String name;
int age;
//1. new对象时,其本质是在调用构造器,其是隐式定义的
//2. 构造器一般用来初始化值
Student(){
this.name = "ty";
}
//如果重载了一个有参构造器,则默认的无参构造器必须显示定义,否则无效,快捷键alt + insert
Student(int age){
this.age = age; //this关键字指定对象的属性,和形参做区分
}
}