第5章 面向对象基础(上)

5.1面向对象编程

5.1.1 面向对象编程思想概述

1.编程语言概述
如何表示和存储数据
基本数据类型的常量和变量:表示和存储一个个独立的数据
对象:表示和存储与某个具体事务相关的多个数据
数据结构:表示和存储一组对象,数据结构有数组,链表,栈,队列,散列表,二叉树,堆
基于这些数据都有什么操作行为,其实就是实现什么功能
数据的输入和输出
基于一个或两个数据的操作:赋值运算,算数运算,比较运算,逻辑运算等
基于一组数据的操作:统计分析,查找最大值,查找元素,排序,遍历等

2.程序设计方法
C语言是一种面向过程的程序设计语言,是因为C语言是在面向过程思想的指引下去设计,开发计算机程序的。Java语言是一种面向对象的程序设计语言,因为Java语言是在面向对象思想的指引下去设计,开发计算机程序的。
其中面向对象和面向过程都是一种编程思想,基于不同思想会产生不同的程序设计方法。
1.面向过程的程序设计思想,简称POP
关注的焦点是过程:过程就是操作数据的步骤,如果某个过程的实现代码在很多地方重复出现,那麽就可以把这个过程抽象为一个函数。
代码结构:以函数为组织单位。独立于函数之外的数据称为全局数据,在函数内部的称之为局部数据。
2.面向对象的程序设计思想,简称POP
关注的焦点是类:面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征,行为特征抽象出来,用类表示。某个事物的一个具体个体称为实例或对象。
代码结构:以类为组织单位。每种事物都具备自己的属性和行为/功能;

5.1.2 类和对象

1.什么是类
类是一类具有相同特性的事物的抽象描述,是一组相关属性和行为的集合。
属性:就是该事物的状态信息。
行为:就是在你这个过程中,该状态信息要做什么操作,或者基于事物的状态能做什么。

2.什么是对象
对象是一类事物的一个具体个体。即对象是类的一个实例,必然具备该类事物的属性和行为。

3.类与对象的关系
类是对一类事物的描述,是抽象的
对象是一类事物的实例,是具体的
类是对象的模板,对象是类的实体

JVM的运行时内存区域分为:方法区,堆,虚拟机栈,本地方法栈,程序计数器几大块。

区域名称作用
程序计数器程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址
本地方法栈当程序中调用了native的本地方法时,本地方法执行期间的内存区域
方法区存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据
堆内存存储对象,new来创建,都存储在堆内存
虚拟机栈用于存储正在执行的每个Java方法的局部变量等。局部变量存放了编译期可知长度的各种基本数据类型,对象引用,方法执行,自动释放

Java对象保存在内存中,由以下三部分组成:
对象头:
Mark Word :记录了和当前对象有关的GC,锁等信息
指向类的指针:每一个对象需要记录它是由哪个类创建出来的,而Java对象的类数据保存在方法区,指向类的指针就是记录创建该对象的类数据在方法区的首地址。该指针在32位JVM中的长度是32bit,在64位JVM中长度是64bit
数组长度(只有数组对象才有)

实例数据
即实例变量的值

对齐填充
因为JVM要求Java对象占的内存空间大小应该是8bit的倍数,如果不满足改大小,则需要补齐至8bit的倍数,没有特别的功能。

5.3.4 实列变量与局部变量的区别

1.声明位置和方式
(1)实例变量:在类中方法外
(2)局部变量:在方法体{}中或方法的形参列表,代码块中
2.在内存中存储的位置不同
(1)实例变量:堆
(2)局部变量:栈
3.生命周期
(1)实例变量:和对象的生命周期一样,随着对象的创建而存在,随着对象被GC回收而消亡,而且每一个对象的实例变量是独立的。
(2)局部变量:和方法调用的生命周期一样,每一次方法被调用而在存在,随着方法执行的结束而消亡,而且每一次方法调用都是独立的
4.作用域
(1)实例变量:通过对象就可以使用
(2)局部变量:出了作用域就不能使用
5.修饰符
(1)实例变量:public,protected,private,final,volatile,transient等
(2)局部变量: final
6.默认值
(1)实例变量:有默认值
(2)局部变量: 没有,必须手动初始化。其中的形参比较特殊,靠着实参给它初始化。

5.4 封装

随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚,低耦合”,而“高内聚,低耦合”的体现之一:
高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅对外暴漏少量的方法用于使用

隐藏对象内部的复杂性,只对外公开简单和可控的访问方式,从而提高系统的可扩展性,可维护性。通俗的讲,把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装设计的思想。

如何实现封装
实现封装就是指控制类或成员的可见性范围?这就需要依赖访问控制修饰符,也称为权限修饰符来控制。
权限修饰符:public,protected,缺省,private

修饰符本类本包其它包子类其它包非子类
private×××
缺省××
protected×
public

外部类:public和缺省
成员变量,成员方法,构造器,成员内部类:public,protected,缺省,private

5.4.2 成员变量/属性私有化问题

成员变量私有化之后,提供标准的get/set方法,我们把这种成员变量也称为属性(property)。

5.5 构造器

1,构造器的作用:
在创建对象时为对象进行初始化工作的特殊的方法

构造器不能出现递归调用

JavaBean

JavaBean是一种Java语言写成的可重用组件。

所谓javaBean,是指符合如下标准的Java类:

​ 类是公共的

​ 有一个无参的公共的构造器

​ 有属性,且有对应的get、set方法

l用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。

5.9 包(Package)

5.9.1 包的作用

(1)可以避免类重名:有了包之后,类的全名称就变为:包.类名

(2)可以控制某些类型或成员的可见范围

如果某个类型或者成员的权限修饰缺省的话,那么就仅限于本包使用。

(3)分类组织管理众多的类

例如:

  • java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread等,提供常用功能
  • java.net----包含执行与网络相关的操作的类和接口。
  • java.io ----包含能提供多种输入/输出功能的类。
  • java.util----包含一些实用工具类,如集合框架类、日期时间、数组工具类Arrays,文本扫描仪Scanner,随机值产生工具Random。
  • java.text----包含了一些java格式化相关的类
  • java.sql和javax.sql----包含了java进行JDBC数据库编程的相关类/接口
  • java.awt和javax.swing----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。

5.9.2 如何声明包

关键字:包
package 包名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值