java高级特性概要

解锁 Java 领域 Eclipse 的高级特性 本文章的主要目的是帮助 Java 开发者深入了解并掌握 Eclipse 的高级特性。我们将涵盖从 Eclipse 的核心概念、算法原理到实际项目应用等多个方面的内容。通过详细的讲解和实际案例分析,使读者能够在日常的 Java 开发工作中充分利用 Eclipse 的高级功能,提高开发效率和代码质量。范围包括但不限于 Eclipse 的代码调试、插件扩展、性能优化等高级特性,以及如何在不同的开发场景中应用这些特性。 阅读详情

java高级特性概要


Java注解
注解的本质
@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
这是注解 @Override 的定义,其实它本质上就是:
public interface Override extends Annotation{
}
有关这一点,你可以去反编译任意一个注解类。

@Target:注解的作用目标
ElementType 是一个枚举类型,有以下一些值:
ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上
ElementType.FIELD:允许作用在属性字段上
ElementType.METHOD:允许作用在方法上
ElementType.PARAMETER:允许作用在方法参数上
ElementType.CONSTRUCTOR:允许作用在构造器上
ElementType.LOCAL_VARIABLE:允许作用在本地局部变量上
ElementType.ANNOTATION_TYPE:允许作用在注解上
ElementType.PACKAGE:允许作用在包上

@Retention:注解的生命周期
RetentionPolicy 依然是一个枚举类型:
RetentionPolicy.SOURCE:当前注解编译期可见,不会写入 class 文件
RetentionPolicy.CLASS:类加载阶段丢弃,会写入 class 文件
RetentionPolicy.RUNTIME:永久保存,可以反射获取

@Documented:注解是否应当被包含在 JavaDoc 文档中
@Inherited:是否允许子类继承该注解

JAVA 的内置三大注解
除了上述四种元注解外,JDK 还为我们预定义了另外三种注解,它们是:
@Override //匹对父类中是否具有一个同样的方法
@Deprecated //标记已经不再被推荐使用了,可能下一次的 JDK 版本就会删除。
@SuppressWarnings    //压制警告(看着烦人)

自定义注解
public @interface BugReport {
enum Status {UNCONFIRMED, CONFIRMED, FIXED, NOTABUG};
boolean showStopper() default true;
String assiganedTo() default “[none]”;
Status status() default Status.UNCONFIRMED;
String[] reportedBy();
}

注解与反射
Class 类中提供了以下一些方法用于反射注解:
getAnnotation:返回指定的注解
isAnnotationPresent:判定当前元素是否被指定注解修饰
getAnnotations:返回所有的注解
getDeclaredAnnotation:返回本元素的指定注解
getDeclaredAnnotations:返回本元素的所有注解,不包含父类继承而来的

Java反射
Class<?> classTest = Class.forName("");
setAccessible(true); //临时改变私有的东西
getConstructor(String.class,String.class);    //构造方法
getDeclaredConstructor(String.class,String.class);
newInstance() //创建实例
getFields()    // 反射本类及父类所有的public属性
getDeclaredFields() // 反射本类所有属性(包括公有和私有)
Fild.getName() //属性名
Fild.get(obj) //属性值
getMethods()    // 反射本类及父类所有的public方法
getDeclaredMethods()// 反射本类所有方法(包括公有和私有)
invoke(obj,arg…)    //执行方法
Java代理

应用:
基于反射、注解、代理,
实现简易AOP、实现简易ORM、实现简易Spring框架

ClassLoader 中与加载类相关的方法
方法    说明
getParent()    返回该类加载器的父类加载器。
loadClass(String name)    加载名称为name的类,返回的结果是 java.lang.Class类的实例。
findClass(String name)    查找名称为name的类,返回的结果是 java.lang.Class类的实例。
findLoadedClass(String name)    查找名称为name的已经被加载过的类,返回的结果是 java.lang.Class类的实例。
defineClass(String name, byte[] b, int off, int len)    把字节数组 b中的内容转换成 Java 类,返回的结是 java.lang.Class类的实例。这个方法被声明为final的。
resolveClass(Class<?> c)    链接指定的 Java 类。

public class test{
 
   public static void main(String[] args) {
       ClassLoader loader = test.class.getClassLoader();
       while (loader != null) {
           System.out.println(loader.toString());
           loader = loader.getParent();
       }
   }
}

