Java学习 day3 面向对象

面向对象

面向对象是相对于面向过程来讲的,指的是,把相关的数据和方法组织成为一个整体来看待,从更高层次来进行系统建模,更加贴近事物的自然运行方式。

从面向过程到面向对象的转变

面向过程更注重的是执行的过程,面向对象关注的是具备功能的对象。
面向对象到面向过程,是程序员思想上从执行者到指挥者的转变。
在这里插入图片描述
在这里插入图片描述

三大思想

OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象程序

三大特征

封装性:所有内容对外部不可见
继承性:将其他的功能继承下来继续发展
多态性:方法的重载本身就是一种多态性的表现

类与对象
两者之间的关系

类表示一个共性的产物,是一个综合的特征。而对象,是一个个性的产物,一个个体的产物(类似于现实中图纸和事物之间的关系)。
类必须通过对象才可以使用,对象的所有的操作都定义在类中。
类由属性和方法组成:
属性:相当于人的一个个特征。
方法:相当于人的一个个行为。

类的定义格式
class 类名称{
	成员属性
	成员方法
}

类必须编写在java文件中。
一个 .java文件中,可以存在N个类,但是只能存在一个public修饰的类
.java文件的文件名称 必须与public修饰的类名 完全一致。

属性与方法

属性定义格式:

		数据类型  属性名;

属性定义并赋值的格式:

		数据类型 属性名 = 初始化值

方法定义格式:

	 	权限修饰符 返回值类型 方法名(形式参数列表){
			//方法体
			return 返回值;
		}
对象的创建和使用

一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:

类名称 对象名称 = new 类名称();

如果想要访问类中的属性或方法,则可以依靠一下的语法形式:
访问类中的属性: 对象.属性;
调用类中的方法:对象.方法(实际参数列表);

创建对象内存分析
方法区

存放的是:
–类信息
–静态变量
–常量
–成员方法
方法区中包含了一个特殊的区域(常量池)(存储的是使用static修饰的成员)

PC寄存器

存放的是当前正在执行的JVM指令的地址.
在Java程序中,每个线程启动时,都会创建一个PC寄存器.

本地方法栈

保存本地(native)方法的地址!

Java栈的区域很小,大概2m左右,特点是存取的速度特别快.
栈存储的特点是:先进后出
存储快的原因是:
栈内存,是通过"栈指针"来创建空间和释放空间!
指针向下移动,会创建新的内存,向上移动,会释放这些内存!
这种方式速度特别快,仅次于PC寄存器!
但是这种移动的方式,必须要明确移动的大小与范围,
明确大小与范围是为了方便指针的移动,这是一个对于数据存储的限制,存储的数据大小是固定的.影响了程序的灵活性.
所以大部分的数据, 存储到了堆内存中。
栈中存储的是:基本数据类型的数据 以及 引用数据类型的引用
例如:

int a = 10;
Person p = new Person();

10就存储在栈内存中,创建的对象的引用p存在栈内存中。

存放的是类的对象
Java是一个纯面向对象语言,限制了对象的创建方式;类的对象是通过new关键字来创建的。
new关键字,是指告诉JVM,我们需要创建一个新的对象,去开辟一块新的内存空间;
堆内存与栈内存不同,优点在于我们创建对象时,不必关注堆内存中需要开辟多少存储空间,也不需要关注内存占时长!
堆内存中的内存的释放是由GC(垃圾回收器)完成的。
垃圾回收器 回收堆内存的规则:
当栈内存中不存在此对象的引用时,则视为垃圾,等待垃圾回收器回收!

构造方法(构造器)
Person p = new Person();

在右侧Person后面出现的小括号,其实就是在调用构造方法

概述

构造方法的作用:用于对象的初始化
执行时机:在创建对象时,自动调用。
特点:
·所有的Java类中都会有至少一个构造方法。
·如果一个类中没有明确的构造方法,则编译器会自动生成一个无参数的构造方法,构造方法中没有任何的代码
如果自行编写了一个构造方法,编译器就不会再自动生成无参的构造方法。

定义格式

与普通的方法基本相同,区别在于:方法名必须与类名相同没有返回值类型的声明!!!

	public class Demo3{
		public static void main(String []args){
			Person p =new Person();
			p =new Person();
			p =new Person();
			p =new Person();
			p =new Person();
		}
		class Person{
			public 	Person(){
				System.out.println("对象创建时,此方法调用。");
			}
		}
	}
构造方法设计

建议自定义无参构造方法,不要对编译器形成依赖,避免发生错误。
当类中有非常量成员变量时,建议提供两个版本的构造方法,一个是无参数构造方法,一个是全属性做参数的构造方法。
当类中所有成员变量都是常量或者没有成员变量时,建议不提供任何版本的构造方法。

方法的重载

方法名称相同,参数类型或参数长度或参数类型顺序不同,可以完成方法的重载! 方法的重载与返回值类型无关!
方法的重载,可以让我们在不同的需求下,通过传递不同的参数调用方法来完成具体的功能。

构造方法的重载

一个类中可以存在多个构造方法:
参数列表长度 或数据类型不同即可完成构造方法的重载
构造方法的重载可以让我们在不同的创建对象的需求下,调用不同的方法来完成对象的初始化!

匿名对象

没有对象名称的对象,就是匿名对象
匿名对象只能使用一次,因为他没有任何的对象引用,所以称为垃圾,等待GC回收。
只使用一次的对象,可以使用匿名对象的方式来完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值