Java编程类与对象:从基础语法到高级特性

文章目录

      • 1. 类与对象
      • 2. 构造方法
      • 3. 继承
      • 4. 接口
      • 5. 抽象类
      • 6. 方法重载
      • 7. 方法重写
      • 8. 多态
      • 9. 封装
      • 10. 静态变量和方法
      • 11. 内部类
      • 12. 匿名类
      • 13. 泛型
      • 14. 集合框架
      • 15. 异常处理
      • 16. 文件I/O
      • 17. 多线程
      • 18. 同步
      • 19. 高级多线程

1. 类与对象

在Java中,所有代码都必须包含在一个类中。类是创建对象的模板或蓝图,而对象是类的具体实例。

public class Dog {String name;public void bark() {System.out.println(name + " says: Bark!");}
}// 创建Dog类的对象
Dog myDog = new Dog();
myDog.name = "Rex";
myDog.bark(); // 调用bark方法
  • Dog是一个类。
  • name是该类的一个属性。
  • bark()是该类的一个方法。
  • myDogDog类的一个实例(对象),通过new Dog()创建。

2. 构造方法

构造方法用于初始化新创建的对象状态。它具有与类相同的名字,并且没有返回类型。

public class User {String name;// 构造方法public User(String newName) {name = newName;}
}User user = new User("Alice"); // 使用构造方法创建对象并初始化

3. 继承

继承允许一个类从另一个类继承属性和方法,从而实现代码重用。子类可以扩展或修改父类的行为。

public class Animal {void eat() {System.out.println("This animal eats food.");}
}public class Dog extends Animal {void bark() {System.out.println("The dog barks.");}
}Dog dog = new Dog();
dog.eat(); // 继承自Animal的方法
dog.bark(); // 自定义的方法
  • Dog类继承了Animal类,所以它可以使用Animal的所有非私有成员。

4. 接口

接口定义了一组行为规范,实现了这个接口的类必须提供这些行为的具体实现。

public interface Animal {void eat();
}public class Dog implements Animal {public void eat() {System.out.println("The dog eats.");}
}
  • Animal是一个接口,定义了一个eat方法。
  • Dog实现了Animal接口,并提供了eat方法的具体实现。

5. 抽象类

抽象类不能被实例化,但可以包含抽象方法,这些方法必须由子类实现。

public abstract class Animal {abstract void eat();
}public class Dog extends Animal {void eat() {System.out.println("The dog eats.");}
}
  • Animal是一个抽象类,其中eat是抽象方法。
  • Dog继承了Animal并且实现了eat方法。

6. 方法重载

同一个类中可以有多个同名但参数列表不同的方法,这称为方法重载。

public class Calculator {int add(int a, int b) {return a + b;}double add(double a, double b) {return a + b;}int add(int a, int b, int c) {return a + b + c;}
}
  • Calculator类中有三个名为add的方法,它们根据传入参数的不同执行不同的操作。

7. 方法重写

子类可以通过提供与父类中同名方法相同的签名来重写父类的方法。

public class Animal {void makeSound() {System.out.println("Some sound");}
}public class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Bark");}
}
  • Dog类重写了Animal类的makeSound方法,以改变其行为。

8. 多态

多态性是指同一个接口或基类可以有不同的实现形式。例如,你可以用一个父类类型的引用指向子类的对象。

Animal myAnimal = new Dog();
myAnimal.makeSound(); // 输出 "Bark"
myAnimal = new Cat();
myAnimal.makeSound(); // 输出 "Meow"
  • Animal类型的变量myAnimal可以指向DogCat对象,并调用各自版本的makeSound方法。

9. 封装

封装是隐藏对象的内部表示,只暴露必要的部分给外部使用的机制。通常通过设置成员变量为私有(private),并通过公共(public)方法访问这些变量。

