- Java的一些特性:
- 继承:
- 多态:
- 重载:
- 重写:
- Java关键字:
- 1. assert:断言,一般用在测试类中。
- 2. enum:是一个特殊的类,一般用来表示一组常量。
- 3. instanceof:Java中的二元运算符,左边是对象右边是类。
- 4. finally:和try catch一起用。无论程序是否正确执行,finally块都会被执行到。
- 5. strictfp:FP-strict,精确浮点。用来声明类,方法,接口。在声明的域内浮点数运算完全按照IEEE-754标准进行运算。防止出现不同硬件平台运算结果不一致的问题。用的很少。
- 6. super:用super();方法在子类构造方法中调用父类构造方法。如果父类的method()方法被子类重写,用super.method();在子类使用父类的方法。
- 7. synchronized:
- 8. throw:用来在方法体中抛出异常,需要和throws连用。
- 9. throws:用来申明该方法可能抛出的所有异常,使用该方法时需要用trycatch捕获。
- 10. transient:一个和序列化有关的关键字。更多细节:[Java transient关键字](https://www.runoob.com/w3cnote/java-transient-keywords.html)
- 11. volatile :总结一下就是:不保证原子性,一定程度上保证有序性,保证可见性。
- 12. final关键字:
- 子类无法继承父类的static方法和变量。
- 子类可以继承父类的private成员变量,但是看不到。但是可以用父类提供的public方法改变这个成员变量。
- 父类被final修饰的类可以被继承,不能被重写,至于能不能被看到取决于private。
//使用这种方法创建的对象son,只能使用Father拥有的变量和方法。 Father son = new Son();多态:
- 多态通过继承、接口来实现。子类通过重写父类方法或实现接口实现多态。在程序的编译阶段,
- 重载的方法,名称和返回值一定要相同,传入的参数一定要不同。
- 子类对父类可以访问的方法进行重写
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(Java7之后的特性)
- final修饰的方法不能重写。static修饰的方法子类可以重新声明。
- 被子类重写的方法访问权限不能低于父类。
abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
1. assert:断言,一般用在测试类中。 2. enum:是一个特殊的类,一般用来表示一组常量。//很多项目中都有一个专门的类来声明项目中用到的所有常量,所以enmu用的不多。
enum Color { //也可以声明在Test类中
RED, GREEN, BLUE;
}
public class Test{
public static void main(String[] args){
Color c1 = Color.RED;
System.out.println(c1);
}
}
3. instanceof:Java中的二元运算符,左边是对象右边是类。
这个关键字可以理解成:a is an instance of B?只要返回真,a就可以强制转换成B。
Java编程规范要求,如果要使用向下转型,最好使用instanceof关键字判断能否进行转换。这对避免ClassCastException很有用。
更多细节:Java instanceof用法详解
//注1:null和任何类都是false String s = ""; System.out.println(s instanceof String); //返回true4. finally:和try catch一起用。无论程序是否正确执行,finally块都会被执行到。
- finally块中有return时,将会覆盖try和catch块中的return。
- 如果try或catch中有return,程序先将返回值存在某个地方,再执行finally,因此在finally中改变返回值没有用。
- 在try中加System.exit(0)或者在try之外的地方出现错误,都会使得程序直接结束,不会执行finally
class Test {
void test01() throws IOException, InterruptedException {
//抛出异常
throw new IOException("this is an IOException");
}
}
//不处理异常,继续向上级抛出。
class Main1 {
public static void main(String[] args) throws IOException, InterruptedException {
Test test = new Test();
test.test01();
}
}
//使用trycatch处理异常。
class Main2 {
public static void main(String[] args) {
Test test = new Test();
try {
test.test01();
} catch (IOExcpetion e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
10. transient:一个和序列化有关的关键字。更多细节:Java transient关键字
11. volatile :总结一下就是:不保证原子性,一定程度上保证有序性,保证可见性。
- 对变量的写操作不依赖变量当前值、也不依赖其他变量的值时可以使用。
- 可用于多线程中的状态标记量、线程安全的单例模式的双重检查锁中。
更多细节:Java并发编程:volatile关键字解析
- final修饰的基本数据类型变量一旦初始化就不能被修改。
- final修饰的引用数据类型变量一旦初始化就不能改变其指向的地址。
- final修饰的类不能被继承
- final修饰的方法可以被继承,但不能被子类修改
更多细节:浅析Java中的final关键字
final Object obj = new Object(); Object obj2 = new Object(); obj = new Object; //会报错。 obj = obj2; //也会报错。



