JavaSE07 面向对象(OOP) 01
JavaSE07 面向对象(OOP) 01
Java的核心思想就是OOP
初始面向对象
面向过程&面向对象
面向过程思想
线性思维,步骤非常明确清晰。
面向过程思想: 步骤清晰简单,第一步做什么,第二步做什么
面向过程适合处理一些较为简单的问题。
面向对象思想
物以类聚,分类的思维模式。
思考问题会首先解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
面向对象适合处理复杂的问题,适合处理需要多人协作的问题。
面对复杂的事物,为了宏观上的把握,从整体层面合理分析。我们需要使用面向对象思想来分析整个系统。 然而具体到微观操作时,仍然需要面向过程的思路去处理 。
面向对象更像是整体设计的框架,面向过程是具体实现的流程。
什么是面向对象
面向对象编程(Object-Oriented Programming, OOP)
面向对象编程的本质就是以类的方式组织代码,以对象的形式封装数据。
抽象
将多个对象的共同点抽取出来,变成一个类。、
从认识论的角度考虑,是先有对象后有类。 对象是具体的事物。类是抽象的,是对对象的抽象。
从代码运行的角度考虑是先有类后有对象。类是对象的模板。
对象的创建分析
构造器
创建了一个类后,即使什么都不写,程序也会给该类创建一个空的方法,即为构造器,也称作构造方法。在使用new关键字的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及调用类中的构造器。
构造器要满足一下两个特点:
1.必须和类的名字相同。
2.必须没有返回类型,也不能写void
构造器的核心作用有两个:
1.使用new关键字,本质是在调用构造器,所以类必须有构造器,否则会报错。
2.用来初始化值。
默认构造器
类中如果没有定义构造器,程序会自动生成一个默认构造器。
public class Person{
//留空
}
class文件会显示为
public class Person{
public person(){
//自动创建的构造方法
}
}
无参构造
我们也可以显式定义一个构造器,常用于初始化一些默认信息。
public class Person{
public person{
this.name="小明"
}
}
有参构造
定义了有参构建器后,如果还想使用无参构造,无参构建器必须显式声明
public class Person{
public Person{}//显式声明无参构造
public Person (String s){
this.name=s
}//有参构造
}
创建对象的内存分析
内存管理
Java的内存管理中有分为堆、栈和方法区。方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择区进行垃圾收集或者进行压缩。所以往往把方法区视为独立于Java堆的内存空间。
类的初始化和静态方法
类在初始化时,内存会在方法区内储存,同时会一并初始化类中包含的静态方法,储存在静态方法区。类内存中的常量池内保存类的成员变量。
程序运行流程
程序的Main()方法会生成在栈中。当方法区内的类被new关键字调用构造的时候,会从方法区里的相应类内存中生成一个唯一的对象,并保存到堆中,且会在栈中创建指向到堆中内存的引用变量名。所有的对象属性会存在堆里相对应的内存空间里。
静态方法
静态方法会随着类在方法区中的初始化而初始化。使其可以被任何对象访问。