当前位置: 首页 > news >正文

4.类,方法,对象

1.1.2. 面向对象程序设计的三大特征

1.1.2.1. 封装

面向对象编程核心思想之一就是将数据和对数据的操作封装在一起,形成一般的概念,比如类的概念。

1.1.2.2. 继承

继承体现了一种先进的编程模式。子类可以继承父类的属性和方法。

1.1.2.3. 多态

多态是面向对象编程的又一重要特征,是编写出易维护,易扩展程序的保障。

1.1.3. 类与对象的概念

1.1.3.1.类

是一个模板或蓝图,它用来定义对象的数据域是什么以及方法是做什么的对象是类的一个实例(instance)。可以用一个类创建多个实例。创建实例的过程称为实例化(instantiation)。

对象实例(instance)是一个概念,对象是类实例化的结果。

类和对象是抽象和具体的关系。比如汽车属于交通工具类,问界 M7 是交通工具类的一个实例

1.1.3.2.对象 

对象的两方面的特征

  • 状态:描述对象的静态特征
  • 行为:描述对象的动态特征

一辆汽车

  • 状态描述:生产厂家、颜色、出厂年份、价格等
  • 行为描述:启动、加速、转弯和停止等

一名员工:

  • 状态描述:姓名、年龄、工资
  • 行为描述:说话、工作、计算工资等
1.1.3.3. 消息和方法

对象和对象之间的联系是通过消息传递的,一个对象发送消息包含 3 方面的内容:接收消息的对象,接收对象采用的方法、以及方法的参数。

 

1.2.1. 类的定义

类(class)是一种抽象数据类型,类是构成Java程序的最基本的要素,一个Java项目应由若干类构成。

1.2.1.1. 类声明

类的定义包含两部分:类的声明和类的实现(类的主体)。主体部分包含声明数据成员定义成员方法。具体格式如下:

[public][abstract|final]class ClassName [extends SuperClass] [implements InterfaceList]{//1.成员变量的定义//2.构造方法的定义//3.成员方法的定义...
}

说明:

  1. 类的修饰符

类的访问修饰符可以是 public 或者缺省。若类用 public 修饰,则该类称为公共类。公共类可以被任何包的类使用。如果不加 public 修饰符,类只能被同一包的其他类使用。如果类使用 abstract 修饰符,则该类为抽象类。如果类使用 final 修饰,指明该类为最终类。

  1. extends SuperClass

如果一个类需要继承某个类使用 extends 指明该类的父类,SuperClass 为父类名,即定义了该类继承了哪个类。如果定义类的时候没有指明所继承的父类,则它自动继承自 Object 类

  1. implements InterfaceList

如果定义的类需要实现接口,则使用 implements InterfaceList 选项。一个类可以同时实现一个或一个以上的接口,如果实现多个接口,则接口名中间以逗号分开。

  1. 类体

类声明结束后是一对大括号{},用大括号括起来的部分称为类体。类体中通常包括 三部分内容:构造方法、成员变量、成员方法。其中构造方法用于创建类实例;成员变量定义对象状态;成员方法定义对象行为

public class Employee {//3个成员变量的定义String name;int age;double salary;//无参数构造方法public Employee() {}//一个实例方法public void sayHello() {System.out.println("My name is " + name);}//另一个实例方法public double computeSalary(int hours, double rate) {double totalSalary = salary + hours * rate;return totalSalary;}
}
1.2.1.2. 成员变量的定义

成员变量的声明格式是:

[public|private|protected][static][final] type variableName[=value];

注意:

用 protected 修饰的变量为保护变量,可以被同一个包中的类或子类访问;

没有使用访问修饰符的变量,只能被同一个包中的类访问;

用 private 修饰的变量称为私有变量,只能被同一个类的方法访问。 

实例变量和静态变量。如果变量用 static 修饰,则该变量称为静态变量,又称为类变量。没有用 static 修饰的变量称为实例变量

