Java基础学习13--注解和反射
一、注解Annotation
1、注解概述
注释+解释:不是程序本身,而是对其做出解释,并能被其它程序读取。
格式:@注释名(参数)
定义注解的关键字:@interface
2、常见的内置注解:
@Override重写覆盖方法
@Desperated已过时的,不推荐程序员使用的(但是使用也不会错)
@SuppressWarnings()镇压警告,用来抑制编译时的警告信息(不建议使用)
3、元注解
用来解释注解的注解,Java定义了四个标准的元注解:
@Target 描述注解的使用范围,即描述该注解可以在哪些地方(字段/类/方法...)使用
@Retention (建议定义为RUNTIME)描述需要在什么级别保存该注视信息(source<class<runtime),描述注解的生命周期
@Documented 描述是否将我们的注解生成在JAVAdoc中
@Inherited 表示子类可以继承父类的注解
4、自定义注解@interface(注意和接口interface的区别)
定义注解的参数:参数类型+参数名();
注意:
- 参数名一定要加括号();
- 如果定义的注解有参数,则使用该注解时必须要加参数,否则会报错(除非该参数定义了默认值);
- 如果只有一个参数,一般定义参数名为value
二、反射机制Reflection
1、反射概述
反射使Java语言从静态变为了动态语言(在运行的时候可以动态改变自身结构,如javascript)。
反射机制能实现程序在运行时获取任意类的内部信息,并能直接操作任意对象的内部属性和方法。
主要API:
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器
一个类在内存中只有一个class对象,一个类被加载后,类的整个结构都会被封装在class对象中。
2、Class类
- 在Object类中定义了getClass方法,此方法将被所有的子类继承。
- 这个方法返回值的类型是一个Class类,这个类是Java反射的源头。
- 实际上所谓的反射:从程序的运行结果来看,就是可以通过对象反射求出类的名称
3、 Class类的常用方法
4、Class类特点
- Class本身是一个类。
- Class对象只能由系统建立对象。
- 一个加载的类在JVM中只会有一个Class实例。
- 一个Class对象对应的是一个加载到JVM中的一个.class文件。
- 每个类的实例都会记得自己是由哪个Class实例所生成。
- 通过Class可以完整地得到一个类中的所有被加载的结构。
- Class类是Reflection的根源,针对任何你想动态加载、运行的类、唯有鲜活的相应的Class对象。
5、获取Class类的几种方式
- 若已知具体的类,可以通过类的class属性获取,该方法最为安全可靠,程序性能最高。
Class clazz = Person.class;
- 若已知某个类的实例,调用该实例的getClass方法获取Class对象。
Class clazz = person.getClass();
- 若一致一个类的全限定类名,且该类的类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException异常。
Class clazz = Class.forName("com.demo.entity.User");
- 内置基本数据类型可以直接用类名.Type获得。
- 还可以利用ClassLoader获得。
6、有了Class对象,我们可以做什么
- 创建类的对象:调用Class对象的newlnstance()方法。
- 类必须有一个无参的构造器。
- 类的构造器的访问权限需要足够。
- 没有无参构造器,是否可以创建对象?可以
- 通过CLass类的getDeclaredConstructor(Class…parameter)取得本类的指定形参类型的构造器。
- 向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数。
- 通过Constructor实例化对象。
Java基础学习13--注解和反射相关推荐
- java基础知识之注解、反射(一)
前言 此博客为供个人学习总结备用,如有错误请指正. 正文 Annotation(注解) java自带的注解包含以下三个: 1.@Override 注解表示重写父类的方法 2.@Deprecated 声 ...
- Java基础学习——第十章 枚举类注解
Java基础学习--第十章 枚举类&注解 一.枚举类(enum) 1. 枚举类的概念 枚举类:类的对象只有有限个,确定的 线程状态:创建.就绪.运行.阻塞.死亡 当需要定义一组常量时,强烈建议 ...
- Java教程,Java基础教程,2020年全新Java基础学习教程
时代在变化,Java的知识也在不断的变化,今天分享一下2020年Java全新的基础教程,想学习Java的小伙伴,看这个!全新哦,涵盖了2019年新增知识,并且视频完全源于课堂实录哦! 本套JAVA课程 ...
- Java基础回归之注解Annotation【低仿ButterKnife实战篇】
前言 书接上回,上回说到库里对战湖人三分10投0中,真真气煞我库也,这下把气全撒在鹈鹕身上,一口气轰下破纪录的13记三分. 上回说到Java基础回归之注解Annotation[基础篇],这回我们来真刀 ...
- java基础学习-4
Java基础学习-4 static 注意事项 重新认识main方法 继承 小练习 子类到底能继承父类中的哪些内容(第126集)*** 继承过程中成员变量和成员方法的访问特点 小练习 小总结 构造方法的 ...
- 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- Java基础学习:尚硅谷项目三 开发团队调度软件
Java基础学习:尚硅谷项目三 开发团队调度软件 一.软件功能与结构设计 1. 软件功能 该软件实现以下功能: 软件启动时,根据给定的数据创建公司部分成员列表(数组) 根据菜单提示,基于现有的公司成员 ...
- 尚学堂JAVA基础学习笔记_2/2
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
最新文章
- 随机蕨(Random Fern)
- python学习 day2 (3月2日)
- JVM的监控工具之jinfo
- 线程安全面试题 java_Java面试题-线程安全
- centos7python命令_详解Linux Centos7下安装Python的方法
- 安装DNN时,数据库连接字符串的设置
- Umi 4 RC 发布
- 论文浅尝 - ICLR2020 | 知道什么、如何以及为什么:基于方面的情感分析的近乎完整的解决方案...
- 增值税发票的种类_以及税率---财务知识工作笔记001
- 序列最小最优化算法(SMO) SVM凸优化求
- Linux Kernel中irq handler, softirq handler 和 tasklet
- 三维点云处理技术二:三维点云表征概述
- 【2022年终总结】将哈佛大学Reich数据包中的352例SGDP样本进行Admixture分析的结果
- html5倒计时秒杀怎么做,如何让秒杀、活动倒计时更精确?
- ThinkPHP门面源码解析
- 原来在朋友眼里,我是一个闪闪发光的人
- C/C++实现简单打飞机小游戏【初版】
- java实现手机验证码功能
- 【20180128】【matlab】均值、标准差、方差、协方差、中值的求解
- 计算机基础1模拟题,计算机基础模拟题1(有答案)