Java 7种类类型,新手必备(java的类别)
ccwgpt 2025-05-03 12:50 2 浏览 0 评论
今天给老婆整理了一下Java的几种类类型,希望她能对类的基本情况增加一些了解。
1、接口(interface)
接口是一个定义了方法规范(返回值、方法名、参数)的类,一般情况下不实现具体逻辑(在JDK1.8之后可以有默认实现)。因此,在实际开发过程当中,需要有另外一个类来进行具体实现。如java.lang包下的Runnable接口:
public interface Runnable {
public abstract void run();
}
因为该接口没有默认实现,需要具体的实现类对其方法进行实现:
public class ChickenRun implements Runnable {
@Override
public void run() {
System.out.println("Run Run Run!!!");
}
}
public class DuckRun implements Runnable {
@Override
public void run() {
System.out.println("Run Run Run!!!");
}
}
2、抽象类(abstract class)
抽象类是使用abstract声明的类,和interface一样,用于对方法进行抽象。接口和类的区别如下:
接口 | 抽象类 | |
是否能实例化 | 否 | 否 |
是否需要实现抽象方法 | 是 | 只需要实现抽象方法,不需要实现非抽象方法 |
是否拥有构造方法 | 否 | 是 |
接口中的定义常量类型 | public final,不可被修改 | 与普通类一样,可以有任意定义 |
抽象类一般使用方法:如1中所示,ChickRun和DuckRun都实现了Runnable接口,而且有相同的实现,若还有一个GooseRun等其他实现就需要重复N遍相同代码,因此可以使用抽象类来实现默认逻辑。其他ChickRun、DuckRun以及GooseRun等类只需要集成该抽象类即可,可解决代码重复。
public abstract class PoultryRun implements Runnable {
@Override
public void run() {
System.out.println("Run Run Run!!!");
}
}
public class ChickenRun extends PoultryRun {
}
使用方法完全一样:
public static void main(String[] args) {
ChickenRun chickenRun = new ChickenRun();
chickenRun.run(); // 输出 Run Run Run!!!
}
3、包装类
Java包装类是指对基本数据类型进行包装的类。如8个基本类型都有其包装类:
基本数据类型 | 包装类 |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
包装类的作用:
a. java.util包中只处理对象,无法使用基本类型,如:
// 提示错误Type argument cannot be of primitive type(类型参数不能是基本类型)
Map<int, long> map = new HashMap<>();
// 正确使用
Map<Integer, Long> map = new HashMap<>();
b. Collection 框架中的数据结构,例如ArrayList和Vector,只存储对象(引用类型)而不是基本数据类型。
// 提示错误Type argument cannot be of primitive type(类型参数不能是基本类型)
List<int> list = new ArrayList<>();
// 正确使用
List<Integer> list = new ArrayList<>();
c. 多线程同步加锁时需要使用对象,而不是基本数据类型。
// 提示错误Incompatible types. Found: 'int', required: 'java.lang.Object'
// 不兼容的类型。 发现:'int',要求:'java.lang.Object'
int lock = 0;
synchronized (lock) {
}
// 正确使用
Integer lock = 0;
synchronized (lock) {
}
3.1 自动装箱与拆箱
自动装箱:将基本类型自动转换为其相应包装类的对象称为自动装箱。例如 int 到 Integer、long 到 Long、double 到 Double 的转换等。
public void autoboxing() {
char ch = 'a';
// 自动装箱,将char类型自动转换成Character类型
Character a = ch;
List<Integer> arrayList = new ArrayList<>();
// 由于ArrayList只支持存储对象,因此将25自动装箱成Integer类型
arrayList.add(25);
}
自动拆箱:自动装箱的逆过程。将包装类的对象自动转换为其相应的基本类型称为拆箱。例如 Integer 转换为 int,Long 转换为 long,Double 转换为 double等。
public void unBoxing() {
Character ch = 'a';
// 自动拆箱,Character类型自动转换成char类型
char a = ch;
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(24);
// 自动拆箱,将ArrayList的Integer类型的元素自动转换成int类型
int num = arrayList.get(0);
}
4、内部类
内部类是定义在类内部的类。使用内部类可以更容易地理解每个类之间的关系并保持代码简单。另外,内部类可以指定public、private、protected访问级别,因此可以对类的外部隐藏其存在。如下:
public class OuterClass {
private int x = 10;
private int y = 20;
public int sum() {
return x + y;
}
public class InnerClass {
private int innerX = 30;
private int innerY = 40;
public int getOuterX() {
return x;
}
public int getOuterY() {
return y;
}
public int sumAll() {
return x + y + innerX + innerY;
}
}
}
内部类的实例化:
public static void main(String[] args) {
// 首先实例化外部类
OuterClass outerClass = new OuterClass();
// 再利用外部类对象实例化内部类,是不是没这么用过~~~
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
// 输出100
System.out.println(innerClass.sumAll());
}
静态内部类:
public class OuterClass {
private int x = 10;
private int y = 20;
public int sum() {
return x + y;
}
public static class InnerClass {
private int innerX = 30;
private int innerY = 40;
// 错误,无法访问外部类成员变量
public int getOuterX() {
return x;
}
// 错误,无法访问外部类成员变量
public int getOuterY() {
return y;
}
}
}
静态内部类实例化:
public class OuterClass {
private int x = 10;
private int y = 20;
public int sum() {
return x + y;
}
public static class InnerClass {
private int innerX = 30;
private int innerY = 40;
public int sum() {
return innerX + innerY;
}
}
public static void main(String[] args) {
// 可以和普通类一样使用
InnerClass innerClass = new InnerClass();
// 输出70
System.out.println(innerClass.sum());
}
}
5、匿名类
匿名类可以使代码更加简洁,如果类实例对象只需要使用一次,那么就可以使用匿名类。
public class AnonymousClass {
static class MyThread implements Runnable {
@Override
public void run() {
System.out.println("Run");
}
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
}
}
如上是未使用匿名类的代码,使用匿名类后如下:
public class AnonymousClass {
public static void main(String[] args) {
// Runnable即为匿名类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Run");
}
}).start();
}
}
使用匿名类后代码精简了许多,也不需要额外定义一个新的类(如上:MyThread),匿名类还可配合Java 8使用,使得代码更加精简。如下:
public class AnonymousClass {
public static void main(String[] args) {
// 缩减为一句话
new Thread(() -> System.out.println("Run")).start();
}
}
6、final类
final类是一个被final修饰的类,如java.lang.String类。final类不可被继承。
为何要将类修饰为final?
以String类来举例子,假设String类可以被继承,那么每个人都有权限去重写它的方法。假设程序员A继承了String并重写了它的length()方法。
StringA s = "abc";
// 由于StringA重写了length()方法,可能输出为2
System.out.println(s.length());
而程序员B也继承了String并重写了length()方法:
StringB s = "abc";
// 由于StringB重写了length()方法,可能输出为4
System.out.println(s.length());
因此其他人在使用时会感到很困惑,每次使用length()方法时都得好好看看它的具体实现,每个人的实现还可能都不一样,容易导致混淆,造成不必要的问题。
因此在这些情况下可以将类声明为final,避免出现不必要的问题。
7、集合类
Java中的集合类相对复杂,下图即为集合类的整体继承关系图。
a. Iterable接口
实现了Iterable接口的所有类都可以使用Iterator进行遍历。
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
// 使用Iterator进行遍历
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
int str = it.next();
System.out.print(str);
}
}
b. Collection接口
Collection接口定义了集合的基本操作,如add(),remove(),size()等。
c. List接口
List接口定义了列表的一些基本操作,如indexOf(),subList(),get(),set()等。
d. Queue接口
Queue接口定义了队列的一些基本操作,如poll(),peek(),offer()等。
e. Set接口
定义了Set的一些基本操作。
其他一些具体实现类暂不介绍。
相关推荐
- 详解DNFSB2毒王的各种改动以及大概的加点框架
-
首先附上改动部分,然后逐项分析第一个,毒攻掌握技能意思是力量智力差距超过15%的话差距会被强行缩小到15%,差距不到15%则无效。举例:2000力量,1650智力,2000*0.85=1700,则智力...
- 通篇干货!纵观 PolarDB-X 并行计算框架
-
作者:玄弟七锋PolarDB-X面向HTAP的混合执行器一文详细说明了PolarDB-X执行器设计的初衷,其初衷一直是致力于为PolarDB-X注入并行计算的能力,兼顾TP和AP场景,逐渐...
- 字节新推理模型逆袭DeepSeek,200B参数战胜671B,豆包史诗级加强
-
梦晨发自凹非寺量子位|公众号QbitAI字节最新深度思考模型,在数学、代码等多项推理任务中超过DeepSeek-R1了?而且参数规模更小。同样是MoE架构,字节新模型Seed-Thinkin...
- 阿里智能化研发起飞!RTP-LLM 实现 Cursor AI 1000 token/s 推理技术揭秘
-
作者|赵骁勇阿里巴巴智能引擎事业部审校|刘侃,KittyRTP-LLM是阿里巴巴大模型预测团队开发的高性能LLM推理加速引擎。它在阿里巴巴集团内广泛应用,支撑着淘宝、天猫、高德、饿...
- 多功能高校校园小程序/校园生活娱乐社交管理小程序/校园系统源码
-
校园系统通常是为学校、学生和教职工提供便捷的数字化管理工具。综合性社交大学校园小程序源码:同城校园小程序-大学校园圈子创业分享,校园趣事,同校跑腿交友综合性论坛。小程序系统基于TP6+Uni-app...
- 婚恋交友系统nuiAPP前端解决上传视频模糊的问题
-
婚恋交友系统-打造您的专属婚恋交友平台系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包...
- 已节省数百万GPU小时!字节再砍MoE训练成本,核心代码全开源
-
COMET团队投稿量子位|公众号QbitAI字节对MoE模型训练成本再砍一刀,成本可节省40%!刚刚,豆包大模型团队在GitHub上开源了叫做COMET的MoE优化技术。COMET已应用于字节...
- 通用电气完成XA102发动机详细设计审查 将为第六代战斗机提供动力
-
2025年2月19日,美国通用电气航空航天公司(隶属于通用电气公司)宣布,已经完成了“下一代自适应推进系统”(NGAP)计划下提供的XA102自适应变循环发动机的详细设计审查阶段。XA102是通用电气...
- tpxm-19双相钢材质(双相钢f60材质)
-
TPXM-19双相钢是一种特殊的钢材,其独特的化学成分、机械性能以及广泛的应用场景使其在各行业中占有独特的地位。以下是对TPXM-19双相钢的详细介绍。**化学成分**TPXM-19双相钢的主要化学成...
- thinkphp6里怎么给layui数据表格输送数据接口
-
layui官网已经下架了,但是产品还是可以使用。今天一个朋友问我怎么给layui数据表格发送数据接口,当然他是学前端的,后端不怎么懂,自学了tp框架问我怎么调用。其实官方文档上就有相应的数据格式,js...
- 完美可用的全媒体广告精准营销服务平台PHP源码
-
今天测试了一套php开发的企业网站展示平台,还是非常不错的,下面来给大家说一下这套系统。1、系统架构这是一套基于ThinkPHP框架开发的HTML5响应式全媒体广告精准营销服务平台PHP源码。现在基于...
- 一对一源码开发,九大方面完善基础架构
-
以往的直播大多数都是一对多进行直播社交,弊端在于不能满足到每个用户的需求,会降低软件的体验感。伴随着用户需求量的增加,一对一直播源码开始出现。一个完整的一对一直播流程即主播发起直播→观看进入房间观看→...
- Int J Biol Macromol .|交联酶聚集体在分级共价有机骨架上的固定化:用于卤代醇不对称合成的高稳定酶纳米反应器
-
大家好,今天推送的文章发表在InternationalJournalofBiologicalMacromolecules上的“Immobilizationofcross-linkeden...
- 【推荐】一款开源免费的 ChatGPT 聊天管理系统,支持PC、H5等多端
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍GPTCMS是一款开源且免费(基于GPL-3.0协议开源)的ChatGPT聊天管理系统,它基于先进的GPT...
- 高性能计算(HPC)分布式训练:训练框架、混合精度、计算图优化
-
在深度学习模型愈发庞大的今天,分布式训练、高效计算和资源优化已成为AI开发者的必修课。本文将从数据并行vs模型并行、主流训练框架(如PyTorchDDP、DeepSpeed)、混合精度训练(...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 详解DNFSB2毒王的各种改动以及大概的加点框架
- 通篇干货!纵观 PolarDB-X 并行计算框架
- 字节新推理模型逆袭DeepSeek,200B参数战胜671B,豆包史诗级加强
- 阿里智能化研发起飞!RTP-LLM 实现 Cursor AI 1000 token/s 推理技术揭秘
- 多功能高校校园小程序/校园生活娱乐社交管理小程序/校园系统源码
- 婚恋交友系统nuiAPP前端解决上传视频模糊的问题
- 已节省数百万GPU小时!字节再砍MoE训练成本,核心代码全开源
- 通用电气完成XA102发动机详细设计审查 将为第六代战斗机提供动力
- tpxm-19双相钢材质(双相钢f60材质)
- thinkphp6里怎么给layui数据表格输送数据接口
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (52)
- java框架spring (43)
- grpc框架 (55)
- orm框架有哪些 (43)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)