public class Account {private double balance;public Account(double initialBalance) {if (initialBalance > 0) {balance = initialBalance;}}public void deposit(double amount) {if (amount > 0) {balance += amount;}}public void withdraw(double amount) {if (amount <= balance) {balance -= amount;}}public double getBalance() {return balance;}
}
  • balance是私有成员,只能通过Account类提供的方法访问。

10. 静态变量和方法

静态成员属于类本身而不是特定的对象实例,因此所有对象共享同一份静态成员。

public class MathUtils {public static final double PI = 3.14159;public static double add(double a, double b) {return a + b;}
}
  • PI是一个静态常量,add是一个静态方法,可以直接通过类名访问,无需创建对象实例。

11. 内部类

内部类是在另一个类内部定义的类,它可以访问外部类的所有成员。

public class OuterClass {private String msg = "Hello";class InnerClass {void display() {System.out.println(msg);}}public void printMessage() {InnerClass inner = new InnerClass();inner.display();}
}
  • InnerClassOuterClass的内部类,可以直接访问OuterClass的私有成员。

12. 匿名类

匿名类是没有名字的类,通常用于简化代码,特别是在需要快速创建对象的时候。

abstract class SaleTodayOnly {abstract int dollarsOff();
}public class Store {public SaleTodayOnly sale = new SaleTodayOnly() {int dollarsOff() {return 3;}};
}
  • 这里创建了一个匿名类的实例,它实现了SaleTodayOnly抽象类。

13. 泛型

泛型允许你编写能够处理多种类型的代码,同时保持类型安全。

public class Box<T> {private T t;public void set(T t) {this.t = t;}public T get() {return t;}
}Box<Integer> integerBox = new Box<>();
integerBox.set(10);
System.out.println(integerBox.get()); // 应输出:10
  • Box<T>是一个泛型类,可以存储任何类型的对象。

14. 集合框架

集合框架是一组接口和实现类,用于更高效地管理和操作数据集合。

import java.util.ArrayList;
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println(list); // 应输出:[Java, Python, C++]import java.util.HashMap;
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
System.out.println(map.get("Apple")); // 应输出:1
  • ArrayList是一个动态数组,HashMap是键值对的集合。

15. 异常处理

异常处理机制允许程序捕获和响应错误条件。

try {int result = 10 / 0;
} catch (ArithmeticException e) {System.out.println("Cannot divide by zero!");
} finally {System.out.println("This will always be printed.");
}
  • try块包含可能抛出异常的代码。
  • catch块捕获特定类型的异常并处理它。
  • finally块无论是否发生异常都会被执行。

16. 文件I/O

文件输入输出操作涉及到读取和写入文件内容。

