
java基础
文章平均质量分 64
杏花春雨江南
这个作者很懒,什么都没留下…
展开
-
invokevirtual和invokestatic
在 Java 中,和是字节码指令,用于调用方法。它们的主要区别在于和。用于调用(非静态方法)。实例方法依赖于对象实例,需要通过对象来调用。。用于调用(类方法)。静态方法不依赖于对象实例,直接通过类名调用。。需要作为调用者。在运行时,JVM 会根据对象的实际类型(动态绑定)决定调用哪个方法(多态)。例如:javaa.sound();// 调用 Dog 的 sound 方法对应的字节码:plaintext不需要对象实例,直接通过调用。在编译时就已经确定调用的方法(静态绑定)。原创 2025-03-21 01:11:11 · 847 阅读 · 0 评论 -
jvm 配置
export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms10649m -Xmx10649m -XX:MaxPermSize=256m -XX:PermSize=256m -XX:MaxDirectMemorySize=1966m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export原创 2025-03-07 14:35:56 · 1048 阅读 · 0 评论 -
自定义类加载器
实现类的隔离问题:在同一个JVM中运行多个应用程序或模块时,如果这些应用程序或模块依赖不同版本的同一个类库,可能会导致冲突。解决方案:通过自定义类加载器,可以为每个应用程序或模块创建独立的类加载器,从而实现类的隔离。典型场景Web应用服务器(如Tomcat)为每个Web应用创建独立的类加载器,避免不同Web应用之间的类冲突。插件化架构中,为每个插件创建独立的类加载器。继承类java复制// 实现自定义逻辑重写findClass方法在该方法中实现从自定义来源加载类的逻辑。调用。原创 2025-03-05 13:53:44 · 587 阅读 · 0 评论 -
ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue 和 PriorityBlockingQueue 使用示例
适合固定大小的任务队列。:适合高吞吐量的任务队列。:适合直接传递任务的场景。:适合按优先级处理任务的场景。根据具体需求选择合适的队列类型。原创 2025-03-05 10:31:39 · 649 阅读 · 0 评论 -
ArrayBlockingQueue: LinkedBlockingQueue: ;SynchronousQueue: ;PriorityBlockingQueue:
无界队列和默认情况下的。有界队列和指定容量后的。特殊队列。原创 2025-03-05 10:30:24 · 300 阅读 · 0 评论 -
META-INF 文件夹用途
META-INF文件夹是 Java 应用程序和库中用于存放元数据和配置文件的标准目录。存放文件。存放 SPI 配置文件。存放签名文件。存放 Spring 配置文件。存放资源文件。存放 OSGi 配置文件。存放 Java 9+ 模块描述文件。存放扩展配置文件。存放许可证文件。合理使用META-INF文件夹可以提高应用程序的可维护性和扩展性。原创 2025-02-18 11:40:05 · 678 阅读 · 0 评论 -
java中共有四种访问级别(Access Modifiers)
在 Java 中,访问级别(Access Modifiers)用于控制类、方法、变量等成员的可见性和访问权限。Java 提供了private。原创 2025-02-18 10:43:48 · 371 阅读 · 0 评论 -
SPI机制
。原创 2025-01-13 17:03:14 · 198 阅读 · 0 评论 -
代理相关总结
代理模式通过引入代理对象来控制对目标对象的访问,增强功能,并解决了多个设计问题。根据不同的需求,可以选择静态代理、动态代理或 CGLIB 代理来实现。动态代理和 CGLIB 代理通常更灵活,适合在框架中使用。原创 2024-12-05 17:31:23 · 349 阅读 · 0 评论 -
guava里常用功能
guava 是 Google 提供的一个 Java 库,提供了很多实用的工具类和方法,可以帮助开发者更高效地编写代码。原创 2024-09-26 13:59:40 · 526 阅读 · 0 评论 -
List 循环遍历删除元素
如果你只是需要删除某些元素,而不需要在循环中添加或修改其他元素,可以先复制原始列表,然后在副本上进行删除操作。)时,修改它的结构(例如添加、删除元素)会使得迭代器失效,进而引发这个异常。,它提供了更多的操作选项,包括插入、删除和替换元素。:如果你需要在循环中进行多次修改,可以使用。方法在循环遍历时直接删除元素可能会导致。为了避免这个问题,应该使用迭代器的。或者复制原始列表并在副本上进行操作。方法可以安全地删除元素。在 Java 中,使用。:在循环中使用迭代器的。总之,直接在循环中使用。原创 2024-09-24 15:57:23 · 593 阅读 · 0 评论 -
访问修饰符(如private、protected、public, 默认的)
在 Java 中,访问修饰符(或可见性修饰符)控制着类、接口、方法和字段的访问权限。它们决定了这些成员可以被哪些代码访问。是最宽松的,可以被所有代码访问。是最严格的,仅限于类内部;的可见性范围介于二者之间。原创 2024-09-18 21:21:20 · 458 阅读 · 0 评论 -
LinkedList 在项目中的应用
LinkedList在需要频繁插入和删除的应用中非常高效,适合用作队列、双端队列、栈以及其他需要动态大小和灵活性的场景。选择使用LinkedList要根据具体的需求和性能考虑来决定。原创 2024-09-09 16:07:04 · 532 阅读 · 0 评论 -
java 方法调用 减少参数传递的方法
通过这些方法,可以有效减少方法参数的传递,使得代码更加清晰和易于维护。选择合适的方法取决于具体的应用场景和需求。原创 2024-09-06 11:34:12 · 278 阅读 · 0 评论 -
遍历 Set
中的元素是无序的,所以遍历的顺序可能与插入的顺序不同。另外,使用迭代器或增强型 for 循环时,如果你尝试在遍历过程中修改。方法或 Stream API 遍历时,也不能直接修改。,因为这些方法不提供对集合的修改操作。在 Java 中,遍历。以上方法都可以用来遍历。原创 2024-08-19 21:04:48 · 776 阅读 · 0 评论 -
将 List 转换为字符串
这种方法可以指定分隔符,适合于需要自定义输出格式的情况。选择哪种方法取决于你的具体需求和偏好。这种方法也可以自定义分隔符,并且代码更简洁。中的所有元素用逗号分隔,两端加上方括号。在 Java 中,可以使用多种方法将。这种方法可以灵活地控制输出格式。提供了更多的灵活性和可读性。方法适合于简单的转换,而。原创 2024-08-19 21:04:13 · 1470 阅读 · 0 评论 -
拦截器(Interceptor)和过滤器(Filter)
拦截器通常是框架级别的组件(如Spring拦截器),它可以对请求和响应进行预处理和后处理。拦截器可以访问执行上下文,因此它们能够深入到多个处理请求的层面上。过滤器是基于Servlet规范的组件,用于在Servlet层面上对请求和响应进行预处理和后处理。过滤器对所有请求都有效,通常不依赖于特定的Java框架。原创 2024-07-30 20:59:12 · 323 阅读 · 0 评论 -
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)原创 2024-07-18 22:21:49 · 206 阅读 · 0 评论 -
java 注解
这个例子展示了如何声明一个简单的注解,将它应用到一个方法上,并在运行时通过反射来处理它。在实际开发中,注解被广泛用于框架中,如Spring、Hibernate等,以简化配置和代码的书写。Java 注解是一种用于代码中的元数据表示的形式,它允许你将信息直接嵌入代码中。注解本身不会直接影响代码的操作,但它可以被编译器或运行时环境用来生成额外的代码、XML 文件或者影响程序的行为。注解的原理基于反射(Reflection)API,这是Java中一组允许在运行时检查或修改类和对象的行为的API。原创 2024-07-23 20:56:09 · 250 阅读 · 0 评论 -
java类各属性入库前的校验
首先,确保您已经添加了 Bean Validation API 和其实现类(如 Hibernate Validator)的依赖到您的项目中。类来实现 Java 类属性的校验是一种标准的做法。以下是一个简单的示例,展示如何使用这些类来校验一个简单的。包含了关于违反约束的详细信息,包括违反的属性路径和违反信息。现在,您可以创建一个验证器,并使用它来校验。实例的属性不符合注解定义的约束条件,原创 2024-07-22 20:57:12 · 685 阅读 · 0 评论 -
org.apache.commons.lang3.StringUtils#isEmpty与isBlank
这个方法通常用于判断一个字符串是否不为空且至少包含一个非空格字符。如果字符串不为空且包含至少一个非空格字符,则返回 true;否则返回 false。通常用于排除空字符串或者只包含空格的字符串。: 这个方法通常用于判断一个字符串是否为空,即长度为0或者为 null。这个方法通常用于检查字符串是否包含任何字符。这两个方法在很多编程语言和框架中都有类似的实现,例如 Java 中的 StringUtils 类提供了这两个方法的实现。是常用于字符串处理的方法,通常用于检查字符串是否为空或者是否包含非空格字符。原创 2024-07-18 09:21:07 · 271 阅读 · 0 评论 -
猜猜我的有多大 之 java对象大小
对象头(Object Header): 每个Java对象都有一个对象头,它包含了一些用于管理对象的元数据,比如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。在Java中,对象的大小并不是固定的,它取决于几个因素,包括对象中的数据类型、对象头的大小、对齐填充(padding)以及继承的字段。然而,这只是一个粗略的估算。需要注意的是,对象的实际内存使用还会涉及到其他因素,例如JVM内部的数据结构、GC算法的细节等。是8字节,引用(在使用压缩指针的64位JVM上)通常是4字节等。原创 2024-07-17 09:19:57 · 252 阅读 · 0 评论 -
字节码增强技术在监控埋点场景的大规模实践落地及其他领域探索 (转载)
如果再不满足,就需要修改它的源码,这样成本就大了,需要去维护多个主流版本、多个 SDK,还需要去打包、去维护,成本非常高,而且信用性也很高。它对 Lambda 表达式的支持也是比较友好的。第二个是Javassist,它一个日本人基于ASM进行二次开发的更高级的框架,它对用户屏蔽JVM指令集和Class文件等这些晦涩难记的概念,我们可以遵循Java语法进行开发,但是从图中我们也不难看到,所有的增强逻辑都是采用硬编码(转义字符串)的形式开发,同时也一样不支持断点Debug,整体开发效率还是受到很大的限制。转载 2024-07-16 21:30:44 · 121 阅读 · 0 评论 -
java 方法入参对象重新赋值后, 方法外获取 没有变化。为什么
重新赋值对象引用:不会影响方法外的对象引用。修改对象的内部状态:会影响方法外的对象状态。理解Java的参数传递机制对于编写和调试代码是非常重要的。通过修改对象的内部状态而不是重新赋值对象引用,可以确保在方法外看到预期的变化。原创 2024-07-16 11:35:34 · 1501 阅读 · 0 评论