对注解概念不了解的可以先看这个:Java注解基础概念总结 前面有提到注解按生命周期来划分可分为3类: 1.RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃: 2.RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期: 3.RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在: 这3个生…
这篇文章 2016年12月13日星期二 就写完了,当时想着等写完另外一篇关于自定义注解的一起发.结果没想到这一等就是半年多 - -. 有时候的确是这样啊,总想着等条件更好了再干,等准备完全了再开始,结果好多想法.好多事情都不了了之. 读完本文你将了解: 什么是注解 Java 内置的注解 个用于通知编译器信息的注解 个用于修饰注解的注解 自定义一个注解 注解的作用 注解的用法 运行时注解 总结 Thanks 什么是注解 注解是一种元数据(描述数据的数据) 描述作用,不会直接生效,需要在编译前/运行…
Android的注解有编译时注解和运行时注解,本文就介绍下运行时注解. 其实非常简单,直接上代码:本文主要是替代传统的findViewById()的功能,就是在我们Activity中不需要再使用findViewById()去给View赋值了,通过注解在运行阶段自动赋值.以及setOnClickListener()也是一样的原理.使用注解和反射技术. 1. 定义自己的annotation注解. 定义findViewbyId这个功能的注解 package com.xxx.xxx.xxx; impor…
运行时库(runtime library) https://blog.csdn.net/xitie8523/article/details/82712105 没学过这些东西 或者当时上课没听 又或者 世一大的老师没好好讲 只顾着开公司赚钱了. 2018年09月15日 11:34:33 xisuesuexi 阅读数 593   一切从   默认库“LIBCMTD”与其他库的使用冲突,请使用 /NODEFAULTLIB:library. error LNK2005: XXX已经在 libcmtd.l…
一:Error和Exception的基本概念: 首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型. Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类,Exception和Error体现了JAVA这门语言对于异常处理的两种方式. Exception 是程序正常运行过程中可以预料到的意外情况,并且应该被开发者捕获,…
预备知识: Java注解基础 Java反射原理 Java动态代理 一.布局文件的注解 我们在Android开发的时候,总是会写到setContentView方法,为了避免每次都写重复的代码,我们需要使用注解来代替我们做这个事情,只需要在类Activity上声明一个ContentView注解和对应的布局文件就可以了. @ContentView(R.layout.activity_main) public class MainActivity extends AppCompatActivity {…
本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>)  https://www.cnblogs.com/KSongKing/p/10348190.html   . ILBC 运行时       架构图    如下: 为了便于讲解,   图中 一些位置 标注了 红色数字 . ILBC 运行时  包含  3 个 部分:   调度程序 . InnerC(Byte Code to Nat…
项目的权限分配,采用的是RBAC的设计模式.后台配置权限的时候,需要获取到所有的权限因子. 不经让我想起YII框架的SRBAC模块,还有以前的一个ecshop改造系统的权限配置方式,都采用的是PHP的反射机制. 于是把PHP项目的经验带到JAVA项目中,发现PHP中的经验在java中,实现起来不是那么的方便. 这主要的原因:一是语言上的特性导致权限控制方面的差异性. 二是项目使用的是SSH框架,action的名称已经使用注解替换了原有名称.使用反射获取到的类名和方法名组合,不是有效的权限因子(当…
这篇文章是学习鸿洋前辈的 Android 如何编写基于编译时注解的项目 的笔记,用于记录我的学习收获. 读完本文你将了解: 什么是编译时注解 APT 编译时注解如何使用与编写 举个例子 思路 创建注解 创建运行时绑定的类 创建注解处理器 完成编写使用一下 遇到的坑 代码地址 总结 Thanks 什么是编译时注解 上篇文章 什么是注解以及运行时注解的使用 中我们介绍了注解的几种使用场景,这里回顾一下: 编译前提示信息:注解可以被编译器用来发现错误,或者清除不必要的警告: 编译时生成代码:一些处理器…
ButterKnife在之前的Android开发中还是比较热门的工具,帮助Android开发者减少代码编写,而且看起来更加的舒适,于是简单实现一下ButterKnife,相信把下面的代码都搞懂,看ButterKnife的难度就小很多. 今天实现的是编译时注解,其实运行时注解也一样能实现ButterKnife的效果,但是相对于编译时注解,运行时注解会更耗性能一些,主要是由于运行时注解大量使用反射. 一.创建java library(lib_annotations) 我这里创建3个annotatio…
如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接…
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43452969 ,本文出自:[张鸿洋的博客] 1.概述 记得很久以前,写过几篇博客,容我列举一下: Android 进阶 教你打造 Android 中的 IOC 框架 [ViewInject] (上) Android 进阶 教你打造 Android 中的 IOC 框架 [ViewInject] (下) Android 框架炼成 教你如何写组件间通信框架EventBus 大家可以关…
lombok-ex lombok-ex 是一款类似于 lombok 的编译时注解框架. 编译时注,拥有运行时注解的便利性,和无任何损失的性能. 主要补充一些 lombok 没有实现,且自己会用到的常见工具. 创作目的 补充 lombok 缺失的注解,便于日常开发使用. lombok 的源码基本不可读,应该是加密处理了. 为其他注解相关框架提升性能提供基础,后期考虑替换为编译时注解. 特性 @Serial 支持 (1)类实现序列化接口 (2)类生成 serialVersionUID 字段,字段的值…
Java 虚拟机定义了在程序执行期间使用的各种运行时数据区域. 其中一些数据区域所有线程共享,在 Java 虚拟机(JVM)启动时创建,仅在 Java 虚拟机退出时销毁. 还有一些数据区域是每个线程的.线程数据区域是在线程启动时创建,线程结束时销毁. 一.运行时数据区划分(JDK8) 1.The pc Register(PC 寄存器.程序计数器) 2.Java Virtual Machine Stacks(Java 虚拟机栈.Java 栈) 3.Native Method Stacks(本地方法…
该文章是继Java注解解析-基础+运行时注解(RUNTIME)之后,使用注解处理器处理CLASS注解的文章.通过完整的Demo例子介绍整个注解处理器的搭建流程以及注意事项,你将知道如何去搭建自己的注解处理器.前提是你知道如何去写自定义注解,不清楚的可以点击我上面的链接哦- 介绍 顾名思义注解处理器就是javac包中专门用来处理注解的工具.所有的注解处理器都必须继承抽象类AbstractProcessor然后重写它的几个方法.注解处理器是运行在它自己的JVM中.javac启动一个完整Java虚拟机…
目录 一.获得类的运行时结构 1. 获得类的名字 2. 获得类的属性 获取属性列表 获取指定属性 3. 获取类的方法 获得类的方法列表 获得指定方法 4. 获得的构造器 获得构造器列表 获得指定构造器 二.通过反射动态创建对象 1. 使用newInstance() 2.先获取构造器再创建对象 三.通过反射调用对象的方法 四.通过反射操作对象的属性 五.通过反射获取泛型信息 1. 获取方法参数类型 2. 获取方法带泛型的参数类型 3. 从参数类型(ParameterizedType)中获取泛型信息…
一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-changes.html,其中当然包含Runtime Permissions. ok,本篇文章目的之一就是对运行时权限处理的一个介绍,以及对目前权限相关的库…
文章参考:https://www.cnblogs.com/xuningchuanblogs/p/7763225.html https://www.cnblogs.com/xdp-gacl/p/3622275.html 学习网站:how2java.cn 1.注解是什么 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释. 注解…
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/50709663: 本文出自:[张鸿洋的博客] 一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android…
需求: 1.表:用户ID,用户名,年龄,邮箱. 2.实现方法,传入实体,打印sql. 实现: 1.表: package Annotation; @Table("user") public class User { @Column("id") public int UserId; @Column("user_name") public String Username; @Column("age") public int Age;…
按运行机制分 源码注解 只在源码中存在 编译时注解 在class中依然存在,如@Deprecated 运行时注解 运行阶段起作用,如@Autowired 按来源分 JDK自带注解 三方注解 最常见 自定义注解 元注解 注解的注解…
一.Runtime Permissions Android 6.0在手机安全方面做的一个处理就是增加了运行时权限(Runtime Permissions). 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,正常权限(Normal Permissions)和危险权限(Dangerous Permissions).这些概念都比较好理解,Normal Permissions 主要就是一些不涉及用户隐私的权限,比如wifi,网络,这些权限和6.0之前的权限添加方式一样,只需要在Andro…
objC语言不仅仅有着面向对象的特点(封装,继承和多态),也拥有类似脚本语言的灵活(运行时),这让objC有着很多奇特的功能-可在运行时添加给类或对象添加方法,甚至可以添加类方法,甚至可以动态创建类... [TOC] 运行时 runtime,即运行时,这里不详述其概念,我们可以类比java和javascript语言,它们也都有运行时环境.java运行时是和编译阶段相独立的过程,可以理解java字节码在虚拟机中解释执行的阶段的由虚拟机提供的相关引用(gc,存储等)的环境:而js运行时则更为特殊,由…
最近在读<深入理解Java虚拟机>,收获颇丰,记录一下,部分内容摘自原书. Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示: 其中程序计数器.VM栈.native栈为线程隔离的,堆(Heap)和方法区(Method Aera,or Non-Heap)为线程共享的…
Objective-C 2.0 的运行时环境叫做Morden Runtime,iOS 和Mac OS X 64-bit 的程序都运行在这个环境,也就是说Mac OS X 32-bit 的程序运行在旧的Objective-C 1.0 的运行时环境LegacyRuntime,这里我们只讲解Morden Runtime.  同运行时交互主要在三个不同的地方,分别是A.Objective-C 源码(譬如:你定义的Category中的新方法会在运行时自动添加到原始类).B.NSObject 的方法(isM…
这里总结下他们的区别,后面的那个'd'是代表DEBUG版本,没有'd'的就是RELEASE版本了. 首先说/MT /MT是 "multithread, static version ” 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号. /MD是 "multithread- and DLL-specific version” ,意思是多线程DLL版本,定义了它后,编译器把 MSVCRT.lib 安置到O…
对于java程序员来说,并不必显示地对内存进行管理,一切都交给java虚拟机去做吧,而且,你也不一定做得比java虚拟机来得专业.好像所有内存管理都交给虚拟机去做就万事大吉了,但是,事实有时并非如此,可能有时你会遇到一些让你困惑的问题,如OutOfMemoryError异常,如stackOverflowError,你开始大呼,虚拟机不是都为我们管理好内存了吗?怎么还会出现这样的Error,其实当你真正去了解java虚拟机内存区域的分布的时候,你就会不自觉的大呼:原来java虚拟机也不是万能. 这…
(本篇文章翻译自JVM Run-Time Data Areas) 这是我阅读JVM规范的笔记,而且我画了一个图来帮助我理解. 1.每一个单独的线程(非共享的)的数据区 针对每一个单独的线程的数据区包括程序计数器.JVM栈.和本地方法栈,当一个新的线程被创建的时候他们都会被创建. (程序计数器)Program Counter Register:用于控制每个线程的运行 (JVM栈)JVM Stack:它包含下面图中画的帧. (本地方法栈)Native Method Stack:它用于支持本地方法,比…
Java虚拟机管理的内存包括如图所示的运行时数据区域: 下面分别进行介绍: 1)程序计数器(Program Counter Register) 占用的内存空间比较小,主要作用就是标识当前线程执行的字节码的行号.字节码解释器的工作就是通过不断改变计数器的值来获取下一条要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等功能都需要依赖程序计数器. 程序计数器在每个线程中都是独立互不影响的,因为Java虚拟机多线程的实现是通过轮流切换并分配时间给每个线程来完成的.每个处理器在一个确定的时刻只会执…
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本. 70. 对可恢复条件使用已检查异常,对编程错误使用运行时异常 Java提供了三种可抛出异常对象:已检查异常( checked exceptions).运行时异常(runtime exceptions)和虚拟机错误(errors).程序员们对什么时候使用每种…