Java-面向对象-包、反射

告别底噪与失真:手把手教你调校WM8988音频Codec的输入输出增益链 本文详细介绍了如何调校WM8988音频Codec的输入输出增益链,解决底噪与失真问题。从模拟输入增益、数字转换增益到输出放大增益,提供了具体的寄存器配置和调试策略,帮助开发者优化音频信号处理链,提升音质表现。 阅读详情

什么是包(Package)?

包的分类

内置包(Java API)

用户自定义包

包的命名规则

使用包(import)

如何创建和使用自定义的包

什么是反射?

反射能干什么

反射的核心类(都在 java.lang.reflect 和 java.lang 包中)

反射的常见用法

获取Class对象的三种方式

 获取类名、包名、父类、接口

获取字段 并访问私有字段

获取方法并调用

获取构造器并创建对象

反射的缺点


什么是包(Package)?

包是Java中一种逻辑分组机制,类似于一个文件夹。Java中的类、接口都可以放在包中,多个相关的类/接口可以放在同一个包里。

package com.example.student;

public class Student {
    // 类的实现
}

如,上面的student类就属于com.example.student包。

包的分类

  • 内置包(Java API)

  1. java.lang:基本类,如 String、Math、Object(默认导入)

  2. java.util:集合框架、日期、工具类

  3. java.io:输入输出相关类

  4. java.net:网络编程相关类

  • 用户自定义包

可以自己创建包,讲类组织起来:

package myapp.utils;

public class Helper {
    // 辅助方法
}

包的命名规则

  • 通常以反域名的方式命名,如:com.example.project

  • 使用小写字母

  • 避免使用Java的保留字

注意:Java源文件的包名,一定要和文件的目录结构保持一致!!!

假设我写了一个类:

package com.example.utils;

public class Tool {
    // 工具类
}

那么它的文件就必须放在下面目录结构中:

项目目录/
└── com/
    └── example/
        └── utils/
            └── Tool.java

当javac Tool.java被编译后的字节码Tool.class也会被放在:

com/
└── example/
    └── utils/
        └── Tool.class

如果你把上面的 Tool.java 放在根目录下,而它的包名还是 com.example.utils,那么编译时就会报错:

Tool.java:1: 错误: 程序包 com.example.utils 不存在
package com.example.utils;

除非你自己用命令行指定好 classpath 和目录结构,但一般来说,目录结构必须与包名完全对应。

使用包(import)

  • 导入单个类
import java.util.ArrayList;
  • 导入整个包
import java.util.*;
  • 无需导入的包

java.lang 包是默认导入的,比如 String, System, Math 等类可以直接使用。

如何创建和使用自定义的包

在 animals 包中加入一个接口(interface):

/* 文件名: Animal.java */
package animals;
 
interface Animal {
   public void eat();
   public void travel();
}

在同一个包中加入该接口的实现:

package animals;
 
