Java基础学习

article/2025/6/18 16:22:11

输入输出

在这里插入图片描述
在这里插入图片描述

import java.util.*;
public class Main {public static void main(String[] args) {int s = 888;String s1 = "Hello World";
//        System.out.print(s);
//        System.out.print(s1);System.out.println(s);System.out.println(s1);Scanner sc = new Scanner(System.in);System.out.print("请输入一个整数:");int num = sc.nextInt();System.out.print("请输入一个字符串:");String s2 = sc.next();System.out.println("输入的数字是:" + num);System.out.println("输入的字符串是" + s2);sc.close();}
}

条件 循环 数组

//输出数组中比平均值大的数
import java.util.*;public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);System.out.print("输入数组从长度:");int n = sc.nextInt();int[] arr = new int[n];int sum = 0;for(int i = 0; i < n; i++){arr[i] = sc.nextInt();sum += arr[i];}double avg = (double)sum/n;System.out.println("大于均值的数有:");for(int i = 0; i < n; i++){if(arr[i] > avg)System.out.print(arr[i] + " ");}sc.close();}}

类与对象

//Person.java
public class Person
{String name;int age;public Person(String name, int age){this.name = name;this.age = age;}public void sayHello(){System.out.println("我的名字是: " + name + ", " + "年龄:" + age + "!");}}//main.java
public class Main
{public static void main(String[] args){Person p1 = new Person("张三", 12);Person p2 = new Person("李四", 21);System.out.println("p1的名字是: " + p1.name + ", " + "年龄:" + p1.age + "!");p2.sayHello();}}

继承与多态

//Animal.java
public class Animal
{protected String name;public Animal(String name){this.name = name;}public void makeSound(){System.out.println(name + "Animal makeSound ");}public void introduce(){System.out.println(name + "Animal introduce ");}
}//Dog.java
public class Dog extends Animal
{public Dog(String name){super(name);}@Overridepublic void makeSound(){System.out.println(name + " 说:汪汪汪!");}public void detchBall(){System.out.println(name + "正在捡球");}
}//Cat.java
public class Cat extends Animal
{public Cat(String name){super(name);}@Overridepublic void makeSound(){System.out.println(name + "说:喵喵喵");}public void climbTree(){System.out.println(name + "正在爬树");}
}
//main.java
public class Main {public static void main(String[] args) {Animal a1 = new Dog("狗蛋");Animal [] zoo = {new Dog("小狗1号"),new Dog("小狗2号"),new Cat("小猫1号"),new Animal("动物类")};for(Animal a : zoo){a.introduce();a.makeSound();}}
}

在这里插入图片描述

接口与抽象类