class文件结构
类型    名称    说明    长度
u4    magic    魔数,识别Class文件格式    4个字节
u2    minor_version    副版本号    2个字节
u2    major_version    主版本号    2个字节
u2    constant_pool_count    常量池计算器    2个字节
cp_info    constant_pool    常量池    n个字节
u2    access_flags    访问标志    2个字节
u2    this_class    类索引    2个字节
u2    super_class    父类索引    2个字节
u2    interfaces_count    接口计数器    2个字节
u2    interfaces    接口索引集合    2个字节
u2    fields_count    字段个数    2个字节
field_info    fields    字段集合    n个字节
u2    methods_count    方法计数器    2个字节
method_info    methods    方法集合    n个字节
u2    attributes_count    附加属性计数器    2个字节
attribute_info    attributes    附加属性集合    n个字节
类型    标志    描述
CONSTANT_utf8_info    1    UTF-8编码的字符串
CONSTANT_Integer_info    3    整形字面量
CONSTANT_Float_info    4    浮点型字面量
CONSTANT_Long_info    5    长整型字面量
CONSTANT_Double_info    6    双精度浮点型字面量
CONSTANT_Class_info    7    类或接口的符号引用
CONSTANT_String_info    8    字符串类型字面量
CONSTANT_Fieldref_info    9    字段的符号引用
CONSTANT_Methodref_info    10    类中方法的符号引用
CONSTANT_InterfaceMethodref_info    11    接口中方法的符号引用
CONSTANT_NameAndType_info    12    字段或方法的符号引用
CONSTANT_MethodHandle_info    15    表示方法句柄
CONSTANT_MothodType_info    16    标志方法类型
CONSTANT_InvokeDynamic_info    18    表示一个动态方法调用点

表的结构信息

类的访问信息表
标志名称    标志值    含义
ACC_PUBLIC    0x0001    是否为Public类型
ACC_FINAL    0x0010    是否被声明为final,只有类可以设置
ACC_SUPER    0x0020    是否允许使用invokespecial字节码指令的新语义,JDK1.0.2之后编译出来的类的这个标志默认为真
ACC_INTERFACE    0x0200    标志这是一个接口
ACC_ABSTRACT    0x0400    是否为abstract类型,对于接口或者抽象类来说,次标志值为真,其他类型为假
ACC_SYNTHETIC    0x1000    标志这个类并非由用户代码产生
ACC_ANNOTATION    0x2000    标志这是一个注解
ACC_ENUM    x4000    标志这是一个枚举
字段表结构
field_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}

类型    名称    含义    数量
u2    access_flags    访问标志    1
u2    name_index    字段名索引    1
u2    descriptor_index    描述符索引    1
u2    attributes_count    属性计数器    1
attribute_info    attributes    属性集合    attributes_count
字段的访问信息表
标志名称    标志值    含义
ACC_PUBLIC    0x0001    字段是否为public
ACC_PRIVATE    0x0002    字段是否为private
ACC_PROTECTED    0x0004    字段是否为protected
ACC_STATIC    0x0008    字段是否为static
ACC_FINAL    0x0010    字段是否为final
ACC_VOLATILE    0x0040    字段是否为volatile
ACC_TRANSTENT    0x0080    字段是否为transient
ACC_SYNCHETIC    0x1000    字段是否为由编译器自动产生
ACC_ENUM    0x4000    字段是否为enum
方法表结构
method_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
类型    名称    含义    数量
u2    access_flags    访问标志    1
u2    name_index    方法名索引    1
u2    descriptor_index    描述符索引    1
u2    attributes_count    属性计数器    1
attribute_info    attributes    属性集合    attributes_count

