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

Java 编程旅程(二)


在前一篇博客中,我们介绍了 Java 编程的基础知识和入门步骤。现在,我们将继续深入探讨 Java 的一些高级特性,以帮助你进一步提升编程技能。通过这篇博客,你将学习到更复杂的概念和技术,比如面向对象编程(OOP)的深入应用、异常处理、集合框架以及多线程编程等内容。


1. 面向对象编程进阶

Java 是一种面向对象的编程语言。要真正掌握 Java,理解并灵活运用面向对象的特性至关重要。我们将深入探讨类、对象、继承、多态和封装等关键概念。

1.1 继承与方法重写

继承是 OOP 中的一项重要特性,它允许一个类继承另一个类的属性和方法,从而实现代码重用。在 Java 中,所有类都默认继承自 Object 类。

示例:继承和方法重写
// 父类 Animal
class Animal {public void speak() {System.out.println("Animal speaks");}
}// 子类 Dog 继承自 Animal
class Dog extends Animal {// 重写父类的 speak 方法@Overridepublic void speak() {System.out.println("Dog barks");}
}public class Main {public static void main(String[] args) {Animal animal = new Animal();animal.speak();  // 输出: Animal speaksDog dog = new Dog();dog.speak();     // 输出: Dog barks}
}

解释

  • Dog 类继承了 Animal 类,因此它拥有了 Animal 类的所有属性和方法。
  • speak() 方法在 Dog 类中被重写,实现了多态。

1.2 多态

多态是指不同类的对象对同一消息做出不同响应的能力。Java 中通过方法重写来实现多态。关键点在于:方法重写是运行时多态,即根据对象的实际类型来调用相应的方法。

class Animal {public void speak() {System.out.println("Animal speaks");}
}class Dog extends Animal {@Overridepublic void speak() {System.out.println("Dog barks");}
}class Cat extends Animal {@Overridepublic void speak() {System.out.println("Cat meows");}
}public class Main {public static void main(String[] args) {Animal myAnimal = new Dog();myAnimal.speak();  // 输出: Dog barksmyAnimal = new Cat();myAnimal.speak();  // 输出: Cat meows}
}

解释

  • myAnimal 变量的类型是 Animal,但是它指向的实际对象可以是 DogCat
  • 通过这种方式,Java 可以根据实际对象的类型来调用正确的方法,体现了多态的特性。

1.3 抽象类和接口

  • 抽象类:抽象类是不能实例化的类,它可以包含抽象方法(没有实现的方法)和普通方法。它通常作为其他类的基类。
  • 接口:接口是抽象方法的集合,任何实现接口的类必须提供这些方法的具体实现。
示例:抽象类与接口
// 抽象类
abstract class Animal {abstract void sound();  // 抽象方法,必须在子类中实现public void sleep() {System.out.println("Animal is sleeping");}
}// 接口
interface Movable {void move();  // 接口方法,不需要实现
}// Dog 类继承抽象类并实现接口
class Dog extends Animal implements Movable {@Overridevoid sound() {System.out.println("Dog barks");}@Overridepublic void move() {System.out.println("Dog moves");}
}public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.sound();  // 输出: Dog barksdog.sleep();  // 输出: Animal is sleepingdog.move();   // 输出: Dog moves}
}

2. 异常处理与错误处理

异常处理是编写健壮程序的重要部分。Java 提供了强大的异常处理机制,允许你捕获并处理程序运行时出现的错误,避免程序崩溃。

2.1 异常类型

  • 检查型异常(Checked Exception):必须显式处理的异常,如 IOException
  • 非检查型异常(Unchecked Exception):运行时可能出现的异常,如 NullPointerExceptionArrayIndexOutOfBoundsException

2.2 捕获和处理异常

示例:使用 try-catch 进行异常处理
public class ExceptionExample {public static void main(String[] args) {try {int result = 10 / 0;  // 可能发生除以零的异常} catch (ArithmeticException e) {System.out.println("Error: " + e.getMessage());} finally {System.out.println("This will always run.");}}
}

解释

  • try 块包含可能抛出异常的代码。
  • catch 块捕获特定的异常类型,并进行处理。
  • finally 块无论是否发生异常都会执行,用于释放资源等清理工作。

3. Java 集合框架

集合框架提供了多种容器类,用于存储和操作数据。它包括 List、Set、Map 等接口及其常见实现类。

3.1 List 接口及其实现

List 接口允许按顺序存储元素,可以包含重复元素。

示例:使用 ArrayList
import java.util.ArrayList;
import java.util.List;public class ListExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");for (String item : list) {System.out.println(item);  // 输出列表中的元素}}
}

3.2 Set 接口及其实现

Set 接口不允许重复元素。常用的实现类有 HashSetTreeSet

示例:使用 HashSet
import java.util.HashSet;
import java.util.Set;public class SetExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");set.add("Apple");  // 重复元素将被忽略for (String item : set) {System.out.println(item);  // 输出: Apple, Banana}}
}

3.3 Map 接口及其实现

Map 接口用于存储键值对,常见的实现类有 HashMapTreeMap

示例:使用 HashMap
import java.util.HashMap;
import java.util.Map;public class MapExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Alice", 25);map.put("Bob", 30);for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}

4. 多线程编程

多线程是 Java 的强大特性之一,它允许程序同时执行多个任务。在现代应用程序中,线程广泛应用于并发处理任务。

4.1 创建线程

在 Java 中,线程有两种常见的创建方式:

  1. 继承 Thread 类。
  2. 实现 Runnable 接口。
示例:使用 Thread 类创建线程
class MyThread extends Thread {@Overridepublic void run() {System.out.println("Thread is running");}
}public class ThreadExample {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();  // 启动线程}
}
示例:使用 Runnable 接口创建线程
class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Runnable is running");}
}public class RunnableExample {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();  // 启动线程}
}