读取文件

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;String line;
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {while ((line = br.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}

写入文件

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {bw.write("Hello World!");
} catch (IOException e) {e.printStackTrace();
}
  • BufferedReaderBufferedWriter用于高效地读取和写入文本文件。

17. 多线程

多线程编程可以让程序同时执行多个任务,提高应用程序的响应性和性能。

创建线程

class MyThread extends Thread {public void run() {System.out.println("MyThread running");}
}MyThread myThread = new MyThread();
myThread.start();

实现Runnable接口

class MyRunnable implements Runnable {public void run() {System.out.println("MyRunnable running");}
}Thread thread = new Thread(new MyRunnable());
thread.start();
  • Thread类和Runnable接口是创建线程的主要方式。

18. 同步

同步机制确保在多线程环境中对共享资源的安全访问。

public class Counter {private int count = 0;public synchronized void increment() {count++;}public synchronized int getCount() {return count;}
}
  • synchronized关键字确保一次只有一个线程可以执行方法体内的代码。

19. 高级多线程

使用ExecutorServiceFuture可以更方便地管理线程池和异步任务。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;ExecutorService executor = Executors.newFixedThreadPool(2);executor.submit(() -> {System.out.println("ExecutorService running");
});executor.shutdown();
  • ExecutorService提供了线程池管理功能,submit方法可以提交可运行的任务,shutdown方法关闭服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482101.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出机器学习中的梯度下降算法

大家好&#xff0c;在机器学习中&#xff0c;梯度下降算法&#xff08;Gradient Descent&#xff09;是一个重要的概念。它是一种优化算法&#xff0c;用于最小化目标函数&#xff0c;通常是损失函数。梯度下降可以帮助找到一个模型最优的参数&#xff0c;使得模型的预测更加准…

树莓派5+文心一言 -> 智能音箱

一、简介 效果&#xff1a;运行起来后&#xff0c;可以连续对话 硬件&#xff1a;树莓派5、麦克风、音箱&#xff0c;成本500-1000 软件&#xff1a;snowboy作为唤醒词、百度语音作为语音识别、brain作为指令匹配、百度文心一言作为对话模块、微软的edge-tts语音合成... 二…

Springboot——SseEmitter流式输出

文章目录 前言SseEmitter 简介测试demo注意点异常一 ResponseBodyEmitter is already set complete 前言 最近做AI类的开发&#xff0c;看到各大AI模型的输出方式都是采取的一种EventStream的方式实现。 不是通常的等接口处理完成后&#xff0c;一次性返回。 而是片段式的处理…

5G学习笔记之随机接入

目录 1. 概述 2. MSG1 2.1 选择SSB 2.2 选择Preamble Index 2.3 选择发送Preamble的时频资源 2.4 确定RA-RNTI 2.5 确定发送功率 3. MSG2 4. MSG3 5. MSG4 6. 其它 6.1 切换中的随机接入 6.2 SI请求的随机接入 6.3 通过PDCCH order重新建立同步 1. 概述 随机接入…

【Linux-多线程】重谈地址空间+内存管理方式

一、背景知识 a.重谈地址空间 我们之前已经说过&#xff0c;CPU内部见的地址&#xff0c;以及我们打印出来的地址都是虚拟地址&#xff1b;物理内存加载到CPU&#xff0c;CPU内执行进程创建内核数据结构&#xff0c;页表等&#xff0c;通过页表映射到物理磁盘上&#xff1b;也…

Spark Optimization —— Reducing Shuffle

Spark Optimization : Reducing Shuffle “Shuffling is the only thing which Nature cannot undo.” — Arthur Eddington Shuffle Shuffle Shuffle I used to see people playing cards and using the word “Shuffle” even before I knew how to play it. Shuffling in c…

Elasticsearch——Java API 操作

Elasticsearch 软件是由Java语言开发的,所以也可以通过JavaAPI的方式对 Elasticsearch服务进行访问。 创建 Maven 项目 我们在 IDEA 开发工具中创建 Maven 项目(模块也可)ES。并修改pom文件&#xff0c;增加Maven依赖关系。 #直接复制在pom文件的<dependencies></de…

量化的8位LLM训练和推理使用bitsandbytes在AMD GPUs上

Quantized 8-bit LLM training and inference using bitsandbytes on AMD GPUs — ROCm Blogs 在这篇博客文章中&#xff0c;我们将介绍bitsandbytes的8位表示方式。正如你将看到的&#xff0c;bitsandbytes的8位表示方式显著地减少了微调和推理大语言模型&#xff08;LLMs&…

自回归(Autoregressive)模型概述

自回归&#xff08;Autoregressive&#xff09;模型概述 自回归&#xff08;Autoregressive&#xff0c;简称AR&#xff09;模型是一类基于“历史数据”来预测未来数据的模型。其核心思想是模型的输出不仅依赖于当前输入&#xff0c;还依赖于先前的输出。自回归模型通常用于时…

Win11电脑亮度无法调节以及夜间模式点击没有用失效解决方法

一、问题 最近&#xff0c;突然感觉屏幕亮度十分刺眼&#xff0c;想调整为夜间模式&#xff0c;发现点了夜间模式根本没用&#xff0c;亮度也是变成了灰色。 明明前几天还能调节的&#xff0c;这实在是太难受了&#xff01; 二、原因 这是远程控制软件向日葵的问题 在向日葵…

Linux笔记---进程:进程终止

1. 进程终止概念与分类 进程终止是指一个正在运行的进程结束其执行的操作。以下是一些常见的导致进程终止的情况&#xff1a; 一、正常终止 完成任务当进程完成了它被设计要执行的任务后&#xff0c;就会正常终止。收到特定信号在操作系统中&#xff0c;进程可能会收到来自操作…

【工具推荐】dnsx——一个快速、多用途的 DNS 查询工具

basic/基本使用方式 echo baidu.com | dnsx -recon # 查询域名所有记录echo baidu.com | dnsx -a -resp # 查询域名的a记录echo baidu.com | dnsx -txt -resp # 查询域名的TXT记录echo ip | dnsx -ptr -resp # ip反查域名 A记录查询 TXT记录查询 ip反查域名 help/帮助信息 输…

【树莓派5】移动热点获取树莓派IP并初次登录SSH

本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本&#xff1a;Windows11 24H2树莓派&#xff1a;树莓派5&#xff0c;Raspberry Pi 5SSH软件&#xff1a…

【Git系列】Git 提交历史分析:深入理解`git log`命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

第144场双周赛:移除石头游戏、两个字符串得切换距离、零数组变换 Ⅲ、最多可收集的水果数目

Q1、[简单] 移除石头游戏 1、题目描述 Alice 和 Bob 在玩一个游戏&#xff0c;他们俩轮流从一堆石头中移除石头&#xff0c;Alice 先进行操作。 Alice 在第一次操作中移除 恰好 10 个石头。接下来的每次操作中&#xff0c;每位玩家移除的石头数 恰好 为另一位玩家上一次操作…

Python parsel库学习总结

parsel库是Python中用于解析HTML文件的库&#xff0c;其能通过CSS选择器、xpath、正则表达式来定位html中的元素。 通过css选择器定位元素 from parsel import Selectorhtml """ <html><head><a class"option1">这是一个伪html片…

【HarmonyOS学习日志(11)】计算机网络之概念,组成和功能

文章目录 计算机网络概念计算机网络&#xff0c;互连网与互联网的区别计算机网络互连网互联网&#xff08;因特网&#xff0c;Internet&#xff09; 计算机网络的组成和功能计算机网络的组成从组成部分看从工作方式看从逻辑功能看 计算机网络的功能数据通信资源共享分布式处理提…

Vue3 开源UI 框架推荐 (大全)

一 、前言 &#x1f4a5;这篇文章主要推荐了支持 Vue3 的开源 UI 框架&#xff0c;包括 web 端和移动端的多个框架&#xff0c;如 Element-Plus、Ant Design Vue 等 web 端框架&#xff0c;以及 Vant、NutUI 等移动端框架&#xff0c;并分别介绍了它们的特性和资源地址。&#…

视觉语言动作模型VLA的持续升级:从π0之参考基线Octo到OpenVLA、TinyVLA、DeeR-VLA、3D-VLA

第一部分 VLA模型π0之参考基线Octo 1.1 Octo的提出背景与其整体架构 1.1.1 Octo的提出背景与相关工作 许多研究使用从机器人收集的大量轨迹数据集来训练策略 从早期使用自主数据收集来扩展策略训练的工作[71,48,41,19-Robonet,27,30]到最近探索将现代基于transformer的策略…

k8s--pod创建、销毁流程

文章目录 一、pod创建流程二、pod销毁流程 一、pod创建流程 1、用户通过kubectl或其他api客户端提交pod spec给apiserver,然后会进行认证、鉴权、变更、校验等一系列过程2、apiserver将pod对象的相关信息最终存入etcd中,待写入操作执行完成,apiserver会返回确认信息给客户端3、…