变量
分类
- 实例变量(non-static 修饰)
- 类变量(static 修饰)
- 本地变量
- 参数
命名规则
- 区分大小写
- 字母、数字、$、_
- 如果变量名包含多个单词使用_连接单词
- 不能以数字和$开头
数据类型
- byte (8 bit)
- short (16 bit)
- int (默认整数类型 32 bit Java 8 可以表示无符号数)
- long (64 bit Java 8 可以表示无符号数)
- float (32 bit IEEE754标准)
- double (默认浮点数类型 64 bit)
- boolean (true、false)
- char (16 bit Unicode 字符)
控制流程
switch:可以使用byte、int、short、char、Enum、String以及除Long之外的封装类
修饰符权限
修饰符 | Class | Package | Subclass | World |
---|---|---|---|---|
public | ture | ture | ture | ture |
protected | ture | ture | ture | false |
default | ture | ture | false | false |
private | ture | false | false | false |
内部类
内部类分为:内部类、本地类、匿名类
- 内部类:定义在类中的类
- 本地类:定义在代码块中的类
- 匿名类:实现特定的接口类
本地类与内部类的区别
- 都不能定义或声明任何静态参数
- 在静态方法中定义的本地类 仅能访问附属类的静态参数
- 本地类是非static,因为它能访问附属类的实例参数
- 在代码快里面不能声明任何接口,因为接口本质上是static
- 在本地类不能声明静态初始化器或成员接口
- 本地类可以有常量(static final 修饰)
java 8之后本地内使用的附属类参数可以不使用final修饰包括方法参数
匿名类
- 可以访问附属类私有成员
- 不能访问不是final修饰的本地变量
- 可以声明与附属类相同名的变量以达到数据隐藏
- 不能声明静态初始化器或成员接口
- 可以有常量(static final 修饰)
- 不能在匿名类声明Fields、实例变量、本地类、额外的方法
- 不能声明构造器
什么时候使用内部类、本地类、匿名类、Lambda表达式
- 内部类:如果需要创建超过一个类实例来访问构造函数或引入一个新的命名类型
- 本地类:如果需要声明字段或其他方法
- Lambda表达式:1、如果您封装了要传递给其他代码的单个行为单元。2、如果您需要一个功能接口的简单实例,并且不适用上述条件
- 匿名类:如果您的需求类似于本地类的要求,要使类型更广泛可用,并且不需要访问本地变量或方法参数。静态(对访问没有要求),非静态(需要访问一个封闭的实例非公有字段和方法)
注解
注解可以在属性、类、方法或其它元素
在Java 8之后可以在
- Class instance creation expression:
new @Interned MyObject();
- Type cast:
myString = (@NonNull String) str;
- implements clause:
class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... }
- Thrown exception declaration:
void monitorTemperature() throws @Critical TemperatureException { ... }
Java 8之后支持重复注解
定义重复注解
import java.lang.annotation.Repeatable;
@Repeatable(Schedules.class)
public @interface Schedule {
String dayOfMonth() default "first";
String dayOfWeek() default "Mon";
int hour() default 12;
}
public @interface Schedules {
Schedule[] value();
}
@Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Fri", hour="23")
public void doPeriodicCleanup() { ... }
网友评论