/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{
 
   public void eat(){
      System.out.println("Mammal eats");
   }
 
   public void travel(){
      System.out.println("Mammal travels");
   } 
 
   public int noOfLegs(){
      return 0;
   }
 
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

什么是反射?

反射是 Java 提供的一种机制,它允许程序在运行时查看和操作类的结构。

反射能干什么

功能说明
获取类的信息包括类名、包名、继承关系、修饰符等
获取成员字段(Field)、方法(Method)、构造器(Constructor)
动态创建对象通过构造器或无参构造方法创建
动态调用方法运行时决定调用哪个方法
修改字段值哪怕是私有字段,也能访问和修改

反射的核心类(都在 java.lang.reflect 和 java.lang 包中)

类/接口用途
Class<T>表示类或接口本身,是反射的入口
Field表示类中的字段(成员变量)
Method表示类中的方法
Constructor表示类中的构造函数
Modifier提供修饰符信息,如 public/private

反射的常见用法

  • 获取Class对象的三种方式

// 方法1:通过类名.class
Class<?> clazz1 = Person.class;

// 方法2:通过对象实例
Person p = new Person();
Class<?> clazz2 = p.getClass();

// 方法3:通过全类名
Class<?> clazz3 = Class.forName("com.example.Person");
  •  获取类名、包名、父类、接口

System.out.println(clazz1.getName()); // 类的全名
System.out.println(clazz1.getPackage()); // 包
System.out.println(clazz1.getSuperclass()); // 父类
System.out.println(Arrays.toString(clazz1.getInterfaces())); // 实现的接口
  • 获取字段 并访问私有字段

Field field = clazz1.getDeclaredField("name");
field.setAccessible(true); // 关闭访问检查
field.set(p, "张三"); // 给 p 的 name 字段赋值
System.out.println(field.get(p)); // 获取 p 的 name 字段
  • 获取方法并调用

Method method = clazz1.getDeclaredMethod("sayHello", String.class);
method.setAccessible(true); // 可访问私有方法
method.invoke(p, "小明"); // 调用方法,参数是对象和实际参数
  • 获取构造器并创建对象

Constructor<?> constructor = clazz1.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("李四", 25);

反射的缺点

  • 性能较低:反射涉及大量的运行时操作,性能开销比直接代码大。

  • 安全问题:可以访问私有字段,破坏封装。

  • 不易维护:反射代码可读性差,易出错。

openclaw通俗入门系列4——智能体工作区 工作区 = 智能体的家,存放它的性格、记忆、技能。默认不是牢笼(可以用沙箱隔离)。建议放到私有 Git 备份,但绝对不要提交密钥! 阅读详情

相关推荐

海康威视iSC平台视频流对接:RTSP、HLS、WS三种协议到底该怎么选?

本文深入分析海康威视iSC平台视频流对接中RTSP、HLS和WebSocket三种协议的优缺点,帮助开发者根据实时性、兼容性和网络环境做出最优选择。特别适合综合安防管理平台的Web视频监控系统开发,提升用户体验和系统性能。

weixin_28365523的博客 690

三天急速通关JAVA基础知识:Day2 面向对象

本文目的是为了建立Java的面向对象知识体系,内容由本人已学习的java知识为基础,kimi与gpt辅助完善。本文所提供的信息和内容仅供参考,作者和发布者不保证其准确性和完整性。

qq_42828479的博客 1031

51单片机+HX711电子秤Proteus仿真保姆级教程(附完整源码与避坑指南)

本文详细介绍了51单片机与HX711电子秤在Proteus仿真中的全流程实战指南,包括电路设计、核心代码实现、典型问题排查及系统集成等关键步骤。特别提供了HX711驱动程序的编写技巧和称重数据处理算法,帮助开发者快速搭建高精度电子秤仿真系统,并避免常见的设计陷阱。

weixin_30752699的博客 412

Java笔试面试每日打卡(2) -基础篇

题目 –来自《Java程序员面试宝典》 什么是反射机制 package有什么作用 如何实现C语言的函数指针功能 面向对象和面向过程有什么区别 面向对象主要有哪些特征 面向对象的开发方式有什么优点 什么是继承 组合和继承有什么区别 多态的实现机制是什么 重载和覆盖有什么区别 题目和答案 什么是反射机制 答:反射是Java提供的一种可以动态的获取运行中对象的状态及属性的机制。这种机制可以在 ...

图图是只猫 1475

一口气看完TransformerXL详细解释带代码一:相对位置编码

相对位置编码(Relative Position Encoding)是Transformer模型中用于捕捉序列元素间相对位置关系的一种方法,与绝对位置编码(如BERT中的固定位置嵌入)不同,它直接建模元素之间的相对距离,从而更灵活地处理长序列或不同长度的序列。1. 为什么需要相对位置编码?​。

m0_73426548的博客 1425

BK3296蓝牙音频SoC深度评测:如何用这颗芯片打造超低功耗TWS耳机?

本文深度评测BK3296蓝牙音频SoC在TWS耳机中的应用,重点解析其22nm工艺带来的超低功耗优势(A2DP模式仅2.8mA)和3×3mm封装设计。通过芯片架构分析、双麦降噪调优及开发套件使用指南,为工程师提供打造高性能TWS耳机的完整解决方案,显著提升续航和音频质量。

rice5的博客 654

Java基础-2. Java面向对象编程

比如说飞行,飞机和鸟都能飞行,但是飞机和鸟不能抽象出一个父类,只能抽象出一个接口,接口规定有飞行这个动作,飞机和鸟有不同的实现(引擎、翅膀)属性主要是用来描述类的,称之为类的成员属性或者类成员变量。反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性。当非静态类的方法访问某个变量时,查找的顺序是:本方法所在的局部变量 > 内部类成员变量 > 外部类成员变量。是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法)。

Glubin的博客 167

如何把ORCAD 中的修改同步到PADS 中

