- 面向对象和面向过程的区别?
- 面向过程:主要关注的是,实现的具体过程,因果关系。
- 优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低。
- 缺点:采用面向过程方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致软件元素之间的“耦合度”非常高,只要有其中一个环节出现问题,整个系统受到影响,导致最终软件扩展力差。另外没有独立体的概念,所以无法达到组件复用。
- 面向对象:主要关注点是对象【独立体】,主要关注对象能完成哪些功能。
- 优点:耦合度低,扩展能力强。更容易解决现实世界当中更复杂的业务逻辑,组件复用性强。
- 缺点:前期投入成本高,需要进行独立体的封装抽取,大量的系统分析与设计。
- C语言是纯面向过程的、c++半面向对象、Java纯面向对象
- 面向过程:主要关注的是,实现的具体过程,因果关系。
- 面向对象的三大特征?
- 封装
- 继承
- 多态
- 采用面向对象的方式开发软件,生命周期当中:
- 面向对象的分析:OOA。一种分析方法。运用对象、类、继承、封装、聚合、关联、消息、多态性等面向对象概念进行系统分析,将问题域中的事物抽象为系统中的对象,识别对象的特征和各类对象之间的关系,建立一个映射问题域并能满足用户需求的面向对象分析模型,即OOA模型。
- 面向对象的设计:OOD。一种设计方法。通常是在面向对象分析基础上,针对具体的实现平台,运用面向对象概念进行系统设计,建立一个可在该平台上实现的面向对象设计模型,即OOD模型。
- 面向对象的编程:OOP。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。
- 类和对象的概念?
- 类:类在现实世界当中是不存在的,是一个模板是一个概念。是人类大脑思考抽象的结果。类代表一类事物。在现实世界当中,对象A与对象B之间具有共同特征,进行抽象总结出一个模板,这个模板称为类。
- 对象:对象是实际存在的个体。现实世界当中实际存在的。
- 类 –》对象:实例化(对象又被称为实例)
- 对象 –》类:抽象
- 类 {
属性;//描述对象的状态信息
方法;//描述对象的动作信息
}
状态和动作当具体到某个和对象上之后,发现最终的结果可能不一样。【对象和对象有共同特征,但是具体到对象之后有数据的差异】。
- 类的定义:语法结构
[修饰符列表] class 类名 {
类体;
}
- 自定义的类属于引用数据类型。
对象的创建和使用。
- 通过一个类可以实例化N个对象。
- 语法格式: new 类名();
- new是Java中的一个运算符,new运算符的作用是创建对象,在JVM堆内存当中开辟新的内存空间。
- 内存分配:
- 方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间当中。
- 栈内存(局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈。
- 堆内存:new的对象在堆内存中存储。
- Student s = new Student();【new Student()在堆内存中创建出来一个学生对象,并将这个对象的在堆中的内存地址赋值给左边的变量s】
- Student 是一个引用数据类型
- s是一个变量名,是一个引用,保存的是new Student()在堆内存中创建出来这个学生对象的内存地址。
- new Student()是一个学生对象
- 什么是对象?
- new 运算符在堆内存中开辟的内存空间称为对象。
- 什么是引用?
- 引用是一个变量,只不过这个变量中保存了一个Java对象的内存地址。
- Java程序员要想访问堆内存中的数据,必须通过引用的方式去访问。Java中没有指针,不像C语言。
- 访问实例变量的语法格式:“引用.变量名”。
- 局部变量在栈内存中存储,成员变量中的实例变量在堆内存中的Java对象内部存储。【实例变量是1个对象有一份100个对象有100份】。
- 编译器会关联编译,只编译一个Java文件,如果发现该Java文件中使用到了其他Java源文件的class文件。那么将会把其他使用到(并且可以找到)的Java源文件同时也进行编译。
- SUN写的String类特殊不用new也可以创建对象,例如:String name = “zhangsan”;【Java中只有String这一个类特殊】。
- 空引用(指向空对象【null】的变量)访问“实例”相关的数据一定会出现空指针异常:java.lang.NullPointerException。