【java程序设计期末复习】chapter4 类和对象
类和对象
编程语言的几个发展阶段
(1)面向机器语言
计算机处理信息的早期语言是所谓的机器语言,使用机器语言进行程序设计需要面向机器来编写代码,即需要针对不同的机器编写诸如0101 1100这样的指令序列。
(2)面向过程语言
随着计算机硬件功能的提高,在20世纪60年代出现了面向过程设计语言,如C语言等。用这些语言编程也称为面向过程编程。语言把代码组成叫做过程或函数的块。每个块的目标是完成某个任务。使用这些语言编写代码指令时,不必再去考虑机器指令的细节,只要按着具体语言的语法要求去编写“源文件”。
(3)面向对象语言
基于对象的编程更加符合人的思维模式,使得编程人员更容易编写出易维护、易扩展和易复用的程序代码,更重要的是,面向对象编程鼓励创造性的程序设计。
面向对象编程主要体现下列三个特性:封装性 ;继承;多态
类
Java语言是面向对象语言,它的源程序是由若干个类组成,源文件是扩展名为.java的文本文件。
类是Java语言中最重要的“数据类型”,类声明的变量被称作对象(见后面的4.3节),即类是用来创建对象的模板。
类的实现包括两部分:类声明和类体。基本格式为:
class 类名 {类体的内容
}
其中:class是关键字,用来定义类。“class 类名”是类的声明部分,类名必须是合法的Java标识符。两个大括号以及之间的内容是类体。
类的构成
类体的内容由两部分构:一部分是变量的声明,用来刻画属性;另一部分是方法的定义,用来刻画行为功能。 (即成员定义和函数定义)
class Ladder { float above; //梯形的上底(变量声明)float bottom; //梯形的下底(变量声明)float height; //梯形的高(变量声明)float area; //梯形的面积(变量声明)float computerArea() { //计算面积(方法)area = (above+bottom)*height/2.0f;return area;} void setHeight(float h) { //修改高(方法)height = h;}
}
注意:
(1)成员变量的类型可以是Java中的任何一种数据类型,包括基本类型:整型、浮点型、字符型、逻辑类型;引用类型:数组、对象和接口。
(2)成员变量在整个类内的所有方法里都有效,其有效性与它在类体中出现 的位置 无关。 如下例子
(3)声明成员变量时如果没有指定初始值,Java编译器会为其指定默认值。
(4)声明成员变量bottom指定的初始值和above的值有关,那么声明成员变量above的位置要在声明成员变量bottom的前面。
class Lader
{ float above,area;float computerArea(){ area=(above+bottom)*height/2;//此时bottom和height变量都没有被定义,但编译没问题(C++会出现问题)return area;}float bottom;void setHeight(float h){ height=h; }float height;
}
方法(函数)的局部变量
1.成员变量有默认值(见4.2.3节),但局部变量没有默认值,因此在使用局部变量之前,必须保证局部变量有具体的值 。例如:下列InitError类无法通过编译。
class InitError {int x = 10,y; //y的默认值是0void f() {int m; //m没有默认值,但编译无错误x = y+m; //无法通过编译,因为在使用m之前未指定m的值}
}
2.如果方法和类中成员有变量重名,成员变量会变隐藏(可以使用this关键字使用被隐藏的成员变量)
class Tom {int x = 10,y;void f() {int x = 5;y = x+x; //y得到的值是10,不是20。//如果方法f 中没有“int x=5;”,y的值将是20}
}
3.复合语句中声明的变量,只在复合语句中有效
public class A {int m = 10,sum = 0; //成员变量,在整个类中有效void f() {if(m>9) {int z = 10; //z仅仅在该复合语句中有效z = 2*m+z; } for(int i=0;i<m;i++) {sum = sum+i; //i仅仅在该循环语句中有效}m = sum; //合法,因为m和sum有效z = i+sum; //非法,因为i和z已无效}
}
4.对成员变量的操作只能放在方法中,方法可以对成员变量和该方法体中声明的局部变量进行操作。在声明成员变量时可以同时赋予初值,但是不可以在类体中有单独的赋值语句,但局部变量必须赋初值。
class A { int a=12; //声明成员变量并指定初始值12int b; //声明成员变量默认初始值0b=12; //错误,这是语句
}
对象
在声明对象后必须使用new关键字为自己的变量赋值
class XiyoujiRenwu {float height,weight;String head, ear;void speak(String s) {head="歪着头";System.out.println(s);}
}
public class Example4_3 {public static void main(String args[]) {XiyoujiRenwu zhubajie,sunwukong; //声明对象zhubajie = new XiyoujiRenwu(); //为对象分配变量sunwukong = new XiyoujiRenwu();zhubajie.height=1.80f; //对象给自己的变量赋值zhubajie.head="大头"; zhubajie.ear="一双大耳朵"; sunwukong.height=1.62f; //对象给自己的变量赋值sunwukong.weight=1000f; sunwukong.head="绣发飘飘"; System.out.println("zhubajie的身高:"+zhubajie.height);System.out.println("zhubajie的头:"+zhubajie.head);System.out.println("sunwukong的重量:"+sunwukong.weight);System.out.println("sunwukong的头:"+sunwukong.head);zhubajie.speak("俺老猪我想娶媳妇"); //对象调用方法System.out.println("zhubajie现在的头:"+zhubajie.head);sunwukong.speak("老孙我重1000斤,我想骗八戒背我"); //对象调用方法System.out.println("sunwukong现在的头:"+sunwukong.head);}
}
对象和数组类似属于引用的变量
class Point {int x,y;void setXY(int m,int n){x = m;y = n;}
}
public class Example4_4 {public static void main(String args[]) {Point p1 = null,p2 = null; p1 = new Point(); p2 = new Point();System.out.println("p1的引用:"+p1);System.out.println("p2的引用:"+p2);p1.setXY(1111,2222);p2.setXY(-100,-200);System.out.println("p1的x,y坐标:"+p1.x+","+p1.y);System.out.println("p2的x,y坐标:"+p2.x+","+p2.y);p1 = p2;System.out.println("将p2的引用赋给p1后:");int address = System.identityHashCode(p1);System.out.printf("p1的引用:%x\n",address);address = System.identityHashCode(p2);System.out.printf("p2的引用:%x\n",address);System.out.println("p1的x,y坐标:"+p1.x+","+p1.y);System.out.println("p2的x,y坐标:"+p2.x+","+p2.y);}
}
运行结果:

Java的多态
java中存在两种多态:重载(Overload)和重写(Override)
重写是与继承有关的多态,将在第5章讨论。
方法重载是两种多态的一种,例如,你让一个人执行“求面积”操作时,他可能会问你求什么面积?所谓功能多态性,是指可以向功能传递不同的消息,以便让对象根据相应的消息来产生相应的行为。对象的行为通过类中的方法来体现,那么行为的多态性就是方法的重载
public class Student
{ //这里Student类中有两个同名的方法(函数),但是传入的参数不一样//这种方法就叫做重载double computerArea(Circle c) {double area=c.getArea();return area; } double computerArea(Tixing t) {double area=t.getArea();return area; }
}
访问权限
当用一个类创建了一个对象之后,该对象可以通过“.”运算符操作自己的变量、使用类中的方法,但对象操作自己的变量和使用类中的方法是有一定限制的。
所谓访问权限是指对象是否可以通过“.”运算符操作自己的变量或通过“.”运算符使用类中的方法。
访问限制修饰符有private、protected和public,都是Java的关键字,用来修饰成员变量或方法。

相关文章:
【java程序设计期末复习】chapter4 类和对象
类和对象 编程语言的几个发展阶段 (1)面向机器语言 计算机处理信息的早期语言是所谓的机器语言,使用机器语言进行程序设计需要面向机器来编写代码,即需要针对不同的机器编写诸如0101 1100这样的指令序列。 (2&#x…...
ios:Command PhaseScriptExecution failed with a nonzero exit code
问题 使用 xcode 跑项目真机调试的时候,一直报错 Command PhaseScriptExecution failed with a nonzero exit code。 解决 最终靠以下方法解决 删除Podfile.lock文件删除Pods文件删除.xcworkspace文件Pod installCommandShiftK 清理一下缓存 亲测有效...
《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学备赛?方法思维教程》【官方笔记】
背景: 有些同学在大一或者大二可能会被老师建议参加蓝桥杯,本视频和文章主要是以一个过来人的身份来给与大家一些思路。 比如蓝桥杯是什么?我是否要参加蓝桥杯?参加蓝桥杯该选择何种语言?如何科学备赛?等…...
数据挖掘案例-航空公司客户价值分析
文章目录 1. 案例背景2. 分析方法与过程2.1 分析流程步骤2.2 分析过程1. 数据探索分析2. 描述性统计分析3. 分布分析1.客户基本信息分布分析2. 客户乘机信息分布分析3. 客户积分信息分布分析 4. 相关性分析 3. 数据预处理3.1 数据清洗3.2 属性约束3. 3 数据转换 4. 模型构建4. …...
决策树与机器学习实战【代码为主】
文章目录 🛴🛴引言🛴🛴决策树使用案例🛴🛴numpy库生成模拟数据案例🛴🛴决策树回归问题🛴🛴决策树多分类问题 🛴🛴引言 决策树是一种经…...
从感知机到神经网络
感知机 一、感知机是什么二、用感知机搭建简单逻辑电路2.1 与门2.2 与非门2.3 或门 三、感知机的局限性3.1 异或门3.2 线性和非线性 四、多层感知机4.1 已有门电路的组合4.2 Python异或门的实现 五、感知机模型5.1 感知机模型5.2 感知机损失函数5.3 感知机学习算法 六、感知机原…...
【HMGD】STM32/GD32 I2C DMA 主从通信
STM32 I2C配置 主机配置 主机只要配置速度就行 从机配置 从机配置相同速度,可以设置第二地址 因为我的板子上面已经有了上拉电阻,所以可以直接通信 STM32 I2C DMA 定长主从通信代码示例 int state 0; static uint8_t I2C_recvBuf[10] {0}; stat…...
leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度
leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度 leecode 226 翻转二叉树 题目链接 :https://leetcode.cn/problems/invert-binary-tree/description/ 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。…...
Redux基础
简介 状态管理工具,集中式管理react、vue、angular等应用中多个组件的状态,是一个库,使用之后可以清晰的知道应用里发生了什么以及数据是如何修改,如何更新的 在项目中添加 Redux 并不是必须的,根据项目需求选择是否引入 Redux 三个原则 …...
国外目标公司的任何一个联系人也许都有意义
我们说跟进一个项目,最好能够联系上拥有决策权的人,不然中间隔着几重关系,所有的更新都需要层层审批申报,特别麻烦,总是要等,也许等到最后就是一场空。如果能够直接和老板或者是拍板的人沟通,则…...
因为本地证书太旧或不全导致的 HTTPS 访问失败问题20240520
因为本地证书太旧或不全导致的 HTTPS 访问失败问题 在生产环境中,我们经常需要使用 curl 命令来测试和调试 HTTPS URL。然而,最近我遇到了一个棘手的问题:在测试环境中使用 curl 可以正常访问某个 URL,但在生产环境中却遇到了 SS…...
Lua获取表的长度
1.代码 -- 创建一个表并添加一些元素 local myTable {10, 20, 30, 40}-- 打印表的长度 print(#myTable) -- 输出 4,因为表中有 4 个元素-- 使用 # 来遍历表中的所有元素 for i 1, #myTable doprint(myTable[i]) end -- 这将依次打印 10, 20, 30, 40...
python九九乘法表的打印思考及实现
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、问题引入 九九乘法表的显示需求 二、问题分析 嵌套循环的概念 屏幕宽度与换行的考虑…...
2.Spring中用到的设计模式
Spring框架中使用了多种设计模式来构建其强大且灵活的功能,这里举例说明Spring中的一些功能使用到的设计模式。 工厂模式:Spring容器本质是一个大工厂,使用工厂模式通过BeanFactory和ApplicationContext这两个核心接口来创建和管理bean对象。…...
.NET调用阿里云人脸核身服务端 (ExecuteServerSideVerification)简易流程保姆级教学
需要注意的是,以下内容仅限基础调用 功能说明 该功能是输入核验人的姓名和身份证以及人脸照片,去阿里库里面匹配,3个信息是否一致,一致则验证通过,需要注意的是,人脸有遮挡,或者刘海࿰…...
[大师C语言(第十二篇)]C语言堆排序技术详解
引言 堆排序(Heap Sort)是一种基于比较的排序算法,它利用堆这种数据结构的特点来进行排序。堆是一种近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父…...
Activity启动流程要点
一、Activity启动流程 Activity的启动流程一般是通过调用startActivity或者是startActivityForResult来开始的startActivity内部也是通过调用startActivityForResult来启动Activity,只不过传递的requestCode小于0Activity的启动流程涉及到多个进程之间的通讯这里主…...
lua 计算第几周
需求 计算当前赛季的开始和结束日期,2024年1月1日周一是第1周的开始,每两周是一个赛季。 lua代码 没有处理时区问题 local const 24 * 60 * 60 --一整天的时间戳 local server_time 1716595200--todo:修改服务器时间 local date os.date("*t…...
负载均衡策略
...
海外网红营销新趋势:“快闪式”营销如何迅速提升品牌曝光度
在当今数字化时代,海外网红营销已成为品牌迅速触达全球消费者、提升品牌曝光度和刺激销售的重要手段。其中,“快闪式”营销以其独特的时效性、创意性和互动性,成为品牌与海外网红合作的新趋势。本文Nox聚星将和大家探讨如何利用海外网红的影响…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