方法访问信息表
标志名称    标志值    含义
ACC_PUBLIC    0x0001    方法是否为public
ACC_PRIVATE    0x0002    方法是否为private
ACC_PROTECTED    0x0004    方法是否为protected
ACC_STATIC    0x0008    方法是否为static
ACC_FINAL    0x0010    方法是否为final
ACC_SYHCHRONRIZED    0x0020    方法是否为synchronized
ACC_BRIDGE    0x0040    方法是否是有编译器产生的方法
ACC_VARARGS    0x0080    方法是否接受参数
ACC_NATIVE    0x0100    方法是否为native
ACC_ABSTRACT    0x0400    方法是否为abstract
ACC_STRICTFP    0x0800    方法是否为strictfp
ACC_SYNTHETIC    0x1000    方法是否是有编译器自动产生的
属性表通用格式
attribute_info {
u2 attribute_name_index; //属性名索引
u4 attribute_length; //属性长度
u1 info[attribute_length]; //属性的具体内容
}
类型    名称    数量    含义
u2    attribute_name_index    1    属性名索引
u2    attribute_length    1    属性长度
u1    info    attribute_length    属性表
Code 属性
Code_attribute {
u2 attribute_name_index; //常量池中的uft8类型的索引,值固定为”Code“
u4 attribute_length; //属性值长度,为整个属性表长度-6
u2 max_stack; //操作数栈的最大深度值,jvm运行时根据该值分配栈帧
u2 max_locals; //局部变量表最大存储空间,单位是slot
u4 code_length; // 字节码指令的个数
u1 code[code_length]; // 具体的字节码指令
u2 exception_table_length; //异常的个数
{ u2 start_pc;
u2 end_pc;
u2 handler_pc; //当字节码在[start_pc, end_pc)区间出现catch_type或子类,则转到handler_pc行继续处理。
u2 catch_type; //当catch_type=0,则任意异常都需转到handler_pc处理
} exception_table[exception_table_length]; //具体的异常内容
u2 attributes_count; //属性的个数
attribute_info attributes[attributes_count]; //具体的属性内容
}

类型    名称    数量    含义
u2    attribute_name_index    1    属性名索引
u4    attribute_length    1    属性长度
u2    max_stack    1    操作数栈深度的最大值
u2    max_locals    1    局部变量表所需的存续空间
u4    code_length    1    字节码指令的长度
u1    code    code_length    存储字节码指令
u2    exception_table_length    1    异常表长度
exception_info    exception_table    exception_length    异常表
u2    attributes_count    1    属性集合计数器
attribute_info    attributes    attributes_count    属性集合
————————————————
版权声明:本文为优快云博主「songsongL」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/songsongL/article/details/104450300/

探索 Java 开发中 IntelliJ IDEA 的高级特性 在 Java 开发领域,选择一款强大且高效的集成开发环境(IDE)至关重要。IntelliJ IDEA 作为一款备受开发者青睐的 Java IDE,不仅提供了基础的开发功能,还具备众多高级特性。本文章的目的在于深入探索 IntelliJ IDEA 的高级特性,详细介绍其原理、使用方法以及在实际项目中的应用。范围涵盖了代码分析、调试优化、版本控制集成等多个方面的高级特性,旨在帮助开发者充分挖掘 IntelliJ IDEA 的潜力,提高开发效率和代码质量。 阅读详情

相关推荐

高级特性:如何使用MyBatis的高级特性

1.背景介绍 MyBatis是一款流行的Java持久层框架,它可以简化数据库操作,提高开发效率。MyBatis的高级特性可以帮助开发者更好地处理复杂的数据库操作。在本文中,我们将讨论MyBatis的高级特性,以及如何使用它们来提高开发效率。 1.背景介绍 MyBatis是一款基于Java的持久层

AI天才研究院 730

Java知识大全 - 一 、Java简介

Java是1990年代中期由Sun Microsystems的James Gosling开发的,后来被Oracle Corporation收购。Java的最初目标是创建一种可以在各种平台上运行的语言,而无需特定于平台的代码。Java的第一个版本称为“ Oak”,于1995年发行,但后来更名为“ Java”。Java的主要创新是其能够将代码编译为无独立的字节码的能力,该代码可以在安装Java虚拟机(JVM)的任何平台上执行。这使得可以编写一个可以在多个平台上运行的单个程序,而无需为每个平台重写或重新编译。

LegendaryChen的博客 1150

Java高级特性核心源代码实战手册

本文还有配套的精品资源,点击获取 简介:Java2核心技术第七版卷2是Java开发者的必备资料,详细解析了Java平台的高级特性,包括多线程编程、网络编程、I/O流、集合框架、反射、泛型、注解、异常处理、模块系统和并发编程工具。随书附带的源代码让读者可以将理论与实践相结合,深入学习并提升编程能力。本资源覆盖了从Java5到Java9的最新特性,对于Java程序员的成长和技能...

weixin_35756637的博客 1631

Java高级

Java高级在我看来就是认识,了解,掌握并熟练使用Java中各种常用的类。

m0_46834439的博客 309

摄像头模组选型避坑指南:如何根据Sensor和Lens参数匹配最佳组合

本文深入解析摄像头模组选型中Sensor与Lens的核心参数匹配要点。重点阐述了主光线角(CRA)匹配对边缘画质的关键影响,并提供了传感器尺寸、像素尺寸、焦距、光圈等参数的协同选型策略与实战避坑指南,帮助工程师在手机、安防、车载等不同应用场景下实现性能与成本的最佳平衡。

