使用Java文档注释.
文档注释以/**开始,以*/结束,相应的信息和批注所对应的位置很重要
类的说明应在类定义之前,方法的说明应在方法的定义之前
批注参数用来标记一些特殊的属性及其相应的说明
@author<作者姓名>
@version<版本信息>
@param<参数名称><参数说明>
@return<返回值说明>
文档注释以/**开始,以*/结束,相应的信息和批注所对应的位置很重要
类的说明应在类定义之前,方法的说明应在方法的定义之前
批注参数用来标记一些特殊的属性及其相应的说明
@author<作者姓名>
@version<版本信息>
@param<参数名称><参数说明>
@return<返回值说明>
通过继承可以简化类的定义
java只支持单继承,不允许多重继承,可以多层继承
如:class B继承了class A,class C继承了class B,class C间接继承了class A
子类不继承父类的构造方法
在子类的构造方法中,可以使用super(参数列表)调用父类的构造方法
如果子类的构造方法中没有显式的调用父类的构造方法,也没有使用this调用重载的其它构造方法,则在产生的子类的实例对象时,系统默认调用父类无参数的构造方法
若父类不提供无参数的构造方法,则编译出错
例子:
/*
* Student.java
*
* Created on 2007-[......]
java final关键字.
在java中声明类、属性和方法时,可使用关键字final来修饰
final标记的类不能被继承
final标记的方法不能被子类重写
final标记的变量(成员变量或局部变量)即为常量,只能赋值一次
方法中定义的内置类只能访问该方法内的final类型的局部变量
用final定义的局部便狼相当于是一个常量,它的生命周期超出方法运行的生命周期
可以将一个形参定义成final,限定了在方法中修改形参的值
public static final共同标记常量时,该常量就成了全局的常量
final标记的成员变量必须在声明的同时或在该类的构造方法中[......]
Java中的抽象类。
抽象方法:不含方法体的方法,方法体的实现交给该类的子类根据自身的情况去实现
抽象类:包含抽象方法的类
abstract:修饰抽象类和抽象方法
抽象类不能被实例化,不能用new产生对象
抽象方法只需声明,不需实现
含有抽象方法的类必须被声明为抽象类
抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类
一个abstract类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现
例子:
/*
* TextAbstract.java
*
* Created on 2007-10-28,[......]
Java中的接口interface。
Java不支持多重继承,即一个类只能有一个父类
为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口
接口是抽象方法和常量值定义的集合,是一种特殊的抽象类
接口中只包含常量和方法的定义,没有变量和方法的实现
接口中的所有方法都是抽象的
接口中成员的访问类型都是public
接口中的变量默认使用public static final标识(可以在定义的时候不加此修饰,系统默认)
接口通过使用关键字interface来声明
格式:interface 接口的名字
接口体:
接口体中包含常量定义和方法定义两部分[......]
JAVA关于位运算符。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ex_8_java;
/**
*
* @author Administrator
*/
public class Ex_8_JAVA {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//[......]
Java格式化输出
Java的格式化输出等同于String.Format,与C有很大的相似,比如
System.out.printf(“%8.2f”, x);
在printf中,可以使用多个参数,例如:
System.out.printf(“Hello, %s. Next year, you’ll be %d”, name, age);
用于printf的转换符如下表:
转换符 类型 举例
d 十进制整数 159
x 十六进制整数 9f
o 八进制整数 237
f 定点浮点数 15.9
e 指数浮点数 1.59e+01
g 通常浮点数
a 十六进制浮点数 0[......]
JAVA多线程并发之java内存模型JMM.
多线程概念的引入是人类又一次有效压寨计算机的体现,而且这也是非常有必要的,因为一般运算过程中涉及到数据的读取,例如从磁盘、其他系统、数据库等,CPU的运算速度与数据读取速度有一个严重的不平衡,期间如果按一条线程执行将会在很多节点产生阻塞,使计算效率低下。另外,服务器端是java最擅长的领域,作为服务器必须要能同时响应多个客户端的请求,同样需要多线程的支持。在多线程情况下,高并发将带来数据的共享与竞争问题,tomcat作为中间件将多线程并发等细节尽量封装起来处理,使用户对多线程透明,更多地关注业务处理即可。但如果想要深入剖析tomcat我们有必[......]
volatile既然不足以保证数据同步,那么就必须要引入锁来确保。互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它保证共享数据同一时刻只能被一条线程使用,其他线程只有等到锁释放后才能重新进行竞争。对于java开发人员,我们最熟悉的肯定就是用synchronized关键词完成锁功能,在涉及到多线程并发时,对于一些变量,你应该会毫不犹豫地加上synchronized去保证变量的同步性。
在C/C++可直接使用操作系统提供的互斥锁实现同步和线程的阻塞和唤起,与之不同的是,java要把这些底层封装,而synch[......]