当前位置: 首页 > article >正文

Java基础十六:枚举,包,反射

一、枚举Enum1. 什么是枚举枚举是一种特殊的类用于定义一组固定的常量。2. 基本用法// 最简单的枚举 public enum Season { SPRING, SUMMER, AUTUMN, WINTER } // 使用枚举 public class TestEnum { public static void main(String[] args) { Season s Season.SPRING; // 常用方法 System.out.println(s.name()); // SPRING System.out.println(s.ordinal()); // 0索引位置 System.out.println(s.toString()); // SPRING // 遍历枚举 for (Season season : Season.values()) { System.out.println(season); } // 根据字符串获取枚举 Season autumn Season.valueOf(AUTUMN); // switch 中使用枚举 switch (s) { case SPRING: System.out.println(春天); break; case SUMMER: System.out.println(夏天); break; default: System.out.println(其他季节); } } }3. 带属性和方法的枚举public enum Grade { // 枚举常量必须首先定义可以带参数 EXCELLENT(优秀, 90, 100) { Override public String getDescription() { return 成绩优异表现突出; } }, GOOD(良好, 80, 89) { Override public String getDescription() { return 成绩良好继续保持; } }, PASS(及格, 60, 79) { Override public String getDescription() { return 成绩及格需要努力; } }, FAIL(不及格, 0, 59) { Override public String getDescription() { return 成绩不及格需要补习; } }; // 成员变量 private String chineseName; private int minScore; private int maxScore; // 构造方法必须是 private private Grade(String chineseName, int minScore, int maxScore) { this.chineseName chineseName; this.minScore minScore; this.maxScore maxScore; } // 普通方法 public String getChineseName() { return chineseName; } public boolean isInRange(int score) { return score minScore score maxScore; } // 抽象方法每个枚举常量必须实现 public abstract String getDescription(); // 静态方法 public static Grade fromScore(int score) { for (Grade grade : Grade.values()) { if (grade.isInRange(score)) { return grade; } } return FAIL; } } // 使用示例 public class TestGrade { public static void main(String[] args) { int score 85; Grade grade Grade.fromScore(score); System.out.println(分数 score); System.out.println(等级 grade); System.out.println(中文名 grade.getChineseName()); System.out.println(描述 grade.getDescription()); // 输出 // 分数85 // 等级GOOD // 中文名良好 // 描述成绩良好继续保持 } }4. 枚举实现接口interface Describable { String describe(); } enum Color implements Describable { RED { Override public String describe() { return 热情奔放的红色; } }, GREEN { Override public String describe() { return 生机勃勃的绿色; } }, BLUE { Override public String describe() { return 宁静深邃的蓝色; } }; // 也可以在枚举级别实现 // Override // public String describe() { // return 这是一个颜色; // } }二、包Package1. 什么是包包用于组织类和接口类似于文件系统中的文件夹避免命名冲突提供访问保护。2. 包的定义和使用// 文件com/example/model/User.java package com.example.model; // 必须在第一行注释除外 import java.util.Date; // 导入单个类 import java.util.*; // 导入包下所有类 import static java.lang.Math.PI; // 静态导入 public class User { private String name; private Date birthday; public double getCircleArea(double radius) { return PI * radius * radius; // 直接使用静态导入的常量 } }3. 包命名规范// 包名全部小写使用域名倒序 // 常见包结构 com.example.project.model // 数据模型 com.example.project.dao // 数据访问层 com.example.project.service // 业务逻辑层 com.example.project.controller // 控制器层 com.example.project.util // 工具类 com.example.project.exception // 异常类 com.example.project.config // 配置类4. 包的访问权限// 文件com/example/Person.java package com.example; public class Person { public String name; // 任何地方都能访问 protected int age; // 子类和同包可以访问 String address; // 默认权限同包可以访问 private String idCard; // 只有本类能访问 } // 文件com/example/Test.java同包 package com.example; public class Test { public static void main(String[] args) { Person p new Person(); p.name 张三; // ✅ public p.age 18; // ✅ protected同包 p.address 北京; // ✅ default同包 // p.idCard xxx; // ❌ private无法访问 } }5. 包和编译运行# 目录结构 # src/ # com/ # example/ # Hello.java # 编译 javac -d . src/com/example/Hello.java # 运行 java com.example.Hello # 打包成jar jar cvf myapp.jar com/三、反射Reflection1. 什么是反射反射允许程序在运行时获取类的完整信息并动态地操作类的属性和方法2. 获取Class对象的三种方式通俗理解把类想象成一个设计图纸比如person类的代码吧Class对象想象成这个图纸的说明书通过说明书可以知道图纸上画了什么有什么属性能做什么事。// 方式1通过类名.class Class? clazz1 String.class; //适用场景 // 示例获取任意已知类的 Class 对象 Class? clazz1 Person.class; Class? clazz2 ArrayList.class; Class? clazz3 int.class; // 基本类型也可以 // 方式2通过对象.getClass() String str hello; Class? clazz2 str.getClass(); //适用场景:手头上有了一个对象想知道它属于哪一类 // 示例多态情况下的实际类型 Animal animal new Dog(); // 声明为 Animal实际是 Dog Class? clazz animal.getClass(); // 返回的是 Dog.class不是 Animal.class // 判断对象的实际类型 if (animal.getClass() Dog.class) { System.out.println(这实际上是一条狗); } // 方式3通过 Class.forName() Class? clazz3 Class.forName(java.lang.String); //适用场景不知道具体类名需要动态配置 public class Demo { public static void main(String[] args) throws Exception { // 1. 类名.class - 静态方式 Class? clazz1 User.class; System.out.println(方式1 clazz1.getName()); // 2. 对象.getClass() - 已有对象 User user new User(张三, 20); Class? clazz2 user.getClass(); System.out.println(方式2 clazz2.getName()); // 3. Class.forName() - 动态加载 String className com.example.User; // 可以从配置文件读取 Class? clazz3 Class.forName(className); System.out.println(方式3 clazz3.getName()); // 三种方式获取的是同一个 Class 对象 System.out.println(clazz1 clazz2); // true System.out.println(clazz1 clazz3); // true } } class User { private String name; private int age; public User(String name, int age) { this.name name; this.age age; } }3.获取类的信息public class ReflectionDemo { public static void main(String[] args) throws Exception { Class? clazz Person.class; // 获取类名 System.out.println(类名 clazz.getName()); System.out.println(简单类名 clazz.getSimpleName()); // 获取包信息 Package pkg clazz.getPackage(); System.out.println(包名 pkg.getName()); // 获取修饰符 int modifiers clazz.getModifiers(); System.out.println(是否是public Modifier.isPublic(modifiers)); // 获取父类 Class? superclass clazz.getSuperclass(); System.out.println(父类 superclass.getName()); // 获取接口 Class?[] interfaces clazz.getInterfaces(); // 获取构造方法 Constructor?[] constructors clazz.getConstructors(); // 获取方法 Method[] methods clazz.getDeclaredMethods(); // 获取字段 Field[] fields clazz.getDeclaredFields(); } }4.动态创建对象// 方式1通过 Class 对象 Class? clazz Person.class; Person person1 (Person) clazz.newInstance(); // 已废弃 // 方式2通过 Constructor推荐 ConstructorPerson constructor Person.class.getConstructor(String.class, int.class); Person person2 constructor.newInstance(张三, 20); // 创建数组 Object array Array.newInstance(String.class, 10); Array.set(array, 0, hello); String value (String) Array.get(array, 0);5.动态调用方法public class MethodInvokeDemo { public static void main(String[] args) throws Exception { Person person new Person(李四, 25); Class? clazz person.getClass(); // 获取并调用公有方法 Method publicMethod clazz.getMethod(getName); String name (String) publicMethod.invoke(person); System.out.println(name); // 获取并调用私有方法 Method privateMethod clazz.getDeclaredMethod(privateMethod, String.class); privateMethod.setAccessible(true); // 突破私有权限 String result (String) privateMethod.invoke(person, 参数); // 调用静态方法 Method staticMethod clazz.getMethod(staticMethod); staticMethod.invoke(null); // 静态方法不需要对象实例 } } class Person { private String name; private int age; public Person() {} public Person(String name, int age) { this.name name; this.age age; } public String getName() { return name; } private String privateMethod(String param) { return 私有方法 param; } public static void staticMethod() { System.out.println(静态方法); } }6.动态操作字段Person person new Person(王五, 30); Class? clazz person.getClass(); // 获取私有字段 Field nameField clazz.getDeclaredField(name); nameField.setAccessible(true); // 突破私有权限 // 读取字段值 String name (String) nameField.get(person); System.out.println(原值 name); // 修改字段值 nameField.set(person, 赵六); System.out.println(新值 nameField.get(person));

