在Java中,有保留字和关键字两种。保留字和关键字是什么呢?Look:保留字:为java预留的关键字。现在还没用到,但是在升级版本中可能作为关键字。关键字:Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。两者的不同就在与一个正在使用另一个还没使用。
保留字只有const和 goto。 对于关键字,我们可以用分类的方法来学习:
一、关于包的
import 引入包 package 包基本类型
二、与类相关
1、访问控制
public protect private
对于这三个,当人还有一个是默认的(default),我们用一个表格来理解:
从表中我们也知道了:public的老大,在哪里都能访问到,接着是protect,紧接着是default,就是不加访问控制关键字的时候,最小的是private,只能在当前类中使用。
2、类、方法和变量修饰符
super 父类 this 当前类
abstract 声明抽象 class 类 extends 扩允,继承 final终极,不可改变的
implements实现 interface 接口 native 本地 new 新,创建
static 静态 strictfp 严格,精准 synchronized 线程,同步 transient 短暂
volatile 易失
在这里要着重了解 1、final:final用来修饰类时,该类不能被继承(String就是用final关键字限制的);用来修饰普通方法时,方法不能被改写;用来修饰属性时,属性值不能改变。还要注意的是final不能修饰抽象类、抽象方法、接口,我们想一下也能知道为什么。抽象类和接口是不能被实例化的,只能被继承,抽象方法也只能改写,如果加了final,那还有用吗?我们得给他们留下活路啊,做人不能太绝了,不然会有Bug噢。 2、static : 用了static就表示共享的,即被所有的类的实例共享。说具体点,就是不管有多少个对象,用了static修饰的方法或者属性都只有一份,且不论是否有没有实例化对象,被static修饰的内容已经存在,这也解释了为什么Color.white、Math.random()....是可行的。还可以解释为什么主函数一定要加static 了,main()是程序的入口,但类要在main()中实例化对象,main()又是类的方法,如果main()不是 static的,main()就需要一个实例来调用,但类的实例实在main()中实现的,就会矛盾。
三、线程相关
transient 短暂 volatile 易失 synchronized同步
在这里还是要着重讲一下volatile和synchronized:当多个线程共同使用某个变量时,该变量最好使用volatile修饰的,让该变量的值能及时更新;当我们有多个线程要执行同一代码块,且该代码块同步运行的时候,可以讲这些代码块加入synchronized中,避免出现问题。如下:
package xiaozhi; //线程的同步代码块 public class test_2 implements Runnable{ //我们只有一百张票,但让四个人(四个线程)来卖票 //按理说当ticket为0的时候就不继续卖了 private int ticket=100;
public static void main(String[] args) {// TODO Auto-generated method stubtest_2 t=new test_2();Thread thread_1=new Thread(t);Thread thread_2=new Thread(t);Thread thread_3=new Thread(t);Thread thread_4=new Thread(t);thread_1.start();thread_2.start();thread_3.start();thread_4.start();}}public void run(){ while(ticket>0){ try { Thread.sleep(30); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(ticket--); } }
我们只有一百张票,但让四个人(四个线程)来卖票 ,按理说当ticket为0的时候就不继续卖了 但结果是:
有了-1,-2的票,
package xiaozhi; //线程的同步代码块 public class test_2 implements Runnable{ private int ticket=100; public static void main(String[] args) { // TODO Auto-generated method stub test_2 t=new test_2(); Thread thread_1=new Thread(t); Thread thread_2=new Thread(t); Thread thread_3=new Thread(t); Thread thread_4=new Thread(t); thread_1.start(); thread_2.start(); thread_3.start(); thread_4.start(); } public void run(){ synchronized (this){ while(ticket>0){ try { Thread.sleep(30); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(ticket--); } } } }
当我们加了synchronized, 结果就是:
,很好的解决了问题,至于为什么会有这种问题,在线程里详细说明。
四、程序控制语句
break 跳出循环 continue 继续 return 返回 do 运行 while循环 if 如果 else 反之 for 循 instanceof 实例 switch 开关 case 返回开关里的结果 default 默认
五、异常处理
try 捕获异常 catch 处理异常 finally 有没有异常都执行 throw 抛出一个异常对象throws 声明一个异常可能被抛出
六、基本数据类型
boolean 布尔型 byte 字节型 char 字符型 double 双精度 float 浮点int 整型 long 长整型 short 短整型 null 空 true真 false 假
七。总述 关键字列表(依字母排序共51组):
abstract, assert,boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum,extends, final, finally, float, for, if, implements, import,instanceof, int, interface, long, native, new,package, private, protected, public, return, short,static, strictfp, super,switch, synchronized,this, throw, throws, transient,
try, void, volatile, while