当前位置: 首页 > 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 编程的道路上越走越远!

http://www.lryc.cn/news/505232.html

相关文章:

  • 一、springcloud 入门——笔记
  • 思考:VSCode 的宏观工作原理 快速入门 VSCodium (****)
  • C++ day8——模版
  • 【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用
  • 红日靶场1(搭建打靶)
  • LivePortrait 部署笔记
  • Greenhills Lib操作-查看Lib信息与将lib中的data段link到指定区域
  • 【十进制整数转换为其他进制数——短除形式的贪心算法】
  • 【JavaEE】网络(2)
  • AI for Science 的完美实践——科研文献的智慧化提取获得“综述性文摘”的软件开发
  • 前端使用xlsx.js实现 Excel 文件的导入与导出功能
  • React简单了解
  • backbone 和Run-Length Encoding (RLE)含义
  • 在Centos7上安装MySQL数据库 How to install MySQL on Centos 7
  • Linux docker-20.10.9安装
  • 操作系统(13)虚拟存储器
  • 《面向对象综合训练01~05》
  • 电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?
  • huggingface NLP-微调一个预训练模型
  • 【BUG记录】Apifox 参数传入 + 号变成空格的 BUG
  • Spring AI API 介绍
  • 【MySQL】Linux使用C语言连接安装
  • 2024年第十五届蓝桥杯青少组C++国赛—割点
  • 【软件开发】做出技术决策
  • Airborne使用教程
  • WPF实现曲线数据展示【案例:震动数据分析】
  • EasyExcel 动态设置表格的背景颜色和排列
  • 【 C++11 】类的新功能
  • 防止SQL注入:PHP安全最佳实践
  • 自动化生产或质量检测准备工作杂记