//Speakable.java
public interface Speakable {void speak();
}
//Flyable.java
public interface Flyable {void fly();
}
//Robot.java
public abstract class Robot
{protected String name;public Robot(String name){this.name = name;}public void introduce(){System.out.println("Robot:introduce--" + this.name);}public abstract void work();//抽象类里可以有抽象方法和非抽象方法,但是抽象方法没有函数体,分号结尾
}
//TalkRobot.java
public class TalkRobot extends Robot implements Speakable{public TalkRobot(String name) {super(name);}@Overridepublic void speak() {System.out.println(name + "speaking");}@Overridepublic void work(){System.out.println(name + "work is speaking");}
}
//FlyRobot.java
public class FlyRobot extends Robot implements Flyable{public FlyRobot(String name) {super(name);}@Overridepublic void fly() {System.out.println(name + " flying");}@Overridepublic void work(){System.out.println(name + "work is flying");}
}
//AllRoundRobot.java
public class AllRoundRobot extends Robot implements Flyable,Speakable {public AllRoundRobot(String name) {super(name);}@Overridepublic void speak() {System.out.println(name + " speaking");}@Overridepublic void fly() {System.out.println(name + " flying");}@Overridepublic void work() {System.out.println(name + " work is allround");}
}
//Main.java
public class Main {public static void main(String[] args) {Robot r1 = new TalkRobot("小语");Robot r2 = new FlyRobot("小飞");Robot r3 = new AllRoundRobot("小全能");Robot[] robots = {r1, r2, r3};for(Robot robot : robots) {robot.introduce();robot.work();//子类都有work,都想用work,只能用抽象类的抽象方法if(robot instanceof Speakable) {((Speakable) robot).speak();}if(robot instanceof Flyable) {((Flyable) robot).fly();}System.out.println();}}
}运行结果:
Robot:introduce--小语
小语work is speaking
小语speakingRobot:introduce--小飞
小飞work is flying
小飞 flyingRobot:introduce--小全能
小全能 work is allround
小全能 speaking
小全能 flying
特点接口 (interface)抽象类 (abstract class)
是否可以有方法实现只能有抽象方法(Java 8 以前),Java 8+ 支持默认方法可以有普通方法
是否可以有成员变量❌不可以✅可以有成员变量
继承关系implements 实现接口(可以多实现)extends 继承抽象类(只能单继承)
是否有构造函数❌不允许有✅可以有
能否被实例化❌ 不能直接实例化❌ 不能直接实例化
设计目的描述行为能力描述“是什么”,有默认行为

抽象类和接口有什么用?
抽象类中定义通用的功能并让子类共享,如Robot及其子类都有introduce,不用每次定义子类都定义一遍,并且由于有抽象类需要子类实现,定义抽象类数组Robot,数组里面可以放Robot的所以子类,并且调用抽象类work的时候,由于子类都重写的work,main就可以统一调用work了
接口也是,统一行为标准,比如两个类Bird和Plane都implements Flyable,并且子类都有fly函数,可以定义Flyable[] (接口也可以作为数据类型定义数组),然后直接调用各自的fly就好了(如果没有implements Flyable,不认为有Flyable类型,不允许定义)。此外还有第二个用途,就是Java 不支持多继承类,但支持多实现接口:在上面的例子中public class AllRoundRobot extends Robot implements Flyable,Speakable,接口解决了多重能力组合的问题,但是类无法解决。
抽象方法与普通方法的区别:

比较点抽象方法普通方法
是否有方法体❌ 没有✅ 有
子类是否必须实现✅ 必须实现❌ 可以继承直接用
是否可直接调用❌(只能通过重写后调用)✅ 直接可调用
修饰符要求只能写在 abstract class任意类中都可以写
用途强制子类实现特定方法提供通用行为,子类可继承使用

抽象方法是为了强制子类去“实现”某个行为:抽象类Robot的子类需要实现各自的work,于是定义抽象函数work
普通方法是为了提供“通用的默认行为:Robot的子类都有introduce这个不变的方法。
instanceof
instanceof 是 Java 中的一个关键字,用于判断一个对象是否是某个类或接口的“实例”或“子类型”。

对象 instanceof 类型

如果对象是该类型或其子类、实现类的实例,返回 true。常见用途是:类型判断 + 强制类型转换(类型转换前先判断)例子如下:判断robot是否有说的能力,如果有,强制转换成Speakable在speak

if(robot instanceof Speakable) {((Speakable) robot).speak();
}

因此有了接口第三个用途:打标签
Java 中接口有时并不要求你实现具体逻辑,它更像是一个“能力标记”或“标签”:

public interface Serializable {} // Java 内置接口,表示“这个对象可以被序列化”public class MyData implements Serializable {// 不需要任何方法,但标记了“我可以被序列化”
}

系统框架通过 instanceof Serializable 判断你是否有这个“能力”,然后做相应处理。

文件读写与异常处理

import java.io.FileWriter;
import java.io.IOException;public class WriteExample {public static void main(String[] args) {try{FileWriter writer = new FileWriter("output.txt");writer.write("Hello, Java 文件写入\n");writer.write("这是第二行文本。\n");writer.close();System.out.println("写入成功");}catch(IOException e){System.out.println("写入错误" + e.getMessage());}}
}import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class ReadExample {public static void main(String[] args) {try{BufferedReader reader = new BufferedReader(new FileReader("output.txt"));String line = null;while((line = reader.readLine()) != null) {System.out.println(line);}reader.close();}catch (IOException e){System.out.println("读取错误" + e.getMessage());}}
}

在这里插入图片描述
在这里插入图片描述

其中
异常处理

结构块作用
try {}放置可能抛出异常的代码
catch (异常类型 e)捕获并处理指定类型的异常
finally {}无论是否发生异常,都会执行,常用于关闭资源(如 Scanner、文件等)

try内部无论是否异常都会执行,而只有出现异常的时候会执行catch里面的元素
常见异常类型:

异常类说明
ArithmeticException算术异常,如除以 0
NullPointerException空指针异常
ArrayIndexOutOfBoundsException数组下标越界
NumberFormatException字符串转换数字失败
IOException输入输出异常

http://www.hkcw.cn/article/HXnHeYZZPE.shtml

相关文章

异构边缘智能处理加速板

简介&#xff1a; TC-ATLAS200-K7325TI是一套FPGAGPU架构的异构边缘智能处理加速板。该板基于华为 ATLAS200 GPU及Xilinx K7高性能FPGA&#xff08;可替换为复旦微JFM7K325T&#xff09;设计而成。 GPU与FPGA之间通过PCIE2.0 X4 互连&#xff0c;实现两者之间数据的高速传输。板…

进程间通信(消息队列)

目录 一 原理 二 API 1. ftok 2. msgget 3. msgctl 4. msgsnd 5. msgrcv 三 demo代码 四 基于责任链模式和消息队列对数据处理 1. 什么是责任链模式 2. 下面基于责任链模式来对消息队列获取的消息进行处理 前置 其实system v 版本的进程间通信&#xff0c;设计的接…

解决8080端口被占问题

文章目录 1. 提出问题2. 解决问题2.1 查看占用8080端口的进程2.2 杀死占用8080端口的进程2.3 测试问题是否已解决3. 实战小结1. 提出问题 运行Spring Boot项目,报错8080端口被占 2. 解决问题 2.1 查看占用8080端口的进程 执行命令:netstat -ano | findstr :8080 2.2 杀死占用…

【harbor】--基础使用

推送 不同的管理工具都有说明 以docker为例 # 第一步--打标签 docker tag SOURCE_IMAGE[:TAG] 192.168.121.201:801/haohao_fist/REPOSITORY[:TAG] # 第二步--推送 docker push 192.168.121.201:801/haohao_fist/REPOSITORY[:TAG]默认push推送为https push会失败 解决办法…

论文略读:To the Globe (TTG): Towards Language-Driven Guaranteed Travel Planning

2024 Emnlp demo 提出了TTG&#xff0c;一个演示系统&#xff0c;它能够接收用户的自然语言指令&#xff0c;并在几秒钟内生成最优的旅行行程 结合了大语言模型&#xff08;LLMs&#xff0c;Llama-3 70B&#xff09;与现有的符号求解器&#xff08;例如混合整数线性规划&#…

《操作系统真相还原》——初探保护模式

BUG 果不其然出现bug b 0x900在进入loader的时候打个断点&#xff0c;看看什么情况&#xff0c;好吧突然想起来&#xff0c;可能弄错镜像了 重新执行 正确 info gdt看一下相关信息

[yolov11改进系列]基于yolov11引入高效坐标注意力机制CoordAttention的python源码+训练源码

【CoordAttention介绍】 在轻量级网络上的研究表明&#xff0c;通道注意力会给模型带来比较显著的性能提升&#xff0c;但是通道注意力通常会忽略对生成空间选择性注意力图非常重要的位置信息。因此&#xff0c;新加坡国立大学的提出了一种为轻量级网络设计的新的注意力机制&a…

AI Agent的“搜索大脑“进化史:从Google API到智能搜索生态的技术变革

AI Agent搜索革命的时代背景 2025年agent速度发展之快似乎正在验证"2025年是agent元年"的说法&#xff0c;而作为agent最主要的应用工具之一(另外一个是coding)&#xff0c;搜索工具也正在呈现快速的发展趋势。Google在2024年12月推出Gemini Deep Research&#xff0…

以防长:辛瓦尔已死 这些人是下个目标

当地时间5月31日,以色列国防军发表声明,确认在以色列国防军与以色列国家安全总局(辛贝特)今年5月13日的联合行动中,以色列空军对巴勒斯坦伊斯兰抵抗运动(哈马斯)军事领导人穆罕默德辛瓦尔发动空袭并将其打死。以军声明称,此次空袭还打死了包括哈马斯拉法旅指挥官穆罕默…

8旬老人砍掉小区20年香樟树 私自修剪引发争议

家住浦东新区上南山水苑一期的业主王先生反映,小区内一群平均年龄七十多岁的老人以提高绿化环境为由,私自圈占公共绿化变为私人花园已有两年。物业和居委会多次劝阻无效,老人们的花越种越多。本周二上午,一位老人用网购的斧头和电锯砍伐了小花园内一棵20多年的香樟树。投诉…

代码随想录算法训练营第60期第五十三天打卡

大家好&#xff0c;我们今天来到了最后一章图论&#xff0c;其实图论比较难&#xff0c;涉及的算法也比较多&#xff0c;今天比较重要的就是深度优先搜索与广度优先搜索&#xff0c;后面的迪杰斯特拉算法等算法在我们求最短路都会涉及到&#xff0c;还有最近公共祖先&#xff0…

【Bluedriod】蓝牙协议栈GD模块(GD_SHIM_MODULE)启动机制及源码解析

本文深入剖析Android蓝牙协议栈中GD模块的启动机制&#xff0c;从模块生命周期管理、状态转换、异步初始化&#xff0c;到核心组件&#xff08;HCI层、协议栈管理器、广播/扫描/测距模块&#xff09;的协同运作。通过源码分析揭示蓝牙协议栈如何通过分层设计实现硬件抽象化、事…

threejsPBR材质与纹理贴图

1. PBR材质简介 本节课没有具体的代码&#xff0c;就是给大家科普一下PBR材质&#xff0c;所谓PBR就是&#xff0c;基于物理的渲染(physically-based rendering)。 Three.js提供了两个PBR材质相关的APIMeshStandardMaterial和MeshPhysicalMaterial,MeshPhysicalMaterial是Mes…

Leetcode 3231. 要删除的递增子序列的最小数量

1.题目基本信息 1.1.题目描述 给定一个整数数组 nums&#xff0c;你可以执行任意次下面的操作&#xff1a; 从数组删除一个 严格递增 的 子序列。 您的任务是找到使数组为 空 所需的 最小 操作数。 1.2.题目地址 https://leetcode.cn/problems/minimum-number-of-increas…

【SpringBoot实战】优雅关闭服务

文章目录 一、什么是优雅关闭&#xff1f;二、优雅关闭的核心步骤三、SpringBoot优雅关闭实现四、关键注意事项1. 超时时间必须配置2. 信号支持局限性3. 特殊请求处理 五、底层实现原理六、总结 一、什么是优雅关闭&#xff1f; 优雅关闭&#xff08;Graceful Shutdown&#x…

Redis:功能特性和应用场景

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Redis 本篇开始对于 Redis 进行正式介绍和学习 &#x1f525; 认识 Redis 在开始 Redis 学习前&#xff0c;要先认识一下 Redis Redis 的设计&#xff0c;是想要把它当做是一个数据库&#xff…

etcd详解

一、核心特性二、架构原理三、应用场景四、运维实践五、常见问题与解决方案六、与 ZooKeeper 和 Consul 的对比总结 etcd 是一个高可用的分布式键值存储系统&#xff0c;广泛应用于云原生领域&#xff0c;尤其作为 Kubernetes 的核心组件&#xff0c;用于存储集群的配置、状态和…

CTFHub-RCE 命令注入-综合练习

观察源代码 代码里面可以发现过滤了运算符、目录分隔符、分号、空格还有一些关键字也被过滤了 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 用换行符的url值&#xff08;%0a&#xff09;代替分号注意&#xff1a;在url中输入 ?ip127.0.0.1%0a#…

网络编程1_网络编程引入

为什么需要网络编程&#xff1f; 用户再在浏览器中&#xff0c;打开在线视频资源等等&#xff0c;实质上说通过网络&#xff0c;获取到从网络上传输过来的一个资源。 与打开本地的文件类似&#xff0c;只是这个文件的来源是网络。相比本地资源来说&#xff0c;网络提供了更为…

性能优化 - 理论篇:性能优化的七类技术手段

文章目录 Pre引言性能优化的七类技术手段性能优化策略一览表1. 复用优化2. 计算优化2.1 并行执行2.2 变同步为异步2.3 惰性加载 3. 结果集优化3.1 数据格式与协议选择3.2 字段精简与按需返回3.3 批量处理与分页3.4 索引与位图加速 4. 资源冲突优化4.1 锁的分类与特点4.2 无锁与…