当前位置: 首页 > 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…...

【BUG记录】Apifox 参数传入 + 号变成空格的 BUG

文章目录 1. 问题描述2. 原因2.1 编码2.2 解码 3. 解决方法 1. 问题描述 之前写了一个接口&#xff0c;用 Apifox 请求&#xff0c;参数传入一个 86 的电话&#xff0c;结果到服务器 就变成空格了。 Java 接收请求的接口&#xff1a; 2. 原因 2.1 编码 进行 URL 请求的…...

Spring AI API 介绍

目录&#xff1a; Spring AI 框架介绍 Spring AI API 核心API简介 Spring AI 提供了很多便利的功能&#xff0c;主要如下&#xff1a; AI Model API “Model API” 提供了聊天、文本转图像、音频转录、文本转语音、嵌入等功能&#xff0c;且不局限于某个固定的大模型提供商…...

【MySQL】Linux使用C语言连接安装

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…...

2024年第十五届蓝桥杯青少组C++国赛—割点

割点 题目描述 一张棋盘由n行 m 列的网格矩阵组成&#xff0c;每个网格中最多放一颗棋子。当前棋盘上已有若干棋子。所有水平方向或竖直方向上相邻的棋子属于同一连通块。 现给定棋盘上所有棋子的位置&#xff0c;如果要使棋盘上出现两个及以上的棋子连通块&#xff0c;请问…...

【软件开发】做出技术决策

文章目录 专注于核心业务除非绝对必要,不要重写代码保持技术栈简单尽量减少依赖避免范围蔓延按照业务实际情况确定优先级在做出高风险决策前构建原型跨职能团队协作信任你的团队在过去的二十年里,我曾在多家初创企业担任软件开发人员、技术负责人以及首席技术官(包括创办自己…...

Airborne使用教程

1.安装环境 前提条件&#xff1a;系统已安装Ruby 打开终端输入如下命令 gem install airborne 或者在Gemfile添加 gem airborne 然后运行bundle install 2.编写脚本 在项目中新建api_tests_spec.rb文件 以GET接口"https://www.thunderclient.com/welcome"为…...

WPF实现曲线数据展示【案例:震动数据分析】

wpf实现曲线数据展示&#xff0c;函数曲线展示&#xff0c;实例&#xff1a;震动数据分析为例。 如上图所示&#xff0c;如果你想实现上图中的效果&#xff0c;请详细参考我的内容&#xff0c;创作不易&#xff0c;给个赞吧。 一共有两种方式来实现&#xff0c;一种是使用第三…...

EasyExcel 动态设置表格的背景颜色和排列

项目中使用EasyExcel把数据以excel格式导出&#xff0c;其中设置某一行、某一列单元格的背景颜色、排列方式十分常用&#xff0c;记录下来方便以后查阅。 1. 导入maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easy…...

【 C++11 】类的新功能

C类的新功能 一、默认成员函数二、类成员变量初始化三、default关键字四、delete关键字六、final关键字七、override关键字 一、默认成员函数 八个默认成员函数 在C11之前&#xff0c;一个类中有如下六个默认成员函数&#xff1a; 构造函数。析构函数。拷贝构造函数。拷贝赋值…...

防止SQL注入:PHP安全最佳实践

防止SQL注入&#xff1a;PHP安全最佳实践 SQL注入是一种常见的网络攻击方式&#xff0c;攻击者通过向应用程序的SQL查询中插入恶意代码&#xff0c;来获取、操控或破坏数据库中的数据。为了保护PHP应用免受SQL注入攻击&#xff0c;开发者需要遵循一系列安全最佳实践。本文将介…...