5. 总结与进一步学习

通过本篇博客,我们深入探讨了 Java 中的一些重要概念和技术,如面向对象编程、异常处理、集合框架和多线程编程等。这些是每个 Java 开发者必须掌握的知识点。

接下来,可以继续探索:

  1. Java I/O 和文件操作
  2. Lambda 表达式与函数式编程
  3. Java 8 新特性(Stream API、Optional 类等)
  4. 数据库编程(JDBC)

持续实践和学习是提升编程能力的关键。希望你在 Java 编程的道路上越走越远!

相关文章:

Java 编程旅程(二)

在前一篇博客中&#xff0c;我们介绍了 Java 编程的基础知识和入门步骤。现在&#xff0c;我们将继续深入探讨 Java 的一些高级特性&#xff0c;以帮助你进一步提升编程技能。通过这篇博客&#xff0c;你将学习到更复杂的概念和技术&#xff0c;比如面向对象编程&#xff08;OO…...

一、springcloud 入门——笔记

1. 学习之前要知道的 springcloud 应用的技术 2. springboot 和 springcloud 的版本选型 官网介绍&#xff1a;https://spring.io/projects/spring-cloud/#overview 生成新的Spring Cloud项目 最简单的入门方法是访问start.spring.io&#xff0c;选择您的Spring Boot版本和要使…...

思考:VSCode 的宏观工作原理 快速入门 VSCodium (****)

23个常用的VSCode快捷键&#xff08;动图演示&#xff09;> https://www.php.cn/faq/441696.html VSCodium AppImage 版 使用记录 https://blog.csdn.net/ken2232/article/details/143591323 **** 初步比较&#xff1a;VSCode > pk < VSCodium << 在下…...

C++ day8——模版

