目录
1、面向过程和面向对象
- 面向过程:按步骤解决问题(开车)
- 面向对象:根据组成部分设计事物(造车)
- 面向对象具有三大特征:封装性、继承性和多态性
- 面向过程和面向对象都是解决问题的思维方式,都是代码组织的方式
- 解决简单问题一般使用面向过程的方式
- 解决复杂问题时宏观上需要使用面向对象的方式,但微观处理上仍然是面向过程
2、对象和类的概念
- 类:class
- 对象:Object,instance(实例)
- 类是模版,可以根据类的定义来造出对象,一般称对象是类的实例
- 类有三种常见成员:属性field、方法method、构造器constructor,都可以定义零个或多个
3、面向过程的内存分析
栈
- 栈的存储特性是“先进后出,后进先出”
- 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧
- 栈是由系统自动分配栈的一个连续的内存空间
- JVM为每个线程创建一个私有栈,用于存放该线程执行方法的信息,线程间不能共享
堆
- 堆本质是一个二叉树,是不连续的内存空间,分配灵活但速度慢
- 堆用于存储创建好的对象和数组(数组也是对象)
- JVM只有一个堆,被所有线程共享
方法区(静态区)
- 方法区实际也是堆(但和上文不是一个东西),JVM只有一个方法区,被所有线程共享
- 方法去用来存放程序中永远不变或唯一的内容,如类信息、静态变量、字符串常量等
4、构造方法
- 构造方法也叫构造器,是一个创建对象时会自动调用的特殊方法,目的是对象的初始化
- 构造器的名称应与类的名称一致
- Java通过new关键字来调用构造器,从而返回该类的实例
- 构造器虽然有返回值,但是不能定义返回值类型,也不能使用return
- 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数
- 构造方法也可以重载,用于创建参数不同的对象
class Point {
double x, y;
//构造器
public Point(double _x, double _y) {
x = _x;
y = _y;
}
//定义的方法
public double getDistance(Point p) {
return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
}
}
public class TestConstructor {
public static void main(String[] args) {
Point p = new Point(3.0, 4.0);
Point origin = new Point(0.0, 0.0);//生成对象
System.out.println(p.getDistance(origin));
}
}