首页编程java编程java注解什么时候执行 Java编译时注解和运行时注解有什么区别

java注解什么时候执行 Java编译时注解和运行时注解有什么区别

编程之家2023-10-11108次浏览

大家好,java注解什么时候执行相信很多的网友都不是很明白,包括Java编译时注解和运行时注解有什么区别也是一样,不过没有关系,接下来就来为大家分享关于java注解什么时候执行和Java编译时注解和运行时注解有什么区别的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

java注解什么时候执行 Java编译时注解和运行时注解有什么区别

java 如何设定时间执行程序

用Timer可以实现~~

Timer的schedule方法可以指定第一次运行的时刻,和重复间隔

具体可以参考API

java注解什么时候执行 Java编译时注解和运行时注解有什么区别

timer.schedule(task, firstTime, period)

指定firstTime为21:00:00,period为一天的毫秒数24*3600*1000就成了。。

或者可以自己写个线程,放个while循环,每分钟检查一次,如果到时间了就执行任务,如果没到就sleep一分钟。。当然,这种方法比较土。。

java注解什么时候执行 Java编译时注解和运行时注解有什么区别

更复杂点的可以借助现有的包,比如quartz,有兴趣可以研究下~~

java注解是怎么实现的

java注解大致分为2类

运行时注解

编译期注解

运行时注解,主要通过反射获取注解信息,在执行你想执行的代码

编译期注解,在编译的时候,就已经处理过,运行的时候不会在处理,编译期注解实现需要实现系统的注解处理器。就是说在java代码编译的时候,生成一个新的类。

Java 什么是注解及注解原理详细介绍

1、注解是针对Java编译器的说明。

可以给Java包、类型(类、接口、枚举)、构造器、方法、域、参数和局部变量进行注解。Java编译器可以根据指令来解释注解和放弃注解,或者将注解放到编译后的生成的class文件中,运行时可用。

2、注解和注解类型

注解类型是一种特殊的接口类型,注解是注解注解类型的一个实例。

注解类型也有名称和成员,注解中包含的信息采用键值对形式,可以有0个或多个。

3、Java中定义的一些注解:

@Override告诉编译器这个方法要覆盖一个超类方法,防止程序员覆盖出错。

@Deprecated这个标识方法或类(接口等类型)过期,警告用户不建议使用。

@SafeVarargs JDK7新增,避免可变参数在使用泛型化时候警告”执行时期无法具体确认参数类型“,当然,也可以用@SuppressWarnings来避免检查,显然后者的抑制的范围更大。

@SuppressWarnings(value={"unchecked"})抑制编译警告,应用于类型、构造器、方法、域、参数以及局部变量。 value是类型数组,有效取值为:

all, to suppress all warnings

boxing, to suppress warnings relative to boxing/unboxing operations

cast, to suppress warnings relative to cast operations

dep-ann, to suppress warnings relative to deprecated annotation

deprecation, to suppress warnings relative to deprecation

fallthrough, to suppress warnings relative to missing breaks in switch statements

finally, to suppress warnings relative to finally block that don't return

hiding, to suppress warnings relative to locals that hide variable

incomplete-switch, to suppress warnings relative to missing entries in a switch statement(enum case)

javadoc, to suppress warnings relative to javadoc warnings

nls, to suppress warnings relative to non-nls string literals

null, to suppress warnings relative to null analysis

rawtypes, to suppress warnings relative to usage of raw types

restriction, to suppress warnings relative to usage of discouraged or forbidden references

serial, to suppress warnings relative to missing serialVersionUID field for a serializable class

static-access, to suppress warnings relative to incorrect static access

static-method, to suppress warnings relative to methods that could be declared as static

super, to suppress warnings relative to overriding a method without super invocations

synthetic-access, to suppress warnings relative to unoptimized access from inner classes

unchecked, to suppress warnings relative to unchecked operations

unqualified-field-access, to suppress warnings relative to field access unqualified

unused, to suppress warnings relative to unused code and dead code

4、注解的定义

使用@interface关键字声明一个注解

public@interface MyAnnotation1

注解中可以定义属性

String name default“defval”;

value是注解中的特殊属性

注解中定义的属性如果名称为 value,此属性在使用时可以省写属性名

例如,声明一个注解:

@Retention(RetentionPolicy.RUNTIME)

public@interface MyAnno1{

String msg();

int value();

}

Java编译时注解和运行时注解有什么区别

重写,重载,泛型,分别是在运行时还是编译时执行的

1.方法重载是在编译时执行的,因为,在编译的时候,如果调用了一个重载的方法,那么编译时必须确定他调用的方法是哪个。如:

当调用evaluate("hello")时候,我们在编译时就可以确定他调用的method#1.

2.

方法的重写是在运行时进行的。这个也常被称为运行时多态的体现。编译器是没有办法知道它调用的到底是那个方法,相反的,只有在jvm执行过程中,才知晓到底是父子类中的哪个方法被调用了当有如下一个接口的时候,我们是无法确定到底是调用父类还是子类的方法

3.

泛型(类型检测),这个发生在编译时。编译器会在编译时对泛型类型进行检测,并吧他重写成实际的对象类型(非泛型代码),这样就可以被JVM执行了。这个过程被称为"类型擦除"。

类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且再必要的时候添加类型检查和类型转换的方法。

类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。类型擦除的主要过程如下:

1).将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。

2).移除所有的类型参数。

在编译后变成:

4.注解。注解即有可能是运行时也有可能是编译时。

如java中的@Override注解就是典型的编译时注解,他会在编译时会检查一些简单的如拼写的错误(与父类方法不相同)等

同样的@Test注解是junit框架的注解,他是一个运行时注解,他可以在运行时动态的配置相关信息如timeout等。

5.异常。异常即有可能是运行时异常,也有可能是编译时异常。

RuntimeException是一个用于指示编译器不需要检查的异常。RuntimeException

是在jvm运行过程中抛出异常的父类。对于运行时异常是不需要再方法中显示的捕获或者处理的。

已检查的异常是被编译器在编译时候已经检查过的异常,这些异常需要在try/catch块中处理的异常。

6. AOP. Aspects能够在编译时,预编译时以及运行时使用。

1).

编译时:当你拥有源码的时候,AOP编译器(AspectJ编译器)能够编译源码并生成编织后的class。这些编织进入的额外功能是在编译时放进去的。

2).预编译时:织入过程有时候也叫二进制织入,它是用来织入到哪些已经存在的class文件或者jar中的。

3).运行时:当被织入的对象已经被加载如jvm中后,可以动态的织入到这些类中一些信息。

7.继承:继承是编译时执行的,它是静态的。这个过程编译后就已经确定

8.代理(delegate):也称动态代理,是在运行时执行。

文章分享结束,java注解什么时候执行和Java编译时注解和运行时注解有什么区别的答案你都知道了吗?欢迎再次光临本站哦!

import在java是什么意思?java里面import java.util.#;是什么用处java中锁是什么意思 JAVA中,线程死锁是什么意思