Java学习day-07:面向对象

一、面向过程和面向对象

1.面向对象与面向过程的区别:

面向对象具有三大特征;封装,继承,多态;面向对象与面向过程相辅相成; 面向对象思想更契合人的思维模式。我们首先思考的是“怎么设计这个事物?”

面向过程适合简单,不需要协作的事务。

2.面向对象思考方式:

遇到复杂问题,先从问题中找名词,然后确立这些名词哪些可以作为类,再根据问题需求确定的类的属性和方法,确定类之间的关系。

3.面向对象和面向过程的总结:

(1)都是解决问题的思维方式,都是代码组织的方式。

(2)解决简单问题可以使用面向过程

(3)解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。

二、对象的创建,方法和属性的调用

1.对象

(1)对象是一种数据结构,将数据和数据放在一起。内存上,对象就是一个内存块,存放了相关数据集合。

(2)对象是具体的事物,类是对象的抽象;(抽出相似的东西)

  (3)对象的创建,new关键字;类名  对象名=new 类名();

2.类

(1)类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

(2)类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。

例如:天使的特征;1.带翅膀,2.女孩,3.善良,4.头上有光环。

3.类的定义方式

对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。(可以定义多个或0个)

4.注意:

一个源文件里面必须要有一个public class且只能有有一个,并且类名和文件名保持一致;

代码截图
代码截图
结果

5.属性

      属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体;在定义成员变量时可以对其初始化,如果不初始化,java会默认初始化。

6.方法

(1) 方法用于定义该类或该类实例的行为特征和功能实现。
[修饰符]  方法返回值类型  方法名(形参列表) {

    // n条语句

}

代码截图
结果

三、构造方法

1.构造器也叫构造方法(constructor),用于对象的初始化。

声明格式:

[修饰符] 类名(形参列表){

    //n条语句

}

(1)通过new关键字调用!!

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

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

(5) 构造器的方法名必须和类名一致。

代码截图
结果

四、JVM内存结构

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

1.栈的特点:

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

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

(3)属于线程私有,不能实现线程间的共享;

(4)栈的存储特性是“先进后出,后进先出”

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

2.堆的特点:

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

(2)JVM只有一个堆,被所有线程共享;

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

3.方法区特点:

(1)JVM只有一个方法区,被所有线程共享。

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

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

4.注意:

方法区也在堆中;

代码截图
结果
内存分配图

五、this关键字

1.this的本质就是“创建好的对象地址”代表当前对象本身;

2.this最常的用法:

(1) 在程序中产生二义性之处;区分成员变量和局部变量,

(2)使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。

  (3)this不能用于static方法中;main方法中就不能使用this关键字。

代码截图
结果

3.构造方法的重载

(1)构造方法重载:方法名相同;参数的类型不同;参数的个数不同;参数的顺序不同,

代码截图
结果

(2)this 关键字:代表当前对象本身,可以使用this区分局部变量和成员变量。

代码截图
结果

你可能感兴趣的:(Java学习day-07:面向对象)