ee345的博客 617

保姆级教学,教你在vscode和cursor上调试matlab!!!

保姆级教你如何在vscode或者cursor上面调试matlab

yang_upup的博客 2083

Java高级看这篇就足够了(高级知识汇总)

第 1 章封装性 1.1封装性介绍 编程语言中,封装有2层意思: 1.将重复的代码提取到一个公共的方法中,从而提升代码的复用性、可维护性 2.如果成员变量未加封装密封,可以在类的外部被肆无忌惮的修改 封装性是指,将对象的属性和行为进行密封,保护数据并隐蔽具体的细节,在类的外部不可直接访问,要想访问需要通过严格的接口控制。 封装性的目的:采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易直接操纵该数据结构, 封装的原则就是要求在类的外部,不能随意存取对象的内部数据(成员属性和成员方法).从而

SYJ的博客 2万+

对冲策略与马丁结合ea的编程实践(五)核心是把两个品种合成一个新品种

在外汇、数字货币、期货交易甚至赌博中,马丁策略、网格策略是最常用的策略,也是最容易被理解的策略,但是如何克服单边行情、极端行情,是使用马丁策略最为头疼的事情,如加大间距、加大资金量,只能缓解,并不能根本解决这样的情况,所以使用时大部分时候都心里没底。 有没有一种正确的思路,让行情控制在震荡范围以内呢,这是今天我要向大家分享的一个思路,那就是对冲。大家看下图: 大家可以看到欧美(EURUSD)和镑美(GBPUSD),这两个品种,大部分时候走势是一致的,那么我们有没有可能把他们两个品种进行一下合成,比如买0.

omidsky的博客 3738

Java概述

文章目录java概述-整理语言概述软件开发介绍概念人机交互方式计算机编程语言介绍Java语言概述概述发展历史Java的诞生-略主要特性Java程序运行机制及运行过程Java语言的特点Java两种核心机制Java语言的环境搭建什么是JDK,JRE配置环境变量-略其他开发体验-略注释Java API的文档-略良好的变成风格-略常用的Java开发工具-略 java概述-整理 语言概述 软件开发介绍 概念 软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。 人机交互方式 图形化界面

weixin_45609749的博客 1454

SAP CO模块实战:成本中心会计分割结构配置全流程(OKES事务码详解)

本文详细解析了SAP CO模块中成本中心会计分割结构的配置全流程,重点讲解了OKES事务码的实战操作。内容涵盖分割结构的概念理解、配置前的次级成本要素与作业类型主数据准备,并通过步骤拆解演示了如何定义分割结构、规则与版本,以及如何将配置关联到成本中心并执行分割。最后提供了常见问题排查与优化建议,旨在帮助顾问及财务人员掌握成本精确分摊的关键配置,确保期末成本核算的准确性。

embedding5hiker的博客 804

Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰)

导语 "慢品人间烟火色 闲观人间岁月长" ———致自己​​​ ​ ???? 遇见我以后,我们的故事就开始了,愿你历经山河,仍觉得人间值得????。 ​ 星光月夜烟花皆归你,我也归你。关于烟花????大家都​知道多少?有多少表白故事情节都发生在烟 花下,想必木木子????不用说大家也知道叭~​​ 今天这则小短文就是关于烟花的故事!你准备好跟我一起进入烟花的世界了嘛? ​正文 “每一句文案,都有一个故事,你仔细听” ​ 1)环境安装???? 准备好:.

顾木子吖的博客 5万+

Java高级教程概念整理(一)

Java概念自我总结 1.类 拥有属性和方法   2.构造器 对象是构造的,不调用构造器,就不能创建一个新对象。构造器是一段无论何时使用new关键字都要运行的代码。 一个类可以声明一个或者多个构造器。 如果程序员在声明类时没有声明构造器,Java编译器将自动生成默认的构造器。默认构器没有参数,并且构造器代码为空。 在声明类时显式声明了带有参数的构造器,编译器不再提供没有参数的默认构...

zzZhouJG的博客 255

STM32—时钟树(结合系统时钟函数理解)

时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处。心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来驱动,而这个脉冲的始源往往是由外部晶体振荡器提供时钟输入,最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径犹如大树的养分由主干流向个分支,因此称为时钟树。 STM32时钟: 在STM32...

肥宅快乐博客 1万+

Java高级特性

本文详细介绍了Java的高级特性,包括反射机制、注解与注释、泛型编程、以及Lambda表达式与Stream API。通过示例代码和表格总结,帮助读者更好地理解和应用Java的这些高级特性,提高代码的灵活性、可扩展性和性能。