相关文章:

Java基础十六:枚举,包,反射

一、枚举(Enum) 1. 什么是枚举 枚举是一种特殊的类,用于定义一组固定的常量。 2. 基本用法 // 最简单的枚举 public enum Season {SPRING, SUMMER, AUTUMN, WINTER }// 使用枚举 public class TestEnum {public static void main(String[…...

如何彻底解决显卡驱动冲突问题:Display Driver Uninstaller深度解析与实战指南

如何彻底解决显卡驱动冲突问题:Display Driver Uninstaller深度解析与实战指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/displ…...

论文阅读:MMA: Multi-Modal Adapter for Vision-Language Models

MMA:视觉语言模型的多模态适配器,主要用于改善文本与视觉分支表示之间的对齐,先分析 CLIP 不同层特征的“判别性 / 泛化性”,再只在高层插入一个带共享投影层的多模态适配器,让视觉和文本分支在学习任务特异知识的同时…...

华为CANN/ops-math反射填充3D梯度算子

ReflectionPad3dGrad 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推…...

OnmyojiAutoScript:阴阳师手游智能自动化脚本终极指南

OnmyojiAutoScript:阴阳师手游智能自动化脚本终极指南 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师手游的日常任务繁重,从御魂副本到百鬼夜行&a…...

从入门到精通:彻底讲懂Agent的Skill,不做“炫技式浪费”