Generate ECO file(*.eco),eco 文件的默然保存地址是在pads 的。ECO Files (*.eco),接着在文件中找到所生成的eco 文件,找到。再下来是产生eco 文件,先打开old_design.pcb,然后选择。PCB Design 前面的选项选中,意思把当前文件做为原始的比对。安装目录下(可修改eco 文件的保存目录),这里把eco 文件保存。接下来用新生成asc 文件的文件产生新的PCB 文件,新生成。不对新生成的pcb 做任何的修改,直接保存文件,这里把新文件。

智光工作室 993

Java简介

Java是面向对象的编程语言,和其他的面向对象的编程语言一样,在它的世界里面万物皆对象,比如我们看到的类。同时它能够支持分布式,分布式开发(分布式开发就是把原本可以放在一个工程中的包,分开创建为对应的工程,即每一个包就是一个工程。这几个工程之间是相互依赖的关系。是我在xiaoshuo566看到的) Java的体系结构是中立的,在一定的程度上能够被称为动态语言,由于反射机制,让Java能够在运行时再获取相应类型的信息从而大大减少代码量,提供更加简单,通用的代码。 ...

jitang_sh09的博客 254

【YOLO26实战全攻略】09——YOLO26多目标跟踪实战宝典:从原理到智慧园区人流统计全流程

多目标跟踪(MOT)是视频分析的核心技术,解决了单帧检测无法关联目标身份的痛点。本文基于YOLO26轻量化检测模型与ByteTrack跟踪算法,从新手视角出发,系统讲解多目标跟踪的核心原理、环境搭建、实操步骤与工程落地。内容涵盖ByteTrack分层关联策略解析、YOLO26集成跟踪的一行代码实现、配置参数调优、区域计数、轨迹数据提取与热力图可视化,最终通过智慧园区人车流量统计虚拟案例,完整呈现从技术原理到实际应用的全流程。本文注重实用价值,所有代码可直接复现,参数配置附带场景化建议,帮助新手快速上手。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 353

AI 学术科研与论文写作的正确打开方式!不套提示词模板,靠这个思路完美实现人机共创

真正的“人机共创”,也就是AI引导我思考的过程,如果你想用你的模糊需求,去写出专业化的学术内容,那是不可能的。对想快速完成某些学术任务的同仁来说,我们完全不用去抠提示词的细节,直接用魔法打败魔法,设计一段优化提示词的结构化提示词(提示词架构),辅助优化你的模糊需求。创建好之后,可以对它提你的任何模糊学术需求,比如写论文、写综述、学术润色等等,它绝不会直接帮你生成,而是先搞懂你的真实意图。以上整个流程,完全没有一句废话,先是思考,再是向你提问弄懂你的意图,最后整合你给出的关键信息,直接优化你给的模糊需求。

智能AI让学术科研更容易 477

Java基础面试题

本文提供了一些Java基础面试题的答案,包括Java的特点、多态性的实现、多线程的实现、异常处理、泛型、序列化和JAR包等内容。这些问题涵盖了Java程序员必备的基本知识和技能。

2201_75630288的博客 123

群无人机航迹规划-虚拟管道

图源北理工全权老师团队虚拟管道相关论文,文字为个人理解,以ppt形式分享报告。

coldmood77的博客 666

Java学习之路一:Java基础