使用 final 修饰的变量称为最终变量,又称为常量。常量可以在声明的时候赋值,也可以在后面赋初值。一旦为其赋值,其值不能更改。

 

1.2.1.3. 构造方法的定义

构造方法又称为构造器(constructor),是类的一种特殊的方法。Java 中的每个类都有构造方法,它的作用是创建对象并初始化对象的状态。下面的代码定义了一个不带参数的构造方法。

public Employee();//不带参数的构造方法,方法体为空	
1.2.1.4. 成员方法的定义

方法用来实现对象的动态特征,Java 的方法必须定义在类体内,不能定义在类体外。

成员方法的定义包括方法的声明方法体的定义,一般格式如下:

[修饰符] returnType methodName([paramList]){//方法体
}

 1.2.2. 创建和使用对象

一般先根据需求设计(创建)类(Employee),然后在另一个类(EmployeeDemo) 中,创建该Employee 类的成员并调用Employee 类的方法。

现在创建一个Employee 类的对象,实例化,并调用该实例的变量和方法。

public class EmployeeDemo {public static void main(String[] args) {//声明并创建一个Employee对象Employee employee;employee = new Employee();//访问对象的成员(赋值)employee.name = "张三";employee.age = 28;employee.salary = 5000.00;//访问对象的成员(取值)System.out.println("姓名=" + employee.name);System.out.println("年龄=" + employee.age);System.out.println("工资=" + employee.salary);//调用对象的方法employee.sayHello();}
}
/*
姓名=张三
年龄=28
工资=5000.0
My name is 张三
*/
1.2.2.1. 用 new 创建对象

为了使用对象,一般要声明一个对象名,即声明该对象的引用(reference),然后使用 new 运算符调用类的构造方法创建对象。对象声明格式如下:

1.可以同时声明多个同类型的对象名,其中用逗号分隔

Employee emp1,emp2;

 2.可以将对象的声明和创建使用一个语句完成

Employee employee;
employee=new Employee();
//(1)+(2)等价于(4)
Employee employee=new Employee();

3.若对象仅在创建处使用,也可以不声明引用名,如下面语句直接创建一个Employee对象,然后调用其sayHello()方法

new Employee().sayHello();
1.2.2.2. 对象的使用 

创建一个对象引用后,可以通过点号运算符(.)来访问对象的成员变量和调用对象的成员方法

employee.name = "张三";
employee.sayHello();
1.2.2.3. 对象引用赋值 

对于对象的赋值,赋值时将该对象的引用(地址)赋值给变量

Employee employee1,employee2;
employee1 = new Employee();
employee2=employee1;	//employee1的引用赋值给employee2
public class Employee {String name;public static void main(String[] args){Employee employee1,employee2;employee1 = new Employee();employee2 = employee1;employee1.name = "张三";employee2.name = "李四";System.out.println("employee1.name=" + employee1.name);System.out.println("employee2.name=" + employee2.name);}
}
/*
employee1.name=李四
employee2.name=李四
*/

注意:employee1 和 employee2 指向同一个对象后不管后加入什么值两个对象最终都指向最后一个值 。

 

1.2.3. 构造方法

每个类都有构造方法(constructor),构造方法用来创建类的对象或实例。构造方法也有名称、参数和方法体。

构造方法与普通方法的区别是:

  1. 构造方法的名称必须与类名相同
  2. 构造方法不能有返回值,也不能返回void
  3. 构造方法必须在创建对象时用new运算符调用

构造方法定义的格式为:

[public|protected|private] ClassName([param list]) {// 方法体
}

注意:

  1. public、protected和private为构造方法的访问修饰符,它用来决定哪些类可以使用该构造方法创建对象
  2. 构造方法名必须与类名相同
  3. 构造方法可以带有参数
  4. 构造方法可以不唯一

 

构造方法主要作用是创建对象并初始化类的成员变量。对类的成员变量,若声明时和在构造方法都没有初始化,新建对象的成员变量值都被赋予默认值。

对于不同类型的成员变量,其默认值整理如下:

