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

【Java面向对象】对象和类

文章目录

  • 1.为对象定义类
  • 2.定义类
    • 2.1 主类
  • 3.类与对象
    • 3.1 构造方法
    • 3.2 通过引用变量访问对象
    • 3.3 访问对象的数据和方法
    • 3.4 引用数据域和 null 值
    • 3.5 基本类型变量和引用类型变量的区别
  • 4.常见的类

1.为对象定义类

面向对象程序设计(OOP) 就是使用对象进行程序设计。对象 (object) 代表现实世界中可以明确标识的一个实体。

  • 一个对象的状态 (state, 也称为特征 (property) 或属性 (attribute)) 是由数据域及其当前值来表示的。
  • 一个对象的行为 (behavior, 也称为动作 ( action)) 是由方法定义的。调用对象的一个方法就是要求对象完成一个动作。

使用一个通用类来定义同一类型的对象。
类是一个模板、蓝本或者合约,用来定义对象的数据域以及方法。
对象是类的实例。可以从一个类中创建多个实例。
创建实例的过程称为实例化 对象 (object) 和实例 (instance) 经常是可以互换的。类和对象之间
的关系类似于苹果派配方和苹果派之间的关系。

Java 类使用变量定义数据域,使用方法定义动作。除此之外,类还提供了一种称为构造方法 ( constructor) 的特殊类型的方法,调用它可以创建一个新对象。构造方法本身是可以完成任何动作的,但是设计构造方法是为了完成初始化动作,例如初始化对象的数据域。

将包含 main 方法的类称为主类 (main class)。

2.定义类

public class Test{public static void main(String args){Circle c1 = new Circle();Circle c2 = new Circle(1.0);System.out.println(c2.getRadius());}
}class Circle{//属性double radius;//方法Circle(){radius = 1;}Circle(double a){radius = a;}double getRadius(){return radius;}
}

也可以把Test和Circle放一起

public class Circle{public static void main(String args){Circle c1 = new Circle();Circle c2 = new Circle(1.0);System.out.println(c2.getRadius());}//属性double radius;//方法Circle(){radius = 1;}Circle(double a){radius = a;}double getRadius(){return radius;}
}

2.1 主类

文件中只能有一个类是公共( public)类。公共类必须与文件同名。
主类包含 main 方法,运行这个程序时,Java 运行时系统会调用主类中的 main 方法。
使用类的程序通常称为该类的客户( client)。

3.类与对象

3.1 构造方法

  • 构造方法必须和所在类名字相同。
  • 构造方法没有返回值类型,甚至连 void 也没有。
  • 构造方法是在创建一个对象时由 new 操作符调用的。构造方法的作用是初始化对象.
  • 构造方法可以重载

通常,类会提供一个没有参数的构造方法 .这样的构造方法称为无参构造方 法 (no-arg 或 no-argument constructor) .
在一个类中,用户可能没有定义构造方法。在这种情况下,类中会隐式定义一个方法体为空的无参构造方法。这个构造方法称为默认构造方法 (defaultconstructor), 当且仅当类中没有明确定义任何构造方法时才会自动提供。

3.2 通过引用变量访问对象

对象是通过对象引用变量 ( reference variable) 来访问的,该变量包含了对对象的引用。
本质上来说,类是程序员定义的类型。类是一种引用类型 (referencetype), 这意味着该类类型的变量都可以引用该类的一个实例。

// 声明对象引用变量
ClassName objectRefVar;// 创建一个对象
new ClassName();// 声明对象引用变量、创建对象以及将对象的引用赋值给这个变量的语句
C1assName objectRefVar = new ClassName() ;

从表面上看,对象引用变量中似乎存放了一个对象,但事实上,它只是存放了对该对象的引用。严格地讲,对象引用变量和对象是不同的,但是大多数情况下,这种差异是可以忽略的。
另外,在 Java 中,数组被看作对象。数组是用 new 操作符创 建的。一个数组变量实际上是一个包含数组引用的 变量。

3.3 访问对象的数据和方法

在面向对象编程中,对象成员指该对象的数据域和方法。在创建一个对象之后,它的数据访问和方法调用可以使用点操作符 ( .) 来进行,该操作符也称为对象成员访问操作符( object member access operator)

objectRefVar.dataField // 引用对象的数据域
objectRefVar .method(arguments); //调用对象的方法

之前的数据域 radius 称作实例变量 ( instance variable), 因为它依赖于某个具体的实例。基于同样的原因. getArea 方法称为实例方法 (instance method), 因为只能在具体的实例上调用它。实例方法被调用的对象称为调用对象 (calling object)

3.4 引用数据域和 null 值

数据域也可能是引用型的。

class Student{String name;
}

String 是一个预定义的 Java 类。

