流行的编程思维_面向对象-1
问题:
- java面向对象的特征有哪些?
- 面向对象与面向过程的区别是什么?
- 基本数据类型与引用类型的区别有哪些?
- 方法重载和方法重写的区别是什么?
说到面向对象,就得和比较一下面向过程
-
面向过程是结构化开发,面向功能划分的软件结构
-
从上到下,按步执行,最小的粒度是方法
-
代码一次成型,后续修改非常麻烦,
-
制约了软件的可维护性和可扩展性
面向对象开发
- 把软件系统看成各种对象的集合
- 系统结构稳定,由于java是单继承,可以多实现接口(特殊的抽象类)就多态了。
- 子系统相对独立,由于面向对象有封装的特性。
- 软件的可维护性,可扩展性强,由于面向对象有继承,多态的特性。
面向过程编程关注点在于每一个细节,每一步的具体操作。
面向对象关注点在于整个事件的参与对象,将系统中的
参与者全部看成模块化的对象。
面向对象程序设计(Object Oriented Programming)OOP
就是把世间万物都看成一个个对象,
OOP是一种编程思想,思维模式,将程序中的所有参与者
模块化为对象,然后通过各种对象之间的相互作用关系来
完成程序的需求。
类和对象
-
类的静态特征通过属性来描述
- 成员变量:定义在类中,方法体外的变量,属性,在堆中,会默认赋初值,作用域在整个类可见。
- 局部变量:定义在方法体中的变量,在栈中,不会默认赋初值。double float:0.0
-
类的动态功能通过方法来描述
- 访问权限修饰符(public) 返回值类型(int) 方法名(参数列表-实质上是一个数组)
- 方法重载-只在一个类中,重写-继承-接口,关系两个以上类
-
每一个类都有一个默认的无参构造方法,该方法不需要创建,由类自动生成。
- this(参数):只能在构造方法中使用,不能在普通方法中使用,并且必须写在构造方法的第一行。
-
如果手动在类中创建一个有参构造,会将默认的无参构造抹掉
-
类是静态的,写完之后就存在于硬盘中。
- this关键字:指当前类
- JVM中类只有一份,对象有多份。
-
对象是动态的,随着程序的运行而创建,同时随着程序的关闭而销毁。
- 垃圾回收机制GC:是一个独立的巡查线程,GC是一个定时任务,隔一段时间执行一次。
GC线程随着main线程创建,也随main线程销毁而销毁。
- 垃圾回收机制GC:是一个独立的巡查线程,GC是一个定时任务,隔一段时间执行一次。
基本数据类型与引用类型
基本数据在栈内存中开辟空间,同时直接将具体数值保存在栈中。
引用类型在栈中开辟空间,同时在堆中创建对象,将堆内存的地址保存在栈中,初始值都是null。
静态static
类是构成Java程序的单位,Java程序通过类来组织其结构。
对象是Java程序在运行时的单位,运行期间的Java程序是通过多个对象之间的相互作用关系来完成需求,动态。
开发代码时,是通过编写类来完成程序的需求。
程序在运行期:1.将编写好的类加载到JVM中,有了模版。
2.根据需求通过模版(类)来创建对应的对象,完成业务需求。
public class Application {
//只有静态成员变量(类的所以对象共享),没有静态局部变量
static int a;
//1
static {
System.out.println("JVM在类初始化的时候只加载一次");
}
//2
{
}
//3
public Application(){
}
}
独占区就是线程自己的方法栈,线程公享区指的是方法区和堆。实例方法存储在方法栈中,静态方法存储在方法区中。
对于线程来说,线程中有多个类的对象,共享区确实是堆和方法区