面向过程 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关键字指定对象的属性,和形参做区分
}
}