面向对象编程(OOP)基础:Java入门指南
引言
随着计算机技术的发展,软件的应用越来越复杂,单个程序的功能也逐渐增多。为了提高代码的复用性和可维护性,Java语言引入了**面向对象编程(Object-Oriented Programming, OOP)**这一设计理念。
OOP是一种设计程序时考虑如何将复杂世界中的对象进行建模的方法。通过将复杂的系统分解成较小的部分(即对象),可以更清晰地理解和解决问题。在Java中,OOP的核心概念有三个:类、实例和方法。
1. 类(Class)
定义
在Java中,类是Java程序的基本单位。一个类代表一组具有相同行为的同质对象(objects)的集合。它定义了一组属性(数据成员)和一系列操作(方法),这些操作可以通过实例来执行。
创建第一个类
要理解类的概念,先创建一个简单的类:
public class Person {// 类变量/数据成员String name;int age;// 构造函数public Person(String n, int a) { // 构造函数用于初始化实例变量name = n;age = a;}// 方法void greet() {System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");}
}
类的属性
类中的属性分为两种:
-
静态变量:所有实例共享同一个值。
private static String defaultName = "Unknown";
-
实例变量:每个实例都有自己的独立值。
String instanceName; // 实例变量
类的生命周期
类在编译时创建,其生命周期包括以下几个阶段:
- 定义阶段(Declaration):检查语句是否符合语法规则。
- 初始化阶段(Initialization):为静态变量分配内存。
- 执行阶段(Execution):
- 创建实例(实例化)。
- 初始化实例变量。
- 销毁阶段(Termination):释放动态分配的内存。
2. 实例(Instance)
实例是类的一个实际例子。通过实例,我们可以创建和操作具体对象。在Java中,实例化一个类使用的是构造函数。
创建实例
Person person = new Person("John Doe", 30); // 使用默认构造函数或自定义构造函数
示例:调用方法
实例可以调用类中的所有方法:
person.greet(); // 输出: Hello, my name is John Doe and I am 30 years old.
多态性(Polymorphism)
多态性是Java面向对象编程的重要特性之一。它允许在不改变接口定义的情况下,通过子类实例化父类,并调用父类的方法。
示例:
void sayHello() {System.out.println("Hello, I'm " + name);
}public class Animal { // 父类void sayHello() {System.out.println("I'm an animal");}
}public class Dog extends Animal { // 子类public String name; // 实例变量void sayHello() {System.out.println("I'm a dog with the name: " + name);}
}public static void main(String[] args) {Animal a = new Animal(); // 调用父类方法,输出"I'm an animal"Dog d = new Dog("Buddy"); // 调用子类方法,输出"I'm a dog with the name: Buddy"
}
3. 方法(Method)
方法是类中的操作逻辑。通过实例可以调用这些方法。
创建一个简单的方法
public class Greeting {void greet(String name) { // 方法定义System.out.println("Hello, " + name);}public static void main(String[] args) {greet("John"); // 调用方法,输出: Hello, John}
}
静态方法(Static Method)
静态方法属于类而不是实例。它们可以不绑定到特定实例上。
示例:
public class StaticMethod {static void printHello() { // 静态方法System.out.println("Hello, World!");}public static void main(String[] args) {printHello(); // 输出: Hello, World!}
}
方法调用的灵活性
可以通过实例、类或静态的方式调用方法。例如:
Person person = new Person("John", 30);
person.greet("Alice"); // 调用实例的方法,输出: Hello, Alice
Person::greet // 使用类型安全的方式调用实例的方法(Java 1.5及以上)
Class<Person> pClass = new Class<Person>(); // 创建Person类的引用
pClass.greet("Bob"); // 调用静态方法 greet()
4. 构造函数(Constructor)
构造函数用于在对象初始化时设置初始值。默认情况下,Java会为每个类自动生成一个无参构造函数。
定义构造函数
public class Person {String name;int age;// 默认构造函数public Person() { }// 有参构造函数public Person(String n, int a) {name = n;age = a;}
}
示例:调用构造函数
Person p1 = new Person(); // 使用默认构造函数,name和age为默认值(null或0)
Person p2 = new Person("Alice", 25); // 使用有参构造函数
多个构造函数
可以定义多个构造函数,每个构造函数的参数列表必须不同。
示例:
public class Shape {public Shape() { } // 默认构造函数public Shape(String type) { // 有参构造函数1:设置type为字符串this.type = type;}public Shape(int perimeter, String type) { // 有参构造函数2:设置perimeter和typethis.perimeter = perimeter;this.type = type;}
}
5. 小结
通过以上内容,我们可以得出以下结论:
- 类是Java程序的基本单位。
- 实例是从类中创建的具体对象。
- 方法允许实例调用特定的操作逻辑。
- 构造函数用于初始化对象的属性。
这三个概念共同构成了面向对象编程的核心思想。理解了它们之后,读者可以开始学习更多的Java高级特性,如:
- 包装类(包装者与被包装者)
- 内部类
- 多线程编程
- 流式处理
- 抛出和捕获异常
通过实践这些概念,并编写自己的第一个Java程序,读者可以更好地掌握面向对象编程的思想。
相关文章:
面向对象编程(OOP)基础:Java入门指南
引言 随着计算机技术的发展,软件的应用越来越复杂,单个程序的功能也逐渐增多。为了提高代码的复用性和可维护性,Java语言引入了**面向对象编程(Object-Oriented Programming, OOP)**这一设计理念。 OOP是一种设计程序…...
day7作业
编写一个如下场景: 有一个英雄Hero类,私有成员,攻击(Atx),防御(Defense),速度(Speed),生命值(Blood),以及所有的set get 方…...

图像处理之图像边缘检测算法
目录 1 图像边缘检测算法简介 2 Sobel边缘检测 3 经典的Canny边缘检测算法 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 参考 1 图像边缘检测算法简介 图像边缘检测是计算机视觉和图像处理中的基本问题,主要目的是提取图像中明暗变化明显的边缘细节…...

第二十五 :搭建 pinia 环境
第一步:npm install pinia 第二步:操作src/main.ts import { createApp } from vue import App from ./App.vue /* 引入createPinia,用于创建pinia */ import { createPinia } from pinia /* 创建pinia */ const pinia createPinia(…...
学习Java数组操作:从基础到高级技巧详解
在Java编程中,数组是一种非常基础且常用的非 primitives 数据结构,它用于存储一组相同类型的值。无论是数据处理、遍历还是其他操作,数组都是一个不可或缺的工具。本文将从数组的基本概念开始,逐步介绍常用的操作方法,…...

算法题(79):两个数组的交集
审题: 本题需要我们查找两个给定数组的无重复数据交集,并以数组的形式返回 思路: 方法一:set 之前我们学习过unordered_set的使用,但是unordered_set是无序的,而这里我们的比对算法需要有序数据,…...

TFChat:腾讯大模型知识引擎+飞书机器人实现AI智能助手
效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...

Linux红帽:RHCSA认证知识讲解(四)修改远程配置文件,取消root禁用,便于使用root身份远程
Linux红帽:RHCSA认证知识讲解(四)修改远程配置文件,取消root禁用,便于使用root身份远程 前言一、远程连接的用途和原因二、通过 ssh 远程登陆系统三、默认限制及解决方案(一)非常规方法一&#…...

验证码介绍及生成与验证(HTML + JavaScript实现)
验证码介绍及生成与验证(HTML JavaScript实现) 验证码 验证码(全自动区分计算机和人类的图灵测试,CAPTCHA ,Completely Automated Public Turing test to tell Computers and Humans A…...

文心一言AI创意画
介绍 文心一言是百度推出的新一代知识增强大语言模型,属于文心大模型家族的新成员。它能够与人对话互动、回答问题、协助创作,高效便捷地帮助人们获取信息、知识和灵感。 特点 文心一言基于数万亿数据和数千亿知识进行融合学习,采用预训…...
WebRTC解析
一、WebRTC 协议概述 WebRTC(Web Real-Time Communication)是由 Google 发起并成为 W3C 标准的实时音视频通信技术,核心特点: 零插件:浏览器原生支持端到端加密(SRTP DTLS)P2P 优先架构&…...

升级Office软件后,Windows 系统右键里没有新建Word、Excel、PowerPoint文件的解决办法
我办公用的电脑,Office 2013 已经用了好多年,最近突发奇想给升级到了 Ofiice 2024。升级过程还蛮顺利的,但是安装完成后,发现点右键里没有新建Word、Excel、PowerPoint,开始菜单里 Word、Excel、PowerPoint 使用都正常…...

车载DoIP诊断框架 --- 连接 DoIP ECU/车辆的故障排除
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
洛谷每日1题-------Day4__陶陶摘苹果
# P1046 [NOIP 2005 普及组] 陶陶摘苹果 ## 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 $10$ 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 $30$ 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩…...

萌新学 Python 之模块管理
模块就是一个 python 代码文件,模块可以包含函数、类,可以提高代码复用率提高效率 python 模块主要分为三种: 1.内置模块:python 自带的模块,导入后可以直接使用,比如 import 模块名 2.第三方模块&#…...
6.3 - UART串口数据发送之中断
文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验使用中断方式实现UART串口数据的连续发送。 2 系统框图 参见6.1。 3 软件设计 注意事项: 系统上电、程序下载后,此时TX FIFO虽然为空,但并不会触发空中断;空中断…...
Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器
Fisher信息矩阵与自然梯度下降:机器学习中的优化利器 在机器学习尤其是深度学习中,优化模型参数是一个核心任务。我们通常依赖梯度下降(Gradient Descent)来调整参数,但普通的梯度下降有时会显得“笨拙”,…...
Mysql基础-多表查询(详细版)
目录 一、表的关系类型与适用场景二、连接方式与使用场景三、易错点与注意事项四、总结 一、表的关系类型与适用场景 1. 一对一关系 场景:一个表的记录对应另一个表的唯一记录 案例:用户表 用户详情表 CREATE TABLE users (id INT PRIMARY KEY,name…...

港科大提出开放全曲音乐生成基础模型YuE:可将歌词转换成完整歌曲
YuE是港科大提出的一个开源的音乐生成基础模型,专为音乐生成而设计,专门用于将歌词转换成完整的歌曲(lyrics2song)。它可以生成一首完整的歌曲,时长几分钟,包括朗朗上口的声乐曲目和伴奏曲目。YuE 能够模拟…...

Python学习第十七天之PyTorch保姆级安装
PyTorch安装与部署 一、准备工作二、pytorch介绍三、CPU版本pytorch安装1. 创建虚拟环境2. 删除虚拟环境1. 通过环境名称删除2. 通过环境路径删除 3. 配置镜像源4. 安装pytorch1. 首先激活环境变量2. 进入pytorch官网,找到安装指令 5. 验证pytorch是否安装成功 四、…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...