回顾Java
的基础知识,不知道该从哪里开始入手,便从Java
的关键字开始,由此扩展出相关知识。
1. 包引入和包声明: import, package
2. 用于类和接口的声明: class, extends, implements, interface
3. 数据类型: byte, boolean, char, double, int, long, float, short
4. 某些数据类型的可选值: flase, ture, null
5. 流程控制: break, case, continue, default, do, else, for, if, return, switch, while
6. 异常处理: catch, finally, throw, throws, try
7. 修饰符: abstract, final, native, private, protected, public, static, synchronilzed, transient, volatitle
8. 操作符: instanceof
9. 创建对象: new
10. 引用: this, supper
11. 方法返回类型: void
12. 保留字: const, goto
自定义标识符可以由大小写字母、数字、下划线(_
)、美元符号($
)组成,但不能以数字开头,不能是Java中的保留字或关键字。
注:
this
和super
关键字。final
关键字可以修饰类、方法和属性
修饰类 : 该类不能被继承
修饰方法 : 该方法不能被覆盖(重写)
修饰属性 : 该属性为常量,只能赋值一次,必须在声明时或在构造方法中显示赋值
注:
public static final
的组合方式标识常量,这样的常量就成为了全局的常量,且只能在定义时赋值extends、class
)implements、interface
)super
显式地调用父类构造方法,则默认调用父类无参构造方法,若父类没有无参构造方法,则会出错。访问控制修饰符共有四个: public、protected、(default)、private
, default
即为不写时的修饰。
修饰成员:
public : 可以被所有类访问
protected : 既可以被同一包中的其他类访问, 也可以被不同包中的子类访问
default : 只能被同一包中的其他类访问
private : 只能在这个类的内部访问
修饰类(只有两种访问控制:public
和default
):
public : 能被所有的类访问, public修饰的类必须与文件名一致
default : 只能被同一包中所有的类访问
"abstract 返回值类型 抽象方法名 (参数列表);"
,只声明不实现abstract class
声明abstract
不能与private、static、final、native
并列修饰同一个方法interface
声明,是一种特殊的抽象类,只包含常量和方法的定义,而没方法的实现public static final
标记的extends
关键字必须位于implements
关键字之前public abstract
类型的,即使不饰符,也是这种类型的。可以使用instanceof
操作符判断一个类是否实现了某个接口,或用来判断一个实例对象是否属于某个类。其语法格式为:对象 instanceof 类(或接口)
在JKD
源码中总会看到native
的方法,如:
// Object中
public native int hashCode();
protected native Object clone() throws CloneNotSupportedException;
// String中
public native String intern();
native
关键字表明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。
Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI(Java Native Interface,本机编程接口,是SDK的一部分)调用其他语言来实现对底层的访问。
怎么写JNI这里就不说了。
Java
的序列化机制可以把实现了Serializable
接口的对象进行持久存储,而被transient
关键字修饰的字段,在序列化时就会被忽略。
volatitle
关键字用于多线程的环境中,用volatitle
修饰的变量,每次取值时都会取修改后的值,即该变量不会装入寄存器,每次改变都写入内存,每次读取都到内存中去取。
两个线程同时对int a = 0;
定义好的a
进行a++
操作时,线程1对a自增之后未写回,线程2又对a进行了自增,就会导致与预期结果不一样。
synchronized
关键字用于实现多线程的同步,在多线程访问的时候,所有加上synchronized
的方法或块语句,同一时刻只能有一个线程能够用访问。
正好写个线程安全的单例模式(懒汉)来体现下volatitle
和synchronilzed
的作用
publicclass Singleton {
private static volatile Singleton instance = null;
private Singleton() { }
public static Singleton getInstance() {
if (instance == null) { // 注意这里有两次判断,里面那个判断是必须有的,外面这个判断可提高效率
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}