  • 整型数据的默认值是0
  • 浮点型数据默认值是0.0
  • 字符型数据默认值是’\u0000’
  • 布尔型数据默认值是false
  • 引用类型数据默认值是null

例如,假设在Employee类定义了一个构造方法Employee (String name, int age, double salary),现在要定义一个无参数的构造方法,可以在下面的构造方法中调用该构造方法。

public Employee(){this("张三", 28, 5000);
}

Java语言规定:

1、在构造方法中调用另一个构造方法,则this语句必须是第一条语句

2、this只能用在实例方法和构造方法中,不能用在static方法中

1.3.1. 静态变量

静态变量和实例变量的区别是:

实例变量具有自己的内存区域,因此这些实例变量是不同的,通常使用实例变量名的方式来访问;

静态变量共享同一个内存区域,每个对象对静态变量的修改都会影响到其他对象,通常使用类名+静态变量名的方式访问。

public class Person {String name;int age;static String schoolName;public Person(String name,int age){this.name=name;this.age=age;}public void say(){System.out.println("我是"+this.name+",今年"+this.age+",来自"+this.schoolName);}public void setSchoolName(String schoolName){this.schoolName=schoolName;}
}
public class PersonDemo {public static void main(String[] args){Person.schoolName="A大学";Person p1=new Person("张三",18);Person p2=new Person("李四",28);p1.setSchoolName("B大学");p2.say();			//output}
}

另外,static与final一起使用来定义类常量。例如,Java类库中的Math类中就定义了两个类常量:

public static final double E = 2.718281828459045 ;              
public static final double PI = 3.141592653589793 ; 

 可以通过类名直接使用这些常量:

System.out.println("面积=" + Math.PI * 10 * 10);

1.3.2. 静态方法

静态方法只能访问静态变量,不允许访问实例变量,静态方法不允许使用 thissuper 等关键字。通常,通过类名+静态方法名的方式来访问静态方法。

1.2.4.2. 方法重载

一个类中定义多个同名的方法,这称为方法重载(overloading),实现方法重载,要求同名的方法。

  1. 要么参数个数不同
  2. 要么参数类型不同
  3. 仅返回值不同不能区分重载的方法
public void display (int a){System.out.println("a = "+a);	
}
public void display (double d){System.out.println("d = "+d);	
}	
public void display(){System.out.println("无参数方法");	
}	
public void display(int a,int b){System.out.println("a = "+a+",b = "+b);	
}
 public static void main(String[] args){OverloadDemo obj = new OverloadDemo();obj.display();obj.display(10);obj.display(50,60);obj.display(100.0);
}

 

 

 

 

 

 

 

 

 

 

 

相关文章:

4.类,方法,对象

1.1.2. 面向对象程序设计的三大特征 1.1.2.1. 封装 面向对象编程核心思想之一就是将数据和对数据的操作封装在一起,形成一般的概念,比如类的概念。 1.1.2.2. 继承 继承体现了一种先进的编程模式。子类可以继承父类的属性和方法。 1.1.2.3. 多态 多…...

重学java 71.网络编程

人生不是坐等暴风雨过去,而是学会在雨中起舞 —— 24.6.14 一、网络编程的基础概念 1.概述: 在网络通信协议下,不同计算机上运行的程序,进行数据传输 比如:通信、视频通话、网络、邮件 只要是计算机之间通过网络进行数据传输,就有…...

Linux驱动面试题

1.导出符号表的原理? 2.字符设备驱动的框架流程 open read wirte close 是系统调用(从用户空间进入内核空间的唯一的方法)会产生swi软中断《也会存在软中断号》(从User模式切换到SVC(管理模式)下因为在…...

git 如何强制下拉某个分支

要强制下拉Git仓库中的某个分支&#xff0c;可以使用以下命令&#xff1a; 第一步&#xff1a; git reset --hard HEAD第二步 git pull origin <分支名> git reset --hard HEAD 是一个 Git 命令&#xff0c;它的作用是将当前分支的头部重置为当前提交&#xff08;HEAD…...

linux-touch指令

目录 语法 选项 示例 touch 是一个在 Linux 系统中常用的命令&#xff0c;它用于创建空文件&#xff0c;或者如果文件已经存在&#xff0c;则更新文件的访问和修改时间戳。下面是 touch 命令的完整使用说明&#xff1a; 语法 touch [选项]... 文件... 选项 -a 或 --time…...

海外仓系统有哪些?主流海外仓系统类型、优缺点,不同海外仓如何选择

作为海外仓的经营者&#xff0c;不管海外仓大小&#xff0c;你都应该知道海外仓系统对提升仓库管理效率有多重要。 不过现在市场上的海外仓系统确实种类太多了&#xff0c;想选到一个适合自己海外仓&#xff0c;性价比又比较高的wms海外仓系统也不是一件容易的事情。 本文会详…...

05-5.4.1 树的存储结构

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…...

Spring事务管理与Spring AOP详解

Spring事务管理与Spring AOP详解 一、引言 在企业级应用开发中&#xff0c;事务管理和面向切面编程&#xff08;AOP&#xff09;是两个至关重要的概念。Spring框架作为Java企业级应用的首选框架之一&#xff0c;为事务管理和AOP提供了强大的支持。本文将详细解析Spring的事务…...

LaTeX 的使用

文章目录 TeX 编辑器文档类型中文编译文档结构preamble 导言区&#xff08;不能放正文内容&#xff09;document body 正文区 正文内容目录段落列表无序列表有序列表 图片表格交叉引用段落图片表格 转义符 数学公式数学符号行内公式行间公式有公式计数器无公式计数器 公式包含文…...

Text2SQL之Vanna优化

文章目录 前言一、优化方向二、干就完了一次性生成多个Question-SQL对先生成一个问题,再根据DDL和业务数据生成SQL总结前言 前阵子写了篇Text2SQL的简单介绍,发现其也是RAG只会,写下了Text2SQL之不装了,我也是RAG 最近也一直在做Text2SQL的优化,于是把自己的一些心得,总…...

船舶行业信息安全解决方案介绍

船舶行业信息安全背景&#xff1a; 近年来随着经济复苏、疫情与国际形势影响国内外船舶海运业务蓬勃发展&#xff0c;在业务量激增的背景下出现多类信息安全事件。其中2017年&#xff0c;马士基集团遭到勒索软件攻击&#xff0c;内部业务系统和码头操作系统均受到严重影响&…...

Typora—适用于 Mac 和 Win 系统的优秀 Markdown 文本编辑器

Typora 是一款适用于 Mac 和 Win 系统的优秀 Markdown 文本编辑器&#xff0c;它以其简洁易用的界面和强大的功能受到了众多用户的喜爱。 首先&#xff0c;Typora 的界面设计非常简洁直观&#xff0c;没有过多繁杂的菜单和按钮&#xff0c;让用户能够专注于写作本身。它采用实时…...

产品经理的未来在哪里?

【同学聚会】 医生说&#xff1a;你生病的话可以找我。 老师说&#xff1a;你孩子成绩不好时找你辅导。 律师说&#xff1a;你遇上官司时我帮你。 程序员说&#xff1a;你电脑坏了时我帮你修理。 产品经理说&#xff1a;我……好像无一技之长。&#xff08;瞬间开始怀疑人…...

火车头采集怎么使用GPT等AI原创文章

火车头采集官方并没有GPT、百度文心一言AI、阿里通义千问AI、Kimi大模型等AI功能&#xff0c;但支持接入插件&#xff0c;可以编写相应人工智能AI原创文章插件&#xff08;火车头采集支持PHP和c#这2种语言的插件编写&#xff09;&#xff0c;或者导入第三方封装好的GPT等AI原创…...

多元多项式的特征列与零点的关系定理

下面这个定理来自《计算机代数》6.1三角列与特征列&#xff08;王东明、夏壁灿著&#xff09; 【定理】 设 C [ C 1 , … , C r ] \mathbb{C }\left\lbrack C_{1},\ldots,C_{r} \right\rbrack C[C1​,…,Cr​]为多项式组 P ⊂ K [ x ] \mathbb{P \subset}\mathcal{K\lbrack}\…...

git - LFS 使用方法

安装Git LFS 访问 Git LFS官网 下载适用于您操作系统的版本。 Linux用户&#xff0c;解压缩下载的.tar.gz文件&#xff0c;并通过终端运行安装脚本。 tar -xvf git-lfs-linux-amd64-vX.Y.Z.tar.gz cd git-lfs-X.Y.Z sudo ./install.sh 初始化Git LFS # 全局启用 git lfs i…...

提高磁盘可靠性的技术:保障数据安全的四大方法

目录 1. 第一级容错技术 磁盘镜像&#xff08;Mirroring&#xff09; 工作原理 RAID 1 工作原理 优点 缺点 适用场景 示例 2. 第二级容错技术 概述 RAID 5 RAID 6 优点 缺点 适用场景 3. 基于集群系统的容错技术 概述 Hadoop HDFS Ceph 优点 缺点 适用场…...

CesiumJS【Basic】- #006 浏览器控制台查看位置角度

文章目录 浏览器控制台查看位置角度1 目标 浏览器控制台查看位置角度 1 目标 浏览器控制台查看位置角度...

Mac 终端报错 zsh: command not found: brew 解决方案

Homebrew安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装成功后&#xff0c;在终端输入下面命令 brew -v如果成功输出brew版本&#xff0c;则安装成功 关闭终端重新打开终端&#xff0c;报错zsh: comm…...

详解 HBase 的常用 API

一、环境准备 创建一个 Maven 工程并引入依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.3.1</version> </dependency> <dependency><groupId>org.apach…...

JSR303校验

校验的需求 前端请求后端接口传输参数&#xff0c;需要校验参数。 在controller中需要校验参数的合法性&#xff0c;包括&#xff1a;必填项校验、数据格式校验等在service中需要校验业务规则&#xff0c;比如&#xff1a;课程已经审核过了&#xff0c;所以提交失败。 servi…...

04 远程访问及控制

1、SSH远程管理 SSH是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。 SSH协议对通信双方的数据传输进行了加密处理&#xff08;包括用户登陆时输入得用户口令&#xff09;。 终端&#xff1a;接收用户的指令 TTY终端不能远程&#xff0c;它…...

[晕事]今天做了件晕事38 shell里的source 点号

今天碰到一个问题脚本里使用点号引入某个文件形式如下&#xff1a; . /tmp/abc但是脚本运行出现错误&#xff0c;一开始还以为是/tmp没有可执行权限&#xff08;https://mzhan017.blog.csdn.net/article/details/112178736#t16&#xff09;&#xff0c;导致abc运行不了。 后来…...

java如何分割字符串

java要实现对字符串的分割&#xff0c;需要用到split语句 语法格式是 str.split(分隔符) 其中 str是字符串 示例代码如下 public class Stringsplit {public static void main(String[] args) {String a"蒸羊羔&#xff0c;蒸熊掌&#xff0c;蒸鹿尾&#xff0c;烧花…...

胡说八道(24.6.12)——数字电子技术以及Modelsim

上回书说到数电中的最常用的表达式——逻辑表达式(由布尔代数组成)以及常用的两种图表——真值表(真值表表示的是所有的输入可能的线性组合以及输出)和卡诺图(卡诺图则是一种化简工具&#xff0c;排除冗余项&#xff0c;合并可合并项)。 今天&#xff0c;先来看看昨天说的基本逻…...

【Android面试八股文】AsyncTask中的任务是串行的还是并行的

文章目录 串行执行并行执行示例代码串行执行(默认)并行执行总结AsyncTask 的任务执行方式可以是串行的,也可以是并行的,这取决于使用的执行器 ( Executor)。 串行执行 默认情况下,AsyncTask 使用的是 SERIAL_EXECUTOR,即任务按顺序一个接一个地执行。这意味着下一个任务…...

无人机RTMP推流EasyDSS直播平台推流成功,不显示直播按钮是什么原因?

互联网视频云平台/视频点播直播/视频推拉流EasyDSS支持HTTP、HLS、RTMP等播出协议&#xff0c;并且兼容多终端&#xff0c;如Windows、Android、iOS、Mac等。为了便于用户集成与二次开发&#xff0c;我们也提供了API接口供用户调用和集成。在无人机场景上&#xff0c;可以通过E…...

经验分享,xps格式转成pdf格式

XPS 是一种电子文档格式、后台打印文件格式和页面描述语言。有时候微软默认打印机保存的是xps格式&#xff0c;我们如何转换为pdf格式呢&#xff0c;这里分享一个免费好用的网站&#xff0c;可以实现。 网站&#xff1a;https://xpstopdf.com/zh/ 截图&#xff1a;...

基于51单片机的音乐彩灯设计

基于51单片机的音乐彩灯设计 &#xff08;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 由STC单片机ADC0809模块LM386功放模块喇叭音频接口发光二极管电源构成 1.通过音频线输入可以播放电脑、手机、MP3里面的音乐。 2.AD对音频…...

API接口设计的艺术:如何提升用户体验和系统性能

在数字时代&#xff0c;API接口的设计对于用户体验和系统性能有着至关重要的影响。良好的设计可以显著提升应用程序的响应速度、可靠性和易用性。以下是几个关键点&#xff0c;帮助改善API接口的设计&#xff1a; 1. 理解并定义清晰的要求 用户研究&#xff1a;与最终用户进行…...

佛山市公司网站建设哪家好/网络关键词排名软件

模板方法模式&#xff08;Template Method&#xff09;&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。该模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。使用场景&#xff1a;1、一次性实现一个算法的不变的部分&#…...

做网站具体流程步骤/软文范文

2.1 问题 本案例要求&#xff1a; 一共安装5台虚拟机 在所有机器中部署ES 启动服务查看验证集群状态 2.2 步骤 实现此案例需要按照如下步骤进行。 步骤一&#xff1a;安装elasticsearch和java-1.8.0-openjdk&#xff0c;同步配置文件 备注&#xff1a;在步骤一已经安装了一台…...

长沙岳麓区做网站/百度搜索推广技巧

对于每一个站长而言&#xff0c;都会遇到要进行网站测试的时候。这个时候&#xff0c;往往需要备份数据库。如果按照一般的操作方式&#xff0c;都是先把数据库导出并备份到本地&#xff0c;然后再服务器上测试。如果一切正常还好&#xff0c;一旦出了问题&#xff0c;就又得把…...

专业做足球体彩网站/seo信息网

这篇文章的适用范围其实不仅限于Java后端或Java Web&#xff0c;不过其中有些是拿这方面举例的&#xff0c;在其它方面&#xff0c;大家可以举一反三&#xff0c;应该也能得到些启示。 我们在面试时&#xff0c;会发现有些候选人技术不错&#xff0c;比如在Java Web后端方面&am…...

网站标题的重要性/网站优化方案

一、Java平台体系及应用场景从1995年Sun Microsystems公司正式推出Java&#xff0c;到2006年时Sun公司将其开源&#xff0c;迄今为止已经有了20年的历史。Java本身已不仅仅只是一门面向对象的编程语言&#xff0c;而是由一系列计算机软件和规范形成的技术体系&#xff0c;这个技…...

网站信息内容建设管理/网页设计模板网站

在这里处理一点上传脚本.我正在尝试检查上传的图像是否真的是图像,而不仅仅是重命名的PHP文件.发布脚本后,我可以打印数组foreach ($_FILES[images][name] as $key > $value){print_r(getimagesize($_FILES[images][tmp_name][$key]));这很好,所以它不会返回false.但即使我上…...