特殊关键字
native
简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C”告知C++编译器去调用一个C的函数。
“A native method is a Java method whose implementation is provided by non-java code.”
在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。- 参考博客:
- 参考博客:
strictfp
strictfp 的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运 行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个 类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确, 而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。
- 参考博客:
- 参考博客:
synchronized
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
五、以上规则对其它对象锁同样适用.- 参考博客:
- 参考博客:
volatile
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。
数组元素初始化
- 对于基本数据类型(int, double, char等)来说,其初始值都为0(0, 0.0, ‘\0’等)。
- 对于引用数据类型(String, Interger等)来说,其初始值都为null。
- 下图说明了这两个概念(其中char是以16进制表示的)
值传递 引用传递 副本传递
- 我们知道定义了一个基本数据类型,就相当于定义了一个内存空间,里面存放着这个基本数据类型的值;而定义了一个引用数据类型,就相当于定义了一个指针,指向了另一段内存空间。如下图所示。
- 函数调用基本数据类型时,就是所谓的值传递/副本传递,系统新分配了一个空间,并将值放入这个新空间;而当函数调用引用数据类型时,就是所谓的引用传递,系统新分配了一个空间,并将指针放入这个新空间。如下图所示,主调函数中的aStr和被调函数中的aStr会互相影响,因为它们指向同一段内存地址。
Java实现快速排序
关于String
过程感言
- 前两次java实践中,我也使用了快速排序,不过前两次是将快排包裹在一个类中,使用时需要new这个类来提供数据,再调用快排函数来实现排序。这一次我将快排作为一个静态函数,接受数组为参数,并直接在数组上进行快速排序。这样写不仅实现起来简单易懂,结构清晰,而且调用者也不会有莫名奇妙的感觉。
- 其实“关于String”那一段我并没有弄懂。hashCode输出的是地址,可以看到aStr、cStr、dStr的hashCode都是一样的,那为什么aStr == cStr为什么为false呢?debug时aStr的id也和cStr的id不同,改变aStr的值也不会对cStr的值造成影响……所以“String cSrt = new String(aSrt);”中cSrt和aSrt到底是什么关系呢???