写在前面 现在做Agent,有一个非常典型的误区: 👉 Skill越多 Agent越强 于是开始疯狂堆Skill、堆工具、堆能力。 结果是什么? • Token飞速消耗• 调用混乱• 成本暴涨• 但任务反而做不好 本质上,这不是“在做A…...

Ceph 对象存储深度解析系列 第二部分:RGW 数据路径、分片和自动化

新钛云服已累计为您分享896篇技术干货简介在本深度解析的第一部分中,我们剖析了 Ceph RGW 内部的高性能请求路径。我们涵盖了其无状态前端、基础 RADOS 存储池以及关键的桶索引,揭示了动态分片如何使单个桶内的对象列表实现几乎无限的可扩展性。我们确立…...

Godot引擎集成本地大语言模型:从原理到实战的完整指南

1. 项目概述:在Godot引擎中集成本地大语言模型 如果你是一名游戏开发者,最近肯定没少听说AI在游戏开发中的应用。从自动生成对话到设计游戏机制,大语言模型(LLM)展现出的潜力让人兴奋。但一提到实际集成,很…...

联邦学习与Transformer融合:在CV与入侵检测中的隐私保护分布式智能实践

1. 项目概述与核心价值最近几年,我一直在关注一个技术交叉点:如何让模型在“看不见”彼此数据的情况下,还能协同进化,变得更聪明。这听起来有点像天方夜谭,但在数据隐私法规日益收紧、数据孤岛问题愈发严重的今天&…...

CANN/metadef Add函数API文档

Add 【免费下载链接】metadef Ascend Metadata Definition 项目地址: https://gitcode.com/cann/metadef 函数功能 新增一个ContinuousVector元素&#xff0c;其中新增ContinuousVector元素的容量为inner_vector_capacity。 函数原型 template<typename T> Con…...

【路径规划】基于启发式搜索与增量启发式搜索方法MRPP或MAPF的多机器人路径规划算法附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。&#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

Parquet文件原理与实战:列式存储如何提升查询性能和压缩效率

1. 什么是Parquet文件&#xff1f;一个数据工程师每天都在用、却很少被真正讲透的底层逻辑Parquet不是一种“新潮技术”&#xff0c;它更像是一把被磨得锃亮的瑞士军刀——没有炫目的UI&#xff0c;不靠营销话术&#xff0c;但只要你在处理超过百万行的数据、写过哪怕一条SELEC…...

VLA-0视觉语言动作模型:零修改部署与多模态AI实践

1. 项目概述VLA-0是一种突破性的视觉语言动作模型&#xff0c;它最大的特点在于实现了"开箱即用"的零修改部署能力。作为一名长期关注多模态AI发展的从业者&#xff0c;我首次接触到这个模型时就被它的设计理念所震撼——传统视觉语言模型往往需要针对特定任务进行繁…...

CANN/ops-math矩阵乘法压缩反量化算子

aclnnMatmulCompressDequant 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math &#x1f4c4; 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAt…...

CANN KV压缩Epilog算子

custom-npu_kv_compress_epilog 【免费下载链接】cann-recipes-infer 本项目针对LLM与多模态模型推理业务中的典型模型、加速算法&#xff0c;提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-infer 产品支持情况 产品是否支持Ascend 950…...

SQL PIVOT原理与实战:从行转列到高性能宽表生成

1. 项目概述&#xff1a;从“行变列”开始&#xff0c;真正搞懂SQL PIVOT不是语法糖&#xff0c;而是数据思维的分水岭你有没有遇到过这样的报表需求&#xff1a;销售表里每条记录是一笔订单&#xff08;客户名、产品名、金额、日期&#xff09;&#xff0c;但老板要的却是“每…...