Java基础     Java介于编译型语言和解释型语言之间。编译型语言(C、C++)其代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。解释型语言(Python、Ruby)由解释器直接加载源码然后运行,代价是运行效率太低。而Java是将代码编译成一种“字节码”,针对不同平台编写虚拟机(JVM),不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”。     Java中包括很多的开发工具,如JDK(Java Dev

柠檬草的味道 464

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java(类和对象,继承,反射,接口,泛型,代理)

类和对象面向对象程序设计概述:面向对象程序设计(简称OOP)简介:类对象类之间的关系对象构造对象析构和 finalize 方法包访问修饰符继承父类和子类多态final抽象类Object 所有类的超类equals 方法hashCode方法toString方法getClass方法对象的包装器与自动装箱反射Class 类利用反射分析类利用反射操作类接口接口的特性接口与抽象类静态方法默认方法接口与回调Cloneable接口泛型设计定义泛型类泛型方法 面向对象程序设计概述: 面向对象程序设计(简称OOP)简介: 面向

保持热爱,持续学习 1097

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java基础:反射

反射的概述 Reflection是被视为动态语言的关键,反射机制允许程序在执行期间,借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性和方法。 加载完类后,产生一个class类型的对象,包含完整的类的结果信息。 这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射 动态语言:Object-C,C#,JavaScript,PHP,Pyehon, 静态语言:Java,C,C++ Java反射机制提供的功能: 1.运行时判断任意

DoYouThinkAMe的博客 199

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

反射

在说反射之前,我们先来思考一个具有争议的问题: Java到底是不是纯面向对象语言? 那如何判断呢? 只要Java中的元素能够被类所描述、能够通过实例化获取到对象,就说这是面向对象的。 因为Java中的8大基本数据类型是不能实例化对象的,比如:int a = 8;我们是不能通过a调用一个方法的,所以会有人说Java不是纯面向对象的语言。但其实Java就是一个纯面向对象的语言,因为基本类型它又有包装类...

Calm的博客 272

java 反射之获取成员变量

首先创建GetFieldTest 类,public class GetFieldTest {       int i;       public float f;       protected boolean b;       private String s;}编写测试类GetFieldMain 类,通过反射获取GetFieldTest类中所有成员变量的相关信息。import java.lan...

yp_2500的博客 1326

Java反射机制的使用

在学习Java反射机制之前我应该先明确三个问题。 1、反射机制的作用是什么? 答:我们可以通过反射机制动态地获取类的信息,如成员、方法、构造方法、类名等(也可以获取private修饰的类的成员变量、方法等)。 2、什么是动态获取类的信息呢? 答:即在程序运行时获取类的信息,而非编译时。 3、反射机制主要应用在什么地方? 反射机制的应用,主要体现在设计模式中的动态代理,本篇博客将致力于讲

北冥冰辰的专栏 925

Java基础之反射(Reflection)

定义:允许Java在运行期获取指定类中的各种属性的一种机制。(包括接口、变量、方法等信息) Java反射可获取的属性有: Class对象 类名 构造方法 包信息 获取方法、指定方法的参数、返回类型 变量 父类 实现的接口 修饰符 泛型 在列举方法之前先具一个包含上面10个属性的例子: //父类 public class ReflectionFather { protected...

楊帥 212

Java中的反射 ————Class类

一、 如何获取Class类 Class类的特点: public final class Class<T> implements java.io.Serializable, GenericDeclaration, Type, ...

weixin_45104211的博客 326

Java中反射的理解

反射 一、什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 反射用在 Java 身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的 classes。反射(Reflection)机制是 JAVA 成为动态语言的一个关键特性。 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法...

weixin_33895475的博客 89

彻底搞懂java反射技术及其原理

概述:反射是java中最强大的技术之一,很多高级框架都用到了反射技术,面试中也是经常问的点,所以搞懂反射非常重要! 文章目录1.反射是什么?2.反射的底层原理3.反射在spring IOC容器中的使用3.反射的常用API 1.反射是什么? java反射机制指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法功能称为java语言的反射机制. 丢一个堆概念,大家可能看的就懵逼了,接下来举个简单的例子让大家来

weixin_45593271的博客 1536

Java 面向对象开发基础

Java技术分类 Java技术分为 J2SE、J2EE和J2ME。其中J2SE就是指从1.2版本开始的JDK,它为创建和运行Java程序提供了最基本的环境。J2EE和J2ME建立在J2SE的基础上,J2EE为分布式的企业应用提供开发和运行环境,J2ME为嵌入式应用。 Java语言的特点 面向对象 跨平台 直接支持分布式的网络应用 安全和健壮性 如何建立对象的模型? 自底向上的抽象:把...

qq654207743的博客 414

Java学习之反射机制学习总结--1

1--认识Class类 正常情况下,必须知道类的完整路径名之后,才可以实例化对象;在Java中,也允许通过一个对象,找到其所在的类的信息,这就是Class类的功能 package com.reflection.demo; class X{ }; public class GetC...

103

java反射

创建的这个类的需要继承一个接口(Interface) ,因为获取了实例需要强制转换成某一个借口的实例才可以调用其中的方法。创建一个Class类的引用,调用Class类的静态方法forName(String),参数为类的绝对路径(包含包路径如:org.test.GetClass)。 Class onwClass = Class.forName("org.test.GetClass"); 现在我们

ppwwp的专栏 146
上一篇: Java-面向对象-封装、接口
下一篇: Java-高阶-集合框架
小陈又菜
博客等级 码龄3年 680粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值