1、instanceof
- java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。
- 对象 instanceof 类(接口);返回boolean
2、JAVA中有四个访问修饰符:default/public/private/protected
- private 类内 不同类 不能
- default 类内+包内 在不同的包中import后 也不能
- protect 类内+包内+继承内
- public 公共
3、volatile
- 作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值,如果一个字段被声明为volatile,Java内存模型确保所有线程看到这个变量的值是一致的。
- 被设计用来修饰被不同线程访问和修改的变量。如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
4、synchronized(this)
- 这里的this是指当前对象,刚开始运行这段代码的时候会给这段代码加个锁,这样即使运行到中间被替换了,另一个线程也不会执行这段代码,因为这段代码加锁了,而钥匙在给代码加锁的那个线程手里,只有加锁的线程运行完这段代码,才会给代码解锁.然后其他线程才能执行这段代码。
5、static
- 在类中用static声明的成员,表明该成员不属于任何类的对象,有该类构造各个对象共享这个成员;同时如果是成员方法,也不可以使用类中定义的非static方法,因为这件违背static的初衷;
- 对象序列化机制(object serialization)是Java语言内建的一种对象持久化方式,可以很容易的在JVM中的活动对象和字节数组(流)之间进行转换。除了可以很简单的实现持久化之外(类对象状态存储到一个数据库中或文件中,很明显这是以文件流的方式进行传输),另外序列化机制的另外一个重要用途是在远程方法调用中,用来对开发人员屏蔽底层实现细节。
7、public static void main
- 该函数所在的类应该是一个综合调用的类,它不应该使用package关键字,即包含进一个包(否则如果我们运行该类的main将会很复杂,需要输入java +(class绝对路径)才能正常运行程序,而且不能移动这个class的位置);最多就是使用import;而对于其它的类随便正常使用即可;将java程序移植一般是将整个工程目录进行移动所以也还好,只是涵main的class文件不能移动否则无法运行(如上所述还是使用绝对路径来执行程序);
8、hashCode方法
- 该方法在object类中有定义,是一个native方法,即非Java语言写的方法,具体是用来返回当前对象的内存地址;
- hashCode的返回值在MAP集合中被使用,作为对象的键,用来生成对应的哈希表的值;
- 一些类可能会重写该方法,如integer类返回的是当前对象存储的int值,而非存储地址;
- 注意的是如果重写了equals方法的话,如果两个对象equals方法返回值为真,则两个对象hashCode的返回值必须也相同!否则在使用MAP集合的时候会导致一些很奇怪的结果!(建议)
9、native方法
- 一类不是用Java语言编写的方法,如C语言实现;
- 使用场景
-
1Java语言无法实现的功能,如过去对象的内存地址2Java实现相对于其它语言实现代价高太多;3同时非Java语言编写代码也要具有平台可移植性;
-
- 使用方法
- 1Java文件中声明出native方法,同时加入载入方法;
- 2用其它语言编写相应的方法;
10、abstract关键字
- 抽象类:
- abstract出现在class关键字前面
- 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。
- 如果一个类为抽象类,那么其中可能有非抽象的方法。
- 继承该抽象类的实现类必须重写(实现对应的抽象方法)
- 注意:class中的抽象方法不能是private
- 抽象接口:
- abstract出现在interface关键字前面
- 但是interface本身就是一个abstract;加不加abstract无所谓;
- 接口中的方法都是抽象方法;
- 注意:接口中的方法必须都是public的
- 抽象方法:
- abstract出现在方法返回值前面
- 该方法不能有方法体;
- 形如:public abstract void isTrue();