java高级特性概要

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    属性集合
————————————————
版权声明:本文为CSDN博主「songsongL」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/songsongL/article/details/104450300/

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值