CANN/asc-tools msopgen算子模板样例

【免费下载链接】asc-tools Ascend C Tools仓是CANN基于Ascend C编程语言推出的配套调试工具仓。 项目地址: https://gitcode.com/cann/asc-tools msopgen使用新自定义算子工程模板样例 概述 本样例介绍msopgen工具按照新算子工程模板生成新自定义算子工程。以AddCust…...

2025最权威的降重复率神器实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 对于AI生成内容容易被检测出来的这个问题&#xff0c;现如今已经存在专门用来降低文本AI率的…...

GPT-3.5在独裁者游戏中的公平性实验:AI决策的统计模式与伦理启示

1. 项目概述&#xff1a;当AI成为“裁判”&#xff0c;公平性如何定义&#xff1f;最近在翻看一些行为经济学和博弈论的资料时&#xff0c;一个经典的实验模型——“独裁者游戏”——反复出现在眼前。这个实验很简单&#xff1a;两个人&#xff0c;一笔钱。一个人是“独裁者”&…...

CANN双三次上采样算子

aclnnUpsampleBicubic2d 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv &#x1f4c4; 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT…...

AI赋能引力波数据分析:从信号检测到参数估计的实践与挑战

1. 引力波数据分析的挑战与AI的破局之道当LIGO在2015年首次直接探测到引力波时&#xff0c;整个物理学界为之振奋。这不仅仅是验证了爱因斯坦百年前的预言&#xff0c;更是为我们打开了一扇观测宇宙的全新窗口。然而&#xff0c;随之而来的并非全是喜悦&#xff0c;还有海啸般的…...

CANN/cannbot-skills NPU推理优化

【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体&#xff0c;本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills name: infer-model-optimize-team description: NPU 模型推理优化助手…...

2026 毕业季必藏:9 款 AI 论文查重降重工具全测评,Paperxie 领衔高效通关

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/weight?type1https://www.paperxie.cn/weight?type1 毕业季论文查重与 AIGC 检测双重压力下&#xff0c;选对工具能少走 90% 弯路。2026 年知网、维普 AIGC 检测算法全面…...

Llama 3.2 Vision轻量微调实战:500图打造电商级图文生成模型

1. 项目概述&#xff1a;为什么我们要亲手微调一个视觉语言模型&#xff1f;你有没有遇到过这样的场景&#xff1a;电商运营同事凌晨三点发来一张模糊的手机拍摄图&#xff0c;配文“快帮我写个爆款标题”&#xff0c;而你盯着这张图反复放大、截图、百度识图、翻竞品页面&…...

CANN/pyasc取小数计算函数

asc.language.adv.frac 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口&#xff0c;支持在昇腾AI处理器上加速计算&#xff0c;接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.adv.frac(dst: LocalT…...

CANN/hccl故障诊断定位思路

定位思路 【免费下载链接】hccl 集合通信库&#xff08;Huawei Collective Communication Library&#xff0c;简称HCCL&#xff09;是基于昇腾AI处理器的高性能集合通信库&#xff0c;为计算集群提供高性能、高可靠的通信方案 项目地址: https://gitcode.com/cann/hccl …...

CANN学习中心CMake配置详解

CMake 配置详解 【免费下载链接】cann-learning-hub CANN 学习中心仓&#xff0c;支持在线互动运行、边学边练&#xff0c;提供教程、示例与优化方案&#xff0c;一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.com/cann/cann-learning-hub CMakePresets.js…...

MRCV开源工具库:用AI潜在表示与神经网络重塑音乐创作与声音设计

1. MRCV&#xff1a;当AI遇见声音&#xff0c;一个开源工具库如何重塑音乐创作作为一名在音频编程和音乐技术领域摸爬滚打了十多年的从业者&#xff0c;我见证了从简单的MIDI音序器到复杂的物理建模合成器的演变。但最近几年&#xff0c;最让我感到兴奋的&#xff0c;无疑是人工…...

感知-通信-计算一体化:破解边缘AI资源困局的核心架构

1. 项目概述&#xff1a;为什么我们需要感知-通信-计算一体化&#xff1f;在智能家居里&#xff0c;你对着智能音箱说句话&#xff0c;它几乎瞬间就能回应&#xff1b;在自动驾驶汽车上&#xff0c;摄像头和雷达捕捉到的路况信息&#xff0c;需要立刻被分析并做出驾驶决策。这些…...

CANN/runtime设备同步内存复制示例

5_d2d_sync_memory_copy 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 描述 本样例展示了Device内的内存复制&#xff0c;使用aclrtMemcpy内存复制接口。 产品支持情况 本样例支持以下产品&#x…...