笔记脑图 作业 template <class T> class mylist{ public:// 这是一个链表的节点struct Link{T val;Link* next; } 增 &#xff1a;insert(T val) 在链表中创建新节点&#xff0c;节点上保存的数据为 val删&#xff1a;remove(T val) 移除链表中数据为 val 的节点改…...

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点&#xff08;上&#xff09;13.1.2 颜色插值方法&#xff08;中&#xff09; ✔️13.1…...

红日靶场1(搭建打靶)

搭建 靶场下载&#xff1a; http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ (13G&#xff0c;需要百度网盘会员) 下载好靶场文件后直接解压 直接用虚拟机打开靶场 更改网络ip 需要模拟内网和外网两个网段&#xff0c; Win7 虚拟机相当于网关服务器&#xff0c;所以需要…...

LivePortrait 部署笔记

LivePortrait 开源地址&#xff1a; https://github.com/KwaiVGI/LivePortrait 模型下载&#xff1a; export HF_ENDPOINThttps://hf-mirror.com huggingface-cli download --resume-download KwaiVGI/LivePortrait --local-dir models--KwaiVGI--LivePortrait...

Greenhills Lib操作-查看Lib信息与将lib中的data段link到指定区域

文章目录 前言Greenhillls中gsize的用法修改ld文件将lib中的data段指定区域示例定义与链接总结 前言 项目开发过程中&#xff0c;遇到客户开发ASW&#xff0c;提供Lib进行集成&#xff0c;但ASW中的标定量没有定义对应的data段&#xff0c;导致无法将标定量指定到特定的内存。…...

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法&#xff0c;详见&#xff1a;用贪心算法计算十进制数转二进制数&#xff08;整数部分&#xff09;_短除法求二进制-CSDN博客 经过一段时间的研究&#xff0c;本人又发现两个规律&#xff1a; 1、不仅仅十进制整数转二进制可…...

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff1b;当然&#xff0c;我们只要满足进程不同就行&#xff0c;所以即便是同一个主机&#xff0c;只要是不同进程&#xff0c;基于网络来传…...

AI for Science 的完美实践——科研文献的智慧化提取获得“综述性文摘”的软件开发

实践是检验真理的唯一标准&#xff01;show your codes! 1 综述性文摘的需求 再简单不过了。 甲方&#xff08;综述性文摘&#xff09;需求&#xff1a;针对项目特征或描述&#xff0c;从几百篇相关的科研论文&#xff08;PDF&#xff09;中智能提取相关内容&#xff0c;包括…...

前端使用xlsx.js实现 Excel 文件的导入与导出功能

前端使用xlsx.js实现 Excel 文件的导入与导出功能 在现代的 Web 开发中&#xff0c;处理文件上传和导出功能已经变得越来越常见&#xff0c;尤其是 Excel 文件的导入与导出。 我们将使用 Vue.js 和 XLSX.js 库来处理 Excel 文件的读取和生成。XLSX.js 是一个强大的 JavaScrip…...

React简单了解

原理简化了解 import React from "react" import { createRoot } form "react-dom/client"const element React.createElement(p,{id: hello},Hello World! )const container document.querySelector(#root) const root createRoot(container) root.r…...

backbone 和Run-Length Encoding (RLE)含义

在深度学习中&#xff0c;特别是在图像分割任务中&#xff0c;backbone&#xff08;主干网络&#xff09;是指用于特征提取的预训练神经网络模型。Backbone 的主要作用是从输入图像中提取有用的特征&#xff0c;这些特征随后会被用于更高层次的任务&#xff0c;如分类、检测或分…...

在Centos7上安装MySQL数据库 How to install MySQL on Centos 7

执行以下命令&#xff0c;下载并安装MySQL。 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm && yum -y install mysql57-community-release-el7-10.noarch.rpm && yum install -y mysql-community-server --nogpgcheck执行以下…...

Linux docker-20.10.9安装

Linux Docker20.10.9安装 解压文件 tar -xvf docker-20.10.9.tgz 给docker执行文件赋予可执行权限 chmod 755 -R docker/复制docker到/usr/bin/目录下,使docker命令可以执行 cp docker/* /usr/bin/将Docker注册为service&#xff0c;创建docker.service文件 vim /etc/syst…...

操作系统(13)虚拟存储器

前言 操作系统中的虚拟存储器是一项关键技术&#xff0c;它为用户提供了一个远大于实际物理内存容量的逻辑内存空间。 一、定义与原理 虚拟存储器是具有请求调入功能和置换功能&#xff0c;能从逻辑上对内存容量加以扩充的存储器系统。其逻辑容量由内存容量与外存容量之和决定&…...

《面向对象综合训练01~05》

《面向对象综合训练01~05》 训练01&#xff1a;文字版格斗游戏 第一步&#xff1a;创建游戏角色的javabean类 public class Role {private String name;private int blood;private char gender;private String face;//长相是随机的//创建男女长相的随机数组String[] boyfaces…...

电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?

电脑故障排查指南&#xff1a;揭秘“msvcr120.dll缺失”的真相与解决方案 在软件开发与日常维护的广阔天地里&#xff0c;遇到系统报错或文件缺失的情况可谓家常便饭。今天&#xff0c;我将带领大家深入探讨一个常见的系统提示——“msvcr120.dll缺失”&#xff0c;并揭秘其背…...

huggingface NLP-微调一个预训练模型

微调一个预训练模型 1 预处理数据 1.1 处理数据 1.1.1 fine-tune 使用tokenizer后的token 进行训练 batch tokenizer(sequences, paddingTrue, truncationTrue, return_tensors"pt")# This is new batch["labels"] torch.tensor([1, 1])optimizer A…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...