语法
标识符
给包,类,方法,变量名字起的符号。
组成规则
有字母,数字,下划线“_”,美元符号“¥”或者"$"组成,并且首字母不能是数字。
命名规则
按照意思简单明了(不要用拼音)
包名:全部小写,多级包用.隔开。
举例com.chatroom
类,接口:一个单词首字母大写,多个单词每个单词的首字母大写。
举例:Student,Cat,Hello
方法和变量:一个单词首字母小写,多个单词从第二个单词开始每个单词的首字母大写(驼峰法)。
常量:如果是一个单词,所有字母大小写,如果是多个单词,所有的单词大写,用下划线区分每个单词。
注意标识符:
不能以数字开头
不能是Java中的关键字
大小写敏感,长度无限制
标识符不能包含空格
关键字:
Java语言中已经赋予了特殊含义的,不能作标识符使用
-
数据类型关键字:
int
:声明整数类型变量。double
:声明双精度浮点数变量。float
:声明单精度浮点数变量。char
:声明字符变量。boolean
:声明布尔类型变量。byte
:声明字节类型变量。short
:声明短整型变量。long
:声明长整型变量。
-
控制流关键字:
if
:条件语句,用于判断条件是否为真。else
:与if
结合使用,当if
条件为假时执行。switch
:用于多分支选择结构。case
:定义switch
结构中的一个分支。default
:在switch
结构中,当所有case
都不匹配时执行。for
:循环语句,用于重复执行代码块。while
:循环语句,只要条件为真,就反复执行代码块。do
:与while
结合使用,至少执行一次代码块。break
:退出switch
或循环。continue
:跳过循环的当前迭代,继续下一次迭代。return
:从方法中返回。
-
访问修饰符关键字:
public
:公共访问,任何类都可以访问。private
:私有访问,只有类本身可以访问。protected
:受保护的访问,子类和同一包中的类可以访问。static
:定义类级别的成员,而不是实例级别的成员。
-
类和对象关键字:
class
:定义一个类。interface
:定义一个接口。extends
:表示一个类继承另一个类。implements
:表示一个类实现一个接口。new
:用于创建类的实例(对象)。this
:引用当前对象的实例。super
:引用父类对象的实例。abstract
:定义抽象类或抽象方法。final
:定义常量、不可继承的类或不可重写的方法。enum
:定义枚举类型。
-
异常处理关键字:
try
:用于捕获异常。catch
:用于处理异常。finally
:无论是否抛出异常,最终都会执行的代码块。throw
:显式抛出异常。throws
:声明方法可能抛出的异常。
-
同步和并发关键字:
synchronized
:用于同步方法或代码块,防止多线程同时访问同一个资源。volatile
:声明一个变量的值可能会被不同的线程修改,确保所有线程读取到的是最新的值。
-
包和导入关键字:
package
:定义类所在的包。import
:导入其他包中的类。
-
其他关键字:
void
:声明方法不返回任何值。const
:保留字,未被使用。goto
:保留字,未被使用。null
:表示空引用。instanceof
:测试对象是否为特定类的实例。transient
:声明字段不被序列化。native
:声明方法是本地(非Java)代码实现的。strictfp
:确保浮点运算的结果在不同平台上一致。assert
:用于调试,断言条件为真。
注释
名如其意,用于解释说明代码的的文字
一、单行注释
用"//"标识,但是只能作用一行,适用于注释内容小的地方
快捷键Ctrl+/
二、多行注释
多行注释可以注释掉多行内容
/*
多行注释:
main函数,
程序的入口,
*/
三、文档注释
文档注释是Java特有的,可被JDK提供的javadoc解析,用于生成网页形式的说明文档,在IDEA可直接使用Tools中的Gerenate JavaDoc生成
以/**开头,以*/结尾
/** * 这是文档注释 * 可用于生成JavaDoc文档 */
四、延申(阿里巴巴注释条约)
1、类、类属性、类方法注释必须使用文档注释。
2、所有抽象方法(包括接口中的方法)必须使用文档注释,除了返回值、参数、异常说明外还需指出该方法所做事情以及实现功能。
3、所有类必须添加创建者和时间。
4、方法内部单行注释在被注释语句上方再起一行,方法内部多行注释,注意与代码对齐。
5、所有枚举类型字段必须有注释,并说明每个数据项的用途
注解
-
什么是注解(Annotation)
- 注解是 Java 5.0 引入的一种机制,它提供了一种将元数据(metadata)与程序元素(类、方法、变量等)相关联的方式。元数据是关于数据的数据,在 Java 中,注解就是这种用来描述程序元素的额外信息。
- 例如,注解可以用于标记某个方法是过时的,或者某个类是一个测试用例类等。它就像是给程序元素贴上了一个标签,这个标签可以被编译器、开发工具或者运行时环境识别并进行相应的处理。
-
注解的定义
注解的定义方式类似于接口,使用@interface
关键字。
public @interface MyAnnotation {
String value();
}
- 这定义了一个名为
MyAnnotation
的注解,它有一个名为value
的成员,这个成员的类型是String
。在使用这个注解时,通常需要为value
提供一个值。
注解的使用
- 可以将注解应用到类、方法、变量等各种程序元素上。例如,将上面定义的
MyAnnotation
注解应用到一个方法上: -
public class MyClass { @MyAnnotation("This is a test") public void myMethod() { // 方法体 } }
- 在这里,
@MyAnnotation("This is a test")
就是将MyAnnotation
注解应用到myMethod
方法上,并且为value
成员提供了值 “This is a test”。
内置注解(Java 自带的常用注解)
@Override
:
- 用于标记子类中的方法覆盖了父类中的方法。这是一种编译时检查机制,如果子类中的方法使用了
@Override
注解,但实际上并没有正确地覆盖父类中的方法(例如方法签名不一致),编译器会报错。
class Parent {
public void print() {
System.out.println("Parent's print method");
}
}
class Child extends Parent {
@Override
public void print() {
System.out.println("Child's print method");
}
}
@Deprecated
:
- 用于标记某个程序元素(类、方法、变量等)已经过时,不建议使用。当其他代码使用了被标记为
@Deprecated
的元素时,编译器会发出警告。
class OldClass {
@Deprecated
public void oldMethod() {
System.out.println("This is an old method");
}
}
@SuppressWarnings
:
- 用于抑制编译器警告。当代码中可能会产生一些编译器警告(例如使用了未经检查的类型转换等),可以使用
@SuppressWarnings
注解来告诉编译器不要发出这些警告。它有一个参数,用于指定要抑制的警告类型,例如unchecked
(未检查的类型转换警告)、deprecation
(使用了过时的元素警告)等。
import java.util.ArrayList;
import java.util.List;
public class WarningSuppression {
@SuppressWarnings("unchecked")
public void method() {
List list = new ArrayList();
// 这里进行了未经检查的类型转换,但是通过注解抑制了警告
list.add("String");
}
}
元注解(用于注解其他注解的注解)
@Retention
:
- 它用于指定注解的保留策略,即注解在什么阶段有效。它有三个取值:
RetentionPolicy.SOURCE
:注解只在源文件阶段有效,编译器在编译时会丢弃这些注解。例如,一些用于代码检查的注解可能只在源文件阶段有用,在编译后的字节码中不需要保留。RetentionPolicy.CLASS
:注解在编译后的字节码中保留,但在运行时无法通过反射访问。这是默认的保留策略。RetentionPolicy.RUNTIME
:注解在运行时也可以通过反射访问。这使得可以在程序运行时根据注解的信息进行动态处理。- 例如,定义一个运行时有效的注解:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyRuntimeAnnotation {
String value();
}
@Target
:
- 用于指定注解可以应用到哪些程序元素上。它有一个
ElementType
类型的数组作为参数,ElementType
是一个枚举,包含了如TYPE
(类、接口、枚举)、METHOD
(方法)、FIELD
(字段)、PARAMETER
(参数)等多种取值。 - 例如,定义一个只能应用于方法的注解:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
public @interface MethodAnnotation {
// 注解内容
}
@Documented
:- 用于指定在生成 JavaDoc 文档时是否包含该注解。如果一个注解被标记为
@Documented
,那么在生成文档时,这个注解也会出现在文档中,并且应用了该注解的程序元素的文档中也会显示这个注解的相关信息。
- 用于指定在生成 JavaDoc 文档时是否包含该注解。如果一个注解被标记为
@Inherited
:- 用于指定注解是否可以被继承。如果一个注解被标记为
@Inherited
,并且一个类被这个注解标记,那么它的子类也会自动拥有这个注解。不过需要注意的是,这种继承只适用于类层次结构,对于接口等情况的继承规则有所不同。
- 用于指定注解是否可以被继承。如果一个注解被标记为
自定义注解的应用场景
- 框架开发:
- 在许多 Java 框架中,注解被广泛用于配置和管理。例如,在 Spring 框架中,
@Component
注解用于标记一个类是一个组件,@Autowired
注解用于自动装配依赖关系。这些注解使得框架能够在运行时根据注解信息自动配置和管理对象。
- 在许多 Java 框架中,注解被广泛用于配置和管理。例如,在 Spring 框架中,
- 代码生成:
- 可以利用注解来生成代码。例如,通过自定义注解标记某些需要生成特定代码(如数据库访问代码、序列化代码等)的类或方法,然后使用代码生成工具根据这些注解来生成相应的代码,提高开发效率。
- 运行时处理:
- 当注解的保留策略为
RetentionPolicy.RUNTIME
时,可以在运行时通过反射获取注解信息并进行处理。例如,编写一个工具,它可以在运行时扫描所有带有特定注解的类,并执行这些类中的某些方法,这在实现插件式架构等场景中非常有用。
- 当注解的保留策略为