第3章 面向对象 (上)
本章重点
·面向对象的概念
·类与对象
·构造方法
·this和static关键字
·内部类
3.1 面向对象的概念
面向对象:在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之前的联系。
1.封装性
封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节。
2.继承性
主要是描述的是类与类之间的关系,通过继承,可以在无须重新编写原有类的情况下,对原有类的功能进行扩展。
继承不仅增强了代码复用性,提高了开发效率,而且为程序的修改补充提供了便利。
3.多态性
指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其它类继承后,他们可以具有不同数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。
3.2 类与对象
面向对象的思想中提出两个概念,既类和对象。
类是对某一类事务的抽象描述,而对象用于表现现实中该类事物的个体。
类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。
3.2.1 类的定义
类是对象的抽象,它用于描述一组对象的共同特征和行为。
成员变量用于描述对象的特征,也被称作属性;成员方法用于描述对象的行为,可见简称为方法。
At:在类中定义的变量被称为成员变量;定义在方法中的变量称为局部变量。
3.2.2 对象的创建与使用
在Java程序中可以使用new关键字来创建对象,具体格式如下:
Fm:类名 对象名称 = new 类名();
例如,创建Person类的实例对象代码如下:
Person p = new Person();
变量p引用的对象简称为p对象.
通过对象的引用来访问对象所有的成员,具体格式如下:
Fm: 对象引用.对象成员,通过一个例子来说明如何访问对象的成员
在实例化对象时,Java虚拟机会自动为成员变量进行初始化,针对不同类型的成员变量,Java虚拟机会赋予不同的初始值。如下表所示
3.2.3 类的设计
对象是通过类创建出来的。
3.2.4 类的封装
所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰,私有属性只能在它所在类中被访问。
3.3 构造方法
3.3.1 构造方法的定义
(1)方法名与类名相同
(2)在方法名的前面没有返回值类型的声明
(3)在方法中不能使用return语句返回一个值
3.3.2 构造方法的重载
构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。
At: 在Java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统就会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,在某方法体中没有任何代码,即什么都不做;
下面程序中的Person类的两种写法效果是完全一样的.
为了方便实例化对象,构造方法通常会使用public来修饰;
3.4 this关键字
关键字this,用于在方法中访问对象的其他成员。
(1) 通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题。
(2) 通过this关键字调用成员方法。
(3) 构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其他方法一样去调用构造方法,但可以在一个构造方法中使用”this([参数1,参数2……])”的形式来调用其他的构造方法。
在使用this调用类的构造方法时,应注意以下几点
(1) 只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用
(2) 在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次。
(3) 不能在一个类的两个构造方法中使用this互相调用
3.5 垃圾回收
Java垃圾回收机制——在Java中,当一个对象成为垃圾后仍会占用内存空间,时间一长,就会导致内存空间的不足。
当一个对象在内存中被释放时,它的finalize()方法会被自动调用,因此可以在类中通过定义finalize()方法来观察对象何时被释放。
除了等待Java虚拟机进行自动垃圾回收,也可以通过调用System.gc()方法来通知Java虚拟机立即进行垃圾回收。
3.6 static关键字
3.6.1 静态变量
在一个Java类中,可以使用static关键字来修饰成员变量,改变了被称作静态变量;静态变量被所有实例共享,可以使用”类名.变量名”的形式来访问。
At:static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错。
3.6.2 静态方法
静态方法:只需要在类中定义的方法前加上static关键字
静态方法可以使用”类名.方法名”的方式来访问,也可以通过类的实例对象来访问
静态方法不需要创建对象就可以调用
At:在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象、
3.6.3 静态代码块
在Java类中,使用一对大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块;当累被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次。
3.6.4 单例模式
单例模式是Java中的一种设计模型,它是指在设计一个类时,需要保证在整个程序运行期间针对该类只存在一个实例对象。
被关键字final修饰的变量为常量,其值不可改变。
3.7内部类
在Java中,允许在一个累的内部定义类,这样的类称作内部类,这个内部类所在的类所在外部类。 根据内部类的位置、修饰符和定义可分为成员内部类、静态内部类、方法内部类。
3.7.1 成员内部类
在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。
内部类可以在外部类中被使用,并能访问外部类的成员。
创建内部类对象的具体语法格式如下:
Fm: 外部类名.内部类名 变量名 = new 外部类名(). new 内部类名();
3.7.2 静态内部类
可以使用static关键字来修饰一个成员内部类,该内部类被称作静态内部类。
创建静态内部类对象的具体语法:
Fm: 外部类名.内部类名 = new 外部类名.内部类名();
At: (1) 在静态内部类中只能访问外部类的静态成员
(2) 在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。
3.7.3 方法内部类
方法内部类是指在成员方法中定义的类,它只能在当前方法中被调用
3.8 Java的帮助文档
3.8.1 Java的文档注释
3.8.2 JDK帮助文档的使用
转载于:https://www.cnblogs.com/CSAH/p/10517689.html
第3章 面向对象 (上)相关推荐
- 第五章 面向对象(上)
Java是面向对象的程序设计语言,Java语言提供了定义类.成员变量.方法等最基础的功能,类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将引用到类的对象 ...
- 《Java基础入门第2版》--黑马程序员 课后答案及其详解 第3章 面向对象(上)
文章目录 一.填空题 二.判断题 三.选择题 四.简答题 五.编程题 六.原题及其解析 一.填空题 1.封装.继承.多态 2.this 3.private.default.protected.publ ...
- 使用Goods类创建十个商品 第四章 面向对象(上)课堂作业2
使用Goods类,创建10个商品,输出所有商品的信息. 输出所有商品信息 package First; /*作者:马志勇交流 欢迎模仿欢迎借鉴 嘿嘿别忘了 点赞加关注.别忘了 点赞加关注.别忘了 点赞 ...
- JavaScript内核系列 第8章 面向对象的JavaScript(下)
原创作者: abruzzi 接上篇:JavaScript内核系列 第8章 面向对象的JavaScript(上) 8.4实例:事件分发器 这一节,我们通过学习一个面向对象的实例来对JavaScript的 ...
- 【JAVA SE】第六章 面向对象、对象和类以及封装
第六章 面向对象.对象和类以及封装 文章目录 第六章 面向对象.对象和类以及封装 一.面向对象 1.概念 2.面向对象的三大特征 二.对象和类 1.基本概念 2.Java中的对象 3.Java 中的类 ...
- 第十五章 面向对象程序设计
第十五章 面向对象程序设计 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承和动态绑定. 继承(inheritance): 通过继承联 ...
- java笔记:第6章 面向对象程序设计
第6章 面向对象程序设计 6.1面向对象技术基础 面向对象三大特征:封装性, 继承性,多态性 封装性:1. 把属性和方法都放在一起 2.实现信息隐藏 类和对象的关系:类是对象的抽象描述.对象是类的实 ...
- 悟透delphi 第十一章 面向对象数据库基础
第十一章 面向对象数据库基础 第二节数据对象的标识 我们在关系数据库的设计和开发中,可能经常需要一些唯一的编号或标识,用来作为关键字,以区别每一个不同的人,每一张不同的单据,每一次不同的信息登记,等等 ...
- 《设计模式解析》第1章 面向对象范型
第1章 面向对象范型 概述 本章通过和另外一种你熟悉的范型--标准结构化编程相对比,来向你介绍面向对象范型. 面向对象范型的产生是因为使用标准化结构编程,过去的实践面临着挑战.通过清楚地了解这些挑战, ...
最新文章
- 高速学会Mac上托管代码到github(具体解释)
- 软考高项之沟通与干系人管理-背诵记忆
- word精华样式篇之三使用样式集让所有文档风格统一
- 机器人铁锈斑斑好吗_工业机器人系统运维员是什么职业?这个职业好吗?
- python socket编程_Python学习记录-socket编程
- 基于Udp的Socket网络编程聊天程序
- 发现Diolar 的边缘检测程序好像也有缺点
- 麦肯锡方法:解决问题的七个步骤
- html 做报表,创建 HTML 报表
- 如何用AE做出动画效果杭州UI设计分享方法
- linux系统32位镜像下载,深度Linux Deepin镜像下载
- 十种经典运放电路分析
- 《需求工程:软件建模与分析》笔记(一)
- opencv19:轮廓凸包,距离与匹配
- 学习分布式存储应该从哪几方面着手?
- 微信开发工具tabBar中的list 图片为啥加载不出来?
- 干货分享 | 创业公司绝对不会告诉你他们在用的工具们
- 尤雨溪:Vue3即将成为新的默认版本!
- 竖屏java转横屏_android设置横屏和竖屏的方法
- 目前从事工作的想法和建议
热门文章
- php去掉 部分字符,输出,php如何去除某个字符
- 注解 java 原理_Java注解基本原理
- linux下mysql数据库目录迁移_mysql实现linux下数据库目录迁移
- linux 内核参数优化 mysql_Linux记录-mysql参数优化
- winform list集合怎么 in过滤_你有真正把 Python Set 当作数学集合吗?
- 如何打造领英朋友圈_领英点赞,请摆好姿势!
- OpenCV-Python实战(20)——OpenCV计算机视觉项目在Web端的部署
- jdbc教程_JDBC教程
- 在VS中查看MSI项目的Product Code
- tomcat之jsp连接mysql数据库