java基础
文章平均质量分 70
superCleanCoder
希望写的代码和生活一样都能简单但不简陋
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java Agent的应用
Java Agent是通过 JVM 的 Instrumentation API 实现的一种机制,它允许开发者在运行时修改或监测已加载类的字节码。这一特性为我们提供了非常广泛的应用场景,包括但不限于代码注入性能监控、调试工具和安全检查等。在示例中我们也自定义了转换器,但只是简单的把已存在的类文件保存到本地,如果要实现redefineClasses一样的功能,应该如何做呢?更改方法体主要是在转换器中transform方法中,所以我们需要重写此方法。原创 2024-12-18 21:05:20 · 1651 阅读 · 0 评论 -
java之enclosing class
可以看到除了顶层类的enclosingClass是null以外,其他的都是UserInfo。所以我们现在应该就能猜到getEnclosingClass是获取它的外围类,Enclosing Class确实也是外围类的意思。一直没注意这个,于是好好了解了一下。这里在延伸一下,如果在嵌套类中再定义一个内部类,那么这个内部类的外围类是嵌套类还是顶层类呢?上面定义了五种类型的类,并打印它的enclosingClass。(3)内部类(非静态的嵌套类)(4)局部类(方法中定义的类)下面通过一段代码来详细说明。原创 2024-12-01 11:05:39 · 249 阅读 · 0 评论 -
浅谈volatile
而volatile则会保证变量只要修改就会马上同步到主内存中,并且线程读取变量时也是会先从主内存中刷新变量值,以此来保证了变量的可见性。这得从虚拟机的内存模型说起,这里直接引用《深入理解java虚拟机》书中原话:JAVA内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不是直接读写主内存中的数据。上面这个例子执行后,如果是原子性的,那么count的值应该是50000。原创 2024-11-30 21:29:54 · 755 阅读 · 0 评论 -
元注解@Target,@Retention,@Documented,@Inherited,@Repeatable
(1)@Target:定义注解作用范围,值是ElementType的枚举数组,可以是作用于类,方法,字段,参数等。然后定义一个UserInfoChildren类继承UserInfo,使用TestHello注解修饰UserInfo,但不修饰UserInfoChildren。(3)@Dumented:使用此注解定义的注解在其他类使用时,生成javadoc时会被一起记录。RetentionPolicy.CLASS:class文件会留存,但不会在虚拟机运行时感知,即在运行时无法通过反射获取注解信息。原创 2024-11-21 14:57:47 · 746 阅读 · 0 评论 -
RetentionPolicy.CLASS和RetentionPolicy.RUNTIME的区别
比如lombok的注解基本都是RetentionPolicy.SOURCE,用于在编译成class文件时动态生成代码,在class文件看不到对应注解存在。所以我们在运行时是无法获取对应注解的信息的,那么它有什么用的。根据类加载的过程,加载需要经过加载,校验,准备,解析,初始化,使用,卸载,这七个步骤,在加载的时候就是把class文件加载到虚拟机,那么这时候虚拟机是能从class文件中感知到注解的存在的,那么就可以在连接阶段(校验,准备,解析)阶段根据信息进行一些操作,个人猜测大概率是给虚拟机底层使用的。原创 2024-11-19 19:35:13 · 686 阅读 · 0 评论
分享