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区分局部变量和成员变量。
代码截图 结果