一些java基础问题

1.有关初始化

  • 在方法内部如果调用了一个未被初始化的变量,编译器会提示错误信息,必须将该变量进行初始化操作;如果该变量作为一个类的数据属性字段,对于基础数据类型,将被自动初始化为相应的值:表示数字类型的为0double,float0.0boolean初始化为falsechar0显示为空白字符,对于对象引用,则初始化为null
  • 初始化的顺序。在类的内部,变量定义的顺序决定了初始化的顺序,即使变量散落在类的各处,它们也将先被初始化。如果存在静态变量,则静态变量将会被最先初始化,再是非静态变量。静态初始化只在它们必要的时候才会进行,但只会被初始化一次。
  • 构造器将在完成上述过程后执行。

虽然没有显示的定义,但构造方法也属于静态方法。创建对象时,java解释器将查找class文件,载入并会创建一个Class对象,所有关于静态初始化的动作将会执行,并在堆上为对象分配内存,将基本类型数据置为默认值,引用置为null,执行字段定义时的初始化动作,最后执行构造器。

Read More

Java内存区域与相关异常

java程序运行时内存由虚拟机进行分配管理,其管理的运行时数据区域有以下几个部分:

  1. 程序计数器
    一块较小的内存空间,用于指示当前字节码执行地址记录,可在程序中断后切回到正确的位置以继续执行。若执行的是非java方法,而是Native方法,则值为空。该区域是java虚拟机规范中唯一一个没有规定任何OutOfMemoryError异常的区域。

  2. Java虚拟机栈
    线程私有,与线程生命周期相同。此内存区域存储着局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表存放了各种基本数据类型、对象引用、指向字节码指令的地址;它所需要的内存空间,在编译期间是确定的,并在编译时完成分配。在java虚拟机规范中,如果线程请求的栈深度大于虚拟机的允许的深度,将抛出StackOverflowError异常,如果虚拟机栈可动态扩展,但申请不到足够内存,将抛出OutOfMemoryError异常。

  3. 本地方法栈
    本地方法栈与java虚拟机栈作用相同,抛出的异常相同。区别在于本地方法栈用于为Native方法服务。

    Read More

linux常用命令记录

– 1.关闭多个进程
进程拥有相同关键字,可用如下方式:

命令
1
ps aux|grep "keyword"|cut -c 9-15|xargs kill -9

grep将有关键字的进程列出,cut截取输出的9-15个字符刚好为进程号,xargs将前面命令的输出作为参数管道符”|”用于分割不同命令

– 2.后台运行一个进程

1
nohup command &

在用户注销,网络断开时,终端会收到HUP(hangup)信号,关闭所有子进程,nohup提交的命令将会忽略这个hangup信号,从而在用户注销后仍能继续运行

maven安装与使用

1.安装maven

  • 下载maven:maven
  • 解压:tar -zxvf apache-maven……
  • 移动解压后的文件到指定目录,例如/usr/local/ : sudo mv apache-maven… /usr/local/
  • 配置环境变量:编辑/etc/profile 在末尾追加如下内容
    export M2_HOME=/usr/local/apache-maven…..
    export PATH=$M2_HOME/bin:$PATH
    等号之间不能有空格
  • 让环境变量生效:source /etc/profile

    Read More

Apache Mina使用问题

最近有使用到mina框架做TCP连接,此处记录下其中的一些问题。

1.mina的基本使用
作为一个框架,它解决了很多基础的问题,类似很多web框架一样,可以让你把精力集中在业务逻辑上。mina已经完成了底层对于连接的建立和管理,在创建客户端或服务端的时候绑定对应的handler,即可在连接建立后的各种事件触发下执行相应操作。
服务端建立示例:

服务端建立
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private static final int PORT = 9321;
NioSocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast(
"codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"))));
// 心跳
KeepAliveMessageFactory kamf = new ServerKeepAliveMessageFactoryImpl();
KeepAliveFilter kaf = new KeepAliveFilter(kamf, IdleStatus.BOTH_IDLE);
kaf.setForwardEvent(true);
kaf.setRequestInterval(22);
acceptor.getFilterChain().addLast("heartbeat", kaf);
acceptor.setHandler(new ServerHandler());
acceptor.addListener(new ServerIOListener());//
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

try {
acceptor.bind(new InetSocketAddress(PORT));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Read More

Java设计模式--责任链模式

  在责任链模式中,由每个对象及其下一个对象的引用连接形成一条责任链。客户端发出的请求将在这个链上进行传递。在这个过程中,每个对象可选择处理该事件,或放弃并交由下一级处理,直至处理完毕返回结果。

示例
1.handler父类,定义处理方法

CostHandler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package org.mamba.handler;
/**
* 花费处理类
* @author mamba
*
*/
public abstract class CostHandler {

/**处理对象,用于引用其后继对象*/
protected CostHandler handler;

/**
* 请求处理方法
* @param money
* 申请的经费
*/
public abstract void handleRequest(float money);

public void setHandler(CostHandler handler) {
this.handler = handler;
}



}

Read More

ajax文件上传

之前一直查找无刷新上传文件的方式,在所做的项目中有无刷新上传图片的插件,但作为一个封装好的插件,打开源码也是晦涩难懂。想来仅上传这部分的东西不会太多,就继续查找和实践,终于上传成功。下面以自己能理解的方式,记录下其操作过程。

1.表单,设置其属性”enctype=”multipart/form-data”,使用FormData对象的方式进行上传

表单示例
1
2
3
4
5
<form id="form_id" accept-charset="UTF-8" enctype="multipart/form-data">
<input type="file" name="file" />
<button onclick="uploadFile()">上传</button>

</form>

Read More