面向对象和面向过程:
面向对象: 面向对象和面向过程都是解决实际问题的一种思维方式 。 在java 中 面向对象是一种编程思想 ,在现实中面向对象 最符合人 解决问题的思维方式。
面向过程: 强调每一个功能的实现步骤和实现细节
面向对象: 强调的是对象,然后,由对象去调用它的功能 ,对于功能是如何实现的不需要管。
关系: 面向对象是基于面向过程的,没有面向过程,就没有面向对象 。
分析: 面向对象 更符合人的思维方式 可以将复杂的问题 变得简单 ,你从一个执行者 变成了指挥者 , 所以面向对象非常适合解决复杂的繁琐的问题 ,而面向过程就不适合解决复杂繁琐的问题。
面向对象离不开面向过程 ,你用面向对象的 思维去解决问题,是因为 你所面向的对象用了面向过程的方式解决问题。
java语言中 ,java应用是为了模拟现实中的场景,要符合现实的逻辑 。 用数据 + 指令的形式来模拟现实。
编写java 程序 的本质就是创建对象,调用对象的方法(功能) 帮你实现逻辑。 数据 可以封装到对象中。表现形式 就是类中定义的变量 ,指令 就相当于 对象的方法,或者 说 指令就是 对象方法中封装的 程序代码。
类和对象:
类:是一个抽象的概念 是一组行为和属性(也就是方法和变量) 的 集合
对象: 是一个具体的事物或者说是一个类的具体的个体 、具体的实现、具体存在的属于这个类的个体 。
在java中,通过类和对象描述现实中的抽象概念和具体事物。
创建类: 根据需求分析 ,业务场景, 需要什么对象 , 然后 ,根据这个对象来分析 , 把这个对象的共性抽取出来,抽象出一个概念 ,那这个概念 用 java语言来表示就是一个java 类 。 体现形式就是创建了 一个 class 这个类用来描述事物。
创建对象:先创建好类 ,也就是描述对象的一个抽象概念,+++++ 然后根据这个类 来创建这个类的 对象 (也叫创建这个类的实例)
因为在类中定义的属性 和行为(非静态的) 是属于具体实例的, 需要由这个具体的实例 访问属性和 调用方法。 换句话说类中定义的属性和行为(非静态的) 离开对象就没有意义
具体创建的语法
类名 对象名 (引用变量) = new 类名(); 类比 int[] arr = new int[2];
= 左边: 类名 对象名 本质就是声明了一个 类类型(引用类型)的变量 类名 就是 类型 对象名 就是引用变量 引用一个对象 它的值就是
它引用的对象的内存地址值
= 右边: new 这个关键字 1.为创建的对象 分配内存空间 2. 并给对象的成员变量 赋初始值 3.把对象的内存地址值 返回给引用变量
在这 类名() 实际上 是 调用了 类的无参构造方法 因为 构造方法名 和 类名是一样的
对象创建好了, 就有对象可以面对了, 就是访问对象的属性和调用对象的方法。
对象名.属性 当前 可以通过. 运算符 来 访问属性 后面 封装 就不这样访问了。
对象名.方法 对象 调用方法
类:
变量
方法
构造方法
代码块
内部类
当前创建对象的方式 是 通过 new 关键字 调用 构造方法 所以咱们说 构造方法的 是用来 创建对象 用的
new关键字:
1. 为对象分配内存空间 将对象的实例变量 初始化 自动初始化为其对应类型的默认值
2. 如果 实例变量在声明时 被显示初始化 那就把显示初始化的值 赋值给实例变量
3. 调用了构造方法
4. 返回对象的引用 就是将对象的内存地址赋值给引用变量 咱们就可以通过操作引用变量 来操作对象了 ,引用变量不是对象
(但是为了好描述 咱们可以把引用变量称为对象)
构造方法(构造函数 构造器): 是一个在创建对象时,被自动调用来完成 对象 ,初始化的特殊方法。
作用: 初始化对象
是一种比较特殊的方法
方法名 和类名一致
虽然有返回值 但是不能定义返回值类型 因为返回值类型肯定是本类 不能在构造方法中 使用 return 关键字
可以通过 new 关键字 调用
注意: 如果 我们没有在一个类中 显式的定义构造方法 那么 虚拟机会自动的给这个类 定义一个 默认的无参构造方法
只有当一个类中 没有显式的定义构造方法时 jvm 才会给这个类添加 默认无参构造
一个类中 可以定义多个构造方法 这叫 方法重载