如果一个引用类型的数据域没有引用任何对象,那么这个数据域就有一个特殊的 Java值 null。null 同 true 和 false —样都是字面值。true 和 false 是 boolean 类型字面值,而null 是引用类型字面值。

引用类型数据域的默认值是 null, 数值类型数据域的默认值是 0, boolean 类型数据域的默认值是 false, 而 char 类型数据域的默认值是 1\u0000
但是,Java 没有给方法中的局部变量赋默认值

3.5 基本类型变量和引用类型变量的区别

每个变量都代表一个保存了存储值的内存位置。声明一个变量时,就是在告诉编译器这个变量可以存放什么类型的值。

  • 对基本类型变量来说,对应内存所存储的值是基本类型值
  • 对引用类型变量来说,对应内存所存储的值是一个引用,是对象的存储地址

将一个变量赋值给另一个变量时,另一个变量就被赋予同样的值。

  • 对基本类型变量而言,就是将一个变量的实际值赋给另一个变量。
  • 对引用类型变量而言,就是将一个变量的引用赋给另一个变量。说白了就是,赋值之后就指向同一个对象了。

指向对象的变量指向新的对象后,以前引用的对象就不再有用,因此,现在它就成为垃圾 (garbage)。垃圾会占 用内存空间。Java 运行系统会检测垃圾并自动回收它所占据的空间,这个过程称为垃圾回收
(garbage collection )。
可以显式地给该对象的引用变量赋 null 值。如果该对
象没有被任何引 用 变量所引 用,Java 虚拟机将自动回收它所占据的空间。

4.常见的类

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关文章:

【Java面向对象】对象和类

