注解:
Java注解也就是Annotation,是Java里的特殊标记,它为Java程序代码提供了一种形式化的方法,用来表达代码本身无法表示的额外的信息。语法:@Annotation
使用注解语法有以下几点规范:
将注解置于所有修饰符之前。
通常将注解单独放置在一行。
默认情况下,注解可用于修饰任意程序元素,包括类、方法和成员变量等。
根据使用方法和用途,可将注解分为三类:内建注解、元注解和自定义注解。
内建注解:
@Override、@Deprecated以及@SuppressWarnings
@Override注解用来标注方法,表示该方法时重写父类的某方法。
public interface Person {
void Override();
}
public class Student implements Person{
@Override
public void Override() {
}
}
@Deprecated注解标识程序元素已过时,如果程序元素被此注解修饰,编译器将不再鼓励使用这个被标注的程序元素,如果使用,编译器会在程序元素画一条斜线。下面的代码如果没有显示斜线效果,可以手打到程序中试一试。
@Deprecated
public Student(int age, String name) {
this.age = age;
this.name = name;
}
Student stu=new Student(18,"张三");
@SuppressWarnings注解标识阻止编译器警告,被用于有选择地关闭编译器对类、方法和成员变量等程序元素及其子元素的警告。
@SuppressWarnings参数:
deprecation:使用了过时的程序元素。
unchecked:执行了未检查的转换。
unused:有程序元素未被使用。
fallthrough:switch程序块直接通往下一种情况而没有break。
path:在类路径、源文件路径等中有不存在的路径。
serial:在可序列化的类上缺少serialVersionUID定义。
finally:任何finally子句不能正常完成。
all:所有情况。
举个简单的例子,比如在程序中输入 int a = 0 ;鼠标放到a上,会显示未被使用,加此注解之后就不会提示了。
@SuppressWarnings("unused")
int a=0;
元注解:
@Target注解、@Retention注解、@Documented注解、@Inherited注解
@Target注解用于指定被其修饰的注解能用于修饰哪些程序元素,此注解类型有唯一的value作为成员变量。变量是ElementType类型,是可以被标注的程序元素的枚举类型。
ElementType.ANNOTATION_TYPE:注解声明。
ElementType.CONSTRYCTOR:构造方法声明。
ElementType.FIELD:成员变量声明。
ElementType.LOCAL_VARIABLE:局部变量声明。
ElementType.METHOD:方法声明。
ElementType.PACKAGE:包声明。
ElementType.PARAMETER:参数声明。
ElementType.TYPE:类、接口或枚举声明。
@Retention注解描述了被其修饰的注解是否被编译器丢弃或者保留在class文件中。默认情况下,注解被保存在class文件中,但在运行时并不能被反射访问。此注解包含了一个RetentionPolicy类型的value成员变量,有如下三个枚举类型值。
@RetentionPolicy.CLASS:@Retention注解中value成员变量的默认值,表示编译器会把被修饰的注解记录在class文件中,但当Java程序运行时,Java虚拟机不再保留注解,从而无法通过反射对注解进行访问。
@RetentionPolicy.RUNTIME:表示编译器将注解记录在class文件中,在运行程序时,Java虚拟机会保留注解,程序可以通过反射获取该注解。
@RetentionPolicy.SOURCE:表示编译器将直接丢弃被修饰的注解。
@Documented注解用于指定被其修饰的注解将被JavaDoc工具提取成文档,此注解没有成员变量。
@Inherited注解用于指定被其修饰的注解将具有继承性。
自定义注解:
注解类型是一种接口,但是又不同于接口,定义一个新的注解类型与定义一个接口非常相似,使用@interface关键字,自定义注解在实际的开发中使用的频率并不是很多,我也就不多讲了。说实话,我也不会啊~
顺带一提,通过反射方法读取注解信息可以去查查API。
线程:
首先讲讲什么是进程,进程是程序的一次动态执行过程,是系统运行程序的基本单位,每一个进程都有自己独立的一块内存空间、一组系统资源。每一个进程的内部数据和状态都是完全独立的。
而线程是进程中执行运算的最小单位,一个进程在其执行过程中可以产生多个线程,而线程必须在某个进程内执行。多线程就是在一个进程中同时运行了多个线程,用来完成不同的工作。根据处理级别的不同,线程也分为核心级线程和用户级线程。
核心级线程是和系统任务相关的线程,负责处理不同进程之间的多个线程。
用户级线程就是在开发程序时,由于程序的需要而编写的线程。
进程和线程的关系:
一个进程中至少要有一个线程。
资源分配给进程,同一进程的所有线程共享该进程的所有资源。
处理机分配给进程,即真正在处理机上运行的是线程。
多线程的优势:
多线程程序可以带来更好的用户体验,避免因程序执行过慢而导致出现计算机死机或者白屏的情况。
多线程程序可以最大限度的提高计算机系统的利用效率,如迅雷的多线程下载。
线程类:
每个程序至少自动拥有一个线程,称为主线程,Java程序中main方法即为主线程的入口。定义一个县城类通常有两种方法,分别是继承Thread类和实现Runnable接口。
继承Thread类:
public class MyThread extends Thread{
private int count=0;
public void run(){
whil