weidl001的博客 1805

RK3568平台(KBuild篇)KBuild编译体系

从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。

weixin_49303682的博客 348

多径衰落信道的 MATLAB 仿真

在无线通信系统中,信号在传输过程中会经历多径传播现象,导致信号在接收端出现时域和频域上的扩展。通过以上示例代码,我们可以进行多径衰落信道的 MATLAB 仿真。同时,我们还可以通过调整信道参数和信号特性,进一步研究多径衰落对系统性能的影响。常用的模型之一是瑞利衰落信道模型,它假设信号在传输过程中受到多个散射路径的影响。除了瑞利衰落信道模型,我们还可以使用其他类型的信道模型,如高斯衰落信道模型。在上述代码中,我们首先定义了信道的参数,包括最大多普勒频移、多径延迟和多径功率衰落。函数来模拟高斯衰落信道。

TechCraze的博客 665

Java的高级特性

了解Java的高级特性,例如lambda表达式,流streams,方法引用,注解,反射Reflection,泛型Generics,异常处理,枚举enumerations,内部类,自动装箱与拆箱

WZX17307935391的博客 2899

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java高级特性-难点汇总

Java 数据结构(Java 2之前)(高级) Java工具包提供了强大的数据结构,主要是以下几种: 枚举(Enumeration)位集合(BitSet)向量(Vector)栈(Stack)字典(Dictionary)哈希表(Hashtable)属性(Properties) 向量(Vector)向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。 栈(St

田永威的专栏 1604

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

编程语言Java——核心技术篇(二)类的高级特性

本文深入探讨了Java类的高级特性,包括包管理、final关键字、内部类和抽象类等核心概念。在包管理方面,详细解析了包的声明使用、文件系统映射及高级特性;final关键字部分全面阐述了其对类、方法和变量的修饰作用及并发编程应用;内部类章节深入剖析了成员内部类、静态内部类等实现原理及典型应用场景;最后系统讲解了抽象类的定义、特性及与接口的区别。这些特性共同构成了Java强大的面向对象编程能力,体现了代码封装、复用和扩展的核心思想,是提升Java编程水平必须掌握的关键技术。文章通过理论讲解与代码示例相结合的方式

言不信者行不果,行不敏者言多滞. 1659

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java高级特性之Instrumentation

不要说精通Java、Spring,能掌握70%就很不错了,其他的高级特性。。。 我们平常开发java程序时,总想开发一个代理程序监视记录类的运行情况,比如性能监控或运维人员很需要,比如调用业务方法时记录日志、计时等,除了AOP实现之外,还有一种实现,那就是基于java高级特性Instrumentation功能, 比如很多开源或商业公司也是基于此玩法,用开源的技术赚钱是我们一生的梦想!!!!!!!!! Instrumentation简介 利用java.lang.instrument(容器类.

董广明的博客 2121

学习Java的高级特性

学习Java的高级特性是成为一名优秀的Java开发者的必备知识。在本文中,我们将深入探讨泛型、注解、反射和Lambda表达式这些高级特性,并提供相应的Java代码示例。

hitpter的专栏 743

Java高级特性——反射

Java 反射最佳实践http://blog.youkuaiyun.com/qq_35101189/article/details/54980879?ref=myread

mys328的专栏 567

Java高级特性解析

这些底层优化与语言层面的高级特性相结合,使得Java应用能够在保持开发效率的同时,获得卓越的运行性能。例如,使用stream().map().filter().collect()链式调用,可以替代繁琐的循环和条件判断,不仅减少代码量,还提高了可读性。此外,方法引用、函数式接口等配套特性,进一步丰富了函数式编程的表达能力,让Java在处理现代数据密集型应用时更加得心应手。通过module-info.java配置文件,开发者可以明确定义模块的依赖关系和暴露API,实现了更严格的封装和更强的可靠性。

qq_20243891的博客 887

Java集合框架高级特性、并发编程深入与高级特性概览

通过完成第七天的目标,你将能够更深入地掌握Java集合框架的高级特性、并发编程的深入知识,并对Java的一些高级特性或框架有初步的了解。这将进一步提升你的Java编程能力和对Java生态系统的认识。记得在学习过程中多做实践,通过编写代码来加深理解。

独立开发者 606
上一篇: Java Spring事务管理与@Transactional注解式事务详解
下一篇: getDeclaredFields() 用法说明
Java_2017_csdn
博客等级 码龄10年 329粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值