黑马程序员---Java基础加强---JDK1.5新特性:注解

-------  android培训 java培训 、期待与您交流! ----------

JDK1.5新特性:注解

一、了解和入门注解的应用

注解相当于是一个特殊的类

1.注解的种类
@SupressWarnings:压缩警告,,默认在源文件阶段

@Deprecated:表示方法为过时或者作废,但是仍可以用,只是再用的时候尽量不要用此方法。此注解默认在运行阶段。

@Override:表示此方法是复写的父类的方法。此注解默认在源文件阶段。

2.注解相当于一种标记

在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其

他的程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记就去干相应的事。

3.标记可以加在包,类,字段(成员变量),方法,方法的参数以及局部变量上。

4.总结:注解即是向编译器、开发工具或者其他的程序传达一种信息。


二、注解的定义与反射调用

注解是JDK1.5的新特性。

1.需求:

写一个注解类,并将此注解类应用于一个类上,并在别的类通过反射来获取此类上的注解类名称。

分析:要想得到某一个类的注解,

第一:首先通过反射看此类上面是否有此注解,此类字节码.isAnnotationPresent(此类字节码)

第二:通过反射来获取此注解对象,此类自己码.getAnnotation(此类字节码)

第三:由于你只是获取了注解对象,但是并不知道是什么类型的注解,所以前面要有类型转换。

程序如下:

@ItcastAnnocation
public class AnnotationTest 
{
	public static void main(String[] args)throws Exception 
	{
		// TODO Auto-generated method stub
		//判断这样的一个类中是否存在注解ItcastAnnocation
		if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class))
			ItcastAnnotation annotation=(ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
		System.out.println(annotation);
	}
}

import java.lang.annotation.RetentionPolicy;
@Target(ElementType.TYPE)//表示此注解只可以用于类
@Retention(RetentionPolicy.RUNTIME)//表示此注解保留在运行阶段
public @interface ItcastAnnotation 
{
}

2.元注解

定义:注解的注解即为元注解。

上面的程序中的@Target(ElementType.TYPE)和@Retention(RetentionPolicy.RUNTIME),

这是两种元注解元注解@Retention(取值),表示注解可以保留在什么阶段,

取值是一个枚举类型取值可以有

RetentionPolicy.RUNTIME、

RetentionPolicy.CLASS、

RetentionPolicy.SOURCE  

分别对应于:

运行阶段,

类文件阶段,

还有源程序阶段。

即表示,注解的存在有三个阶段:源文件阶段->类文件阶段->运行阶段,

默认的阶段是在源文件阶段。即一编译完成,其注解就不在文件中显示了,即类文件中没有相关的信息。

而类文件阶段表示,编译完成之后,注解还在,在类文件中有相关信息;

而运行阶段,即表示注解存在于类的二进制的字节码中。

元注解:@Target(取值),表示注解可以使用的范围,他的取值也是一个枚举类型取值可以为:

ElementType.PACKAGE,

ElementType.TYPE,

ElementType.METHOD,

ElementType.FIELD,

ElementType.CONSTRUCTOR,

ElementType.LOCAL VARIABLE,

ElementType.PARAMETER

对应于:注解可以用于包、类或者接口、方法、成员变量、构造函数、局部变量、参数上;

若是即用于的是类又可以用于方法中,则写成@Target({ElementType.TYPE,ElementType.METHOD})即里面的值

是数组的形式,当只有一个值时可以不用写{},若是两个以上,则必须写{}。

3.为注解增加各种属性

(1)属性的返回值可以是:8种基本数据类型(byte,short,char,int,long,boolean,float,double),String,数组

Class,注解型,枚举型。

(2)给注解的属性值进行设值有两种方式:

第一,在创建注解对象的时候设置值,即@ItcastAnnotation(属性名="abc")

第二,在注解类中定义属性时直接给出默认值,即String value()default "abc";

注意,虽然在定义注解类的属性时,已经给出了此属性的值,但可以通过创建对象来重新设置值,也可以不用再设置值。
(3)注解类中特殊的属性

当属性名是value且只有这一个属性时,则在对象上设置值时,可以不用写此属性名和等号,直接写值如:注解类中

的属性定义为String value()default "abc";而对象上可以写成@ItcastAnnotation("abc")

4、注解类的属性的使用和设置值

对于注解类的属性在进行设置值时,以属性的形式设置值,即:属性名=值  的形式,而对取出此属性的值时(即使

用此属性时),依然用调用的形式,即:注解类对象.value();

例子:

import java.util.*;
@ItcastAnnocation(value="bcd",getAge=9,enumAnnotationArray=EnumTest.TUS)
//由于属性getAge还没赋值,所以对于value赋值时必须写上value=
//由于属性enumAnnotationArray的取值是一个,所以可以不用写{},两个以上就必须写上{}
class AnnotationApply                  
{
}
//此类功能为操作运用了注解的类。									 
class AnnotationTest1 
{
	public static void main(String[] args) throws Exception
	{
		//运用翻书看类中是否运用了注解并且取出此注解中属性的值
		if (AnnotationApply.class.isAnnotationPresent(ItcastAnnocation.class))
		{
			//如果有此注解,则获取此注解
			ItcastAnnocation annotation=(ItcastAnnocation)AnnotationApply.class.getAnnotation(ItcastAnnocation.class);
			//System.out.println(annotation);
			//对此注解对象进行操作,要获取它的各个属性值
			System.out.println(annotation.value());
			System.out.println(annotation.getAge());
			//将数组转化为字符串打印出来
			System.out.println(Arrays.toString(annotation.arr()));
			System.out.println(annotation.classAnnotation().getName());
			//System.out.println(annotation.enumAnnotation().toString());
			//将数组转化为集合打印出来
			//System.out.println(Arrays.asList(annotation.enumAnnotationArray()));
			System.out.println(annotation.aannotation().value());
		}
	}
}
//定义一个枚举类
enum EnumTest
{
	SUN,MON,TUS,WEN,THUD,FRI,SAT;
	public String toString(){
		return "SUN";
		
	}
} 
//定义一个注解
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)//使此注解保持到运行阶段
public @interface ItcastAnnocation
{
	//给此属性设置属性
	//1、属性的返回值是String
	String value()default "abc";
	//返回值类型为int型
	int getAge();
	//返回值类型为数组型
	int[] arr() default {1,2,3};
	//返回值类型为Class类型
	Class classAnnotation() default String.class;
	//返回值类型为枚举型
	EnumTest enumAnnotation() default EnumTest.SUN;
	//或者是返回值类型为枚举型的数组
	EnumTest[] enumAnnotationArray() default {EnumTest.SUN,EnumTest.MON};
	//返回值类型为注解型
	AnnoAnnotation aannotation() default @AnnoAnnotation("abc");
}

//定义一个注解
public @interface AnnoAnnotation
{
	String value();
}



深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 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、付费专栏及课程。

余额充值