关键字不能用作变量、方法名、类名、包名、参数。
保留关键字:constant、goto
数据类型:boolean、byte、char、double、float、int、long、short
循环相关:for、do、while、if、else、switch、case、break、continue、default
包和类接口相关:new、class、import、package、extends、interface、implements、
修饰相关:abstract、private、protected、public、final、static、synchronized、volatile、native、strictfp、transient
异常处理:throws、catch、try、assert、finally、throw
其他:instanceof、super、null、return、void、enum、this
1.break和continue的区别
continue:用来结束循环体中continue之后语句的执行,并跳到循环块的开始处继续执行下一次迭代;
break:跳出循环,结束程序块的执行。
public class TestContinue{
public static void main(String args[]){
TestContinue tc=new TestContinue();
tc.testContinue();
tc.testBreak();
}
public void testContinue(){
int i=0;
for(;i<5;i++){
if(i==2)continue;
System.out.println("i="+i);
}
System.out.println("continue i="+i);
}
public void testBreak(){
int i=0;
for(;i<5;i++){
if(i==2)break;
System.out.println("i="+i);
}
System.out.println("break i="+i);
}
}
执行结果:
可以看出在testContinue()函数中没有打印i=2,而继续打印i=3,i=4;而在testBreak()中,i=2的时候直接结束了循环。
2.访问修饰符private、protected、public
访问修饰符用来定义成员的访问权限,如下表。
类内部 | 包内 | 子类 | 其他 | |
public | 允许 | 允许 | 允许 | 允许 |
protected | 允许 | 允许 | 允许 | 不允许 |
private | 允许 | 不允许 | 不允许 | 不允许 |
3.abstract
修饰类或者方法。
(1)abstract修饰类,这个类即为抽象类,该类不能生成对象实例,需要子类继承并覆盖其中的抽象方法;
(2)abstract修饰方法,该方法即为抽象方法,只在类中声明而不实现,需要在子类中继承实现。
(3)A:有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。abstract修饰符在修饰类时必须放在类名前。abstract修饰方法就是要求其子类(实现)这个方法,调用时就可以以多态方式调用子类覆盖(实现)后的方法,除非子类本身也是抽象类。
B:父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现(覆盖)了,子类才有创建对象的实例的能力,否则子类也必须是抽象类。
4.final
final修饰符可以修饰变量、方法、类。
(1)final修饰变量
final修饰的变量就会变成常量(必须赋值),一旦赋值便不能改变。
(2)final修饰方法
final修饰的方法不能被其子类覆盖。
(3)final修饰类
final修饰的类不能被继承,final类中的方法也都是final的。
5.static
(1)static修饰属性
static修饰的属性为类变量,即该属性可以通过类名.属性名的方式进行访问,为本类所共有。(类变量,在类加载时被创建并进行初始化,类加载的过程是一次性的,因此类变量也只会被创建一次。)
(2)static修饰方法
static修饰的方法为静态方法,该方法可以通过类名.方法名的方式进行访问
static修饰的方法,不能直接访问本类中的非静态(static)成员(包括方法和属性),本类的非静态(static)方法可以访问本类的静态成员(包括方法和属性),可以调用静态方法。静态方法要慎重使用。在静态方法中不能出现this关键字。
父类中是静态方法,子类中不能覆盖为非静态方法,在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。(在使用对象调用静态方法是其实是调用编译时类型的静态方法)
父子类中,静态方法只能被静态方法覆盖,父子类中,非静态方法只能被非静态方法覆盖。
java中的main方法必须写成static的因为,在类加载时无法创建对象,因为静态方法可以不通过对象调用所以在类的main方法。所在在类加载时就可以通过main方法入口来运行程序。
(3)static修饰代码块
6.synchronized
synchronized可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然可以访问该object中的非加锁代码块。
7.volatile
8.super
9.this