文章目录 1.为对象定义类2.定义类2.1 主类 3.类与对象3.1 构造方法3.2 通过引用变量访问对象3.3 访问对象的数据和方法3.4 引用数据域和 null 值3.5 基本类型变量和引用类型变量的区别 4.常见的类 1.为对象定义类 面向对象程序设计(OOP) 就是使用对象进行程序设计。对象 (obje…...

在微服务架构架构中父工程中的`<dependencyManagement>`和 `<dependencies>`的区别

在微服务架构架构中父工程中的<dependencyManagement>和 <dependencies>的区别&#xff1a; 在微服务架构中&#xff0c;通常会有一个父工程&#xff08;或称作聚合工程&#xff09;来管理一组相关的子模块&#xff08;即各个微服务&#xff09;。Maven 的 <de…...

Docker安装Zookeeper、RocketMQ

安装Zookeeper 拉取镜像 docker pull zookeeper:3.9.2启动容器 -d后台启动&#xff0c;-p映射容器2181端口到宿主机2181端口&#xff0c;限制容器最大内存占用为128m&#xff0c;–restart容器自动重启 docker run -d -p 2181:2181 -m 128m --restartalways --name zookeepe…...

Ubuntu 磁盘扩容

1.下载工具 sudo apt-get install gparted 2.调整大小...

如何在QGC中接收和处理无人机上传的各种传感器数据(如GPS、IMU等)。

在 QGroundControl (QGC) 中接收和处理无人机上传的各种传感器数据&#xff08;如 GPS、IMU 等&#xff09;&#xff0c;主要通过 MAVLink 协议实现。MAVLink 是一种轻量级的消息传输协议&#xff0c;用于无人机和地面站之间的通信。QGC 通过 MAVLink 消息接收来自无人机的传感…...

Spring配置Bean自己的关系:继承和依赖

继承&#xff1a;这里的继承不是Java中类之间的继承&#xff0c; 是指配置文件中Bean配置项之间的继承。 用parent属性&#xff0c;配置要继承的bean&#xff0c;这样可以把相同的部分去去掉&#xff0c;下上两个bean的关系就变成了父bean和子bean&#xff0c; 子bean可以继承父…...

科技与狠活

科技与狠货&#xff0c;已经见怪不怪了 从黑龙江到海南&#xff0c;从上海到新疆&#xff0c;960万平方公里&#xff0c;十三亿人&#xff0c;每个地方都是科技与狠活 在抖音上面看到一个评论&#xff0c;如果蔬菜没科技与狠活&#xff0c;估计会很贵&#xff0c;但是我想到在…...

Vue:axios请求数据转存leanCloud

思路&#xff1a; 采用axios请求需要的数据&#xff0c;查看leanCloud中数据批量存储的格式&#xff0c;将两个数据进行对比&#xff0c;将请求得到的数据封装为云服务存储的格式&#xff0c;再发leanCloud存储数据的请求完成转存 1.封装js代码 //批量操作新增数据 import r…...

实战篇(九):解锁3D魔方的秘密:用Processing编程实现交互式魔方

解锁3D魔方的秘密:用Processing编程实现交互式魔方 使用 Processing 创建一个 3D 魔方效果展示1. 安装 Processing2. 项目结构3. 代码实现4. 代码解释4.1. 初始化魔方4.2. 绘制魔方4.3. 处理鼠标事件4.4. 检查点击的面4.5. 旋转面和最终确定旋转5. 运行和测试6. 细节解释6.1. …...

Android系统上常见的性能优化工具

Android系统上常见的性能优化工具 在Android系统开发中&#xff0c;性能优化是一个重要的任务&#xff0c;有许多工具可以帮助你进行各种方面的性能分析和优化。以下是一些常见的Android性能优化工具及其用途和使用方法&#xff1a; 1. Android Studio Profiler 功能: 提供CP…...

TG创建小程序交互APP登录以及机器人信息

1、搜索 BotFather &#xff0c;输入命令 /newbot 创建机器人。 2、修改机器人信息 /mybots 编辑名称 : 修改机器人名称 编辑关于: 修改关于 hayden yyds&#xff0c;修改以后打开机器人会出现在下图 编辑描述 : 机器人的描述 编辑描述图片 : 机器人的图片 编辑 Botpic…...

探索大模型能力--prompt工程

1 prompt工程是什么 1.1 什么是Prompt&#xff1f; LLM大语言模型终究也只是一个工具&#xff0c;我们不可能每个人都去训一个大模型&#xff0c;但是我们可以思考如何利用好大模型&#xff0c;让他提升我们的工作效率。就像计算器工具一样&#xff0c;要你算10的10倍&#x…...

【经验分享】运用云服务器实现挂机手机网课的操作,部分手机软件适用

目录 第一步下载手机模拟器 第二步找到模拟器的文件位置 第三步找到模拟器的下载文件进行打包处理 ​编辑 第四步将模拟器粘贴到云服务器上 第五步运行程序 第六步在模拟器中下载网课软件 第一步下载手机模拟器 这里我下载的是联想模拟器&#xff0c;用来模拟手机环境 随…...

【从0到1进阶Redis】主从复制 — 主从机宕机测试

上一篇&#xff1a;【从0到1进阶Redis】主从复制 测试&#xff1a;主机断开连接&#xff0c;从机依旧连接到主机的&#xff0c;但是没有写操作&#xff0c;这个时候&#xff0c;主机如果回来了&#xff0c;从机依旧可以直接获取到主机写的信息。 如果是使用命令行&#xff0c;来…...

Flask启动5000端口后关不掉了?

事情是这样的&#xff1a; 使用python app.py启动flask应用后&#xff0c;又启动了另一个flask测试应用&#xff0c;也能启动成功&#xff0c;也没有报设么端口冲突&#xff0c;关闭黑窗口后&#xff0c;访问还是有守护进程在运行&#xff0c; 为什么我知道5000还在运行&#…...

Redis的热key解决

1、Redis热Key会带来哪些问题 1、流量集中&#xff0c;达到物理网卡上限。 当某一热点 Key 的请求在某一主机上超过该主机网卡上限时&#xff0c;由于流量的过度集中&#xff0c;会导致服务器中其它服务无法进行。 2、请求过多&#xff0c;缓存分片服务被打垮。 如果热点过于…...

在linux中查找 / 目录下的以.jar结尾的文件(find / -name *.jar)

文章目录 1、查找 / 目录下的以.jar结尾的文件 1、查找 / 目录下的以.jar结尾的文件 [rootiZuf6332h890vozldoxcprZ ~]# find / -name *.jar /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.342.b07-1.el9_0.x86_64/lib/security/policy/limited/US_export_policy.ja…...

【Python爬虫教程】第6篇-使用session发起请求

为什么要使用session 前面介绍了如何使用reqesuts发起请求&#xff0c;今天介绍如何使用session发起请求。session简单理解就是一种会话机制&#xff0c;在浏览器中我们登录完之后&#xff0c;后面再请求服务数据都不需要再登录了&#xff0c;以为Cookie里已经保存了你的会话状…...

【Hot100】LeetCode—763. 划分字母区间

目录 题目1- 思路2- 实现⭐763. 划分字母区间——题解思路 3- ACM 实现 题目 原题连接&#xff1a;763. 划分字母区间 1- 思路 思路 目标&#xff1a;同样的字母 字符串尽可能的长 问1&#xff1a;怎么确定字母数 ——> 哈希表问2&#xff1a;怎么让字符尽可能的长&#…...

分布式服务基于Zookeeper的分布式锁的实现

一、序言 ZooKeeper 的分布式锁机制是一种协调多个客户端访问共享资源的方法。通过使用 ZooKeeper 的持久化节点和临时顺序节点&#xff0c;可以实现高效且可靠的分布式锁。下面是分布式锁的工作原理以及如何使用它的具体步骤。 二、Zookeeper分布式锁的核心原理 创建锁目录节…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...