java知识点7——面向过程和面向对象、面向对象的内存分析、构造方法

面向过程和面向对象

  • 解决简单问题可以使用面向过程
  • 解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。
  • 面向对象具有三大特征:封装性、继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能。所以面向对象优势更明显。

属性(field,或者叫成员变量)

  • 属性用于定义该类或该类对象包含的数据或者说静态特征
  • 属性作用范围是整个类体


面向对象的内存分析

  • Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area
  • 栈的特点如下:

        1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)

        2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)

   3. 栈属于线程私有,不能实现线程间的共享!

        5. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

  • 堆的特点如下:

  1. 堆用于存储创建好的对象和数组(数组也是对象)

  2. JVM只有一个堆,被所有线程共享

  3. 堆是一个不连续的内存空间,分配灵活,速度慢!

  • 方法区(又叫静态区)特点如下:

  1. JVM只有一个方法区,被所有线程共享!

  2. 方法区实际也是堆,只是用于存储类、常量相关的信息!

  3. 用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、静态方法、字符串常量等)


构造方法

         构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。

       1. 通过new关键字调用!!

  2. 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。

  3. 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。

案例:

       1. 定义一个“点”(Point)类用来表示二维空间中的点(有两个坐标)。要求如下:

  (1) 可以生成具有特定坐标的点对象。

  (2) 提供可以设置坐标的方法。

  (3)提供可以计算该“点”距另外一点距离的方法。

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));
	}
}

运行结果:5.0

猜你喜欢

转载自blog.csdn.net/qq_39368007/article/details/83217017