java中try catch finally的执行顺序
直接贴代码
package com.wasw100.test;
public class CatchTest {
public static void main(String[] args) {
System.out.println(test());
}
public static String test() {
int i = 0;
TestData td = new TestData();
try {
i=1;
td.setS("1");
System.out.println("try块执行 \ti:"+i+" s:"+td.getS());
Integer.parseInt("a");
return "正常返回\ti:"+i+" s:"+td.getS();
} catch (Exception e) {
i=2;
td.setS("2");
System.out.println("catch块执行\ti:"+i+" s:"+td.getS());
return "catch块返回\ti:"+i+" s:"+td.getS();
} finally {
i=3;
td.setS("3");
System.out.println("finally块执行\ti:"+i+" s:"+td.getS());
// return "finally块返回";
}
}
}
class TestData{
private String s;
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
}
执行结果:
try块执行 i:1 s:1
catch块执行 i:2 s:2
finally块执行 i:3 s:3
catch块返回 i:2 s:2
执行顺序很好理解,但是返回的i、s的值为什么是2,不是3?
一个很不错的解释:http://www.javaeye.com/topic/79092?page=2#284368
总结:
try或者catch执行后,如果有return语句,那么先把返回值copy到栈顶,例如上面的例子会把 “catch块返回\ti:”+i+” s:”+td.getS() 得到的字符串的引用copy到栈顶,也就是说return已经执行,但是还没返回(在MyEclipse的debug模式下可以看的很清楚) 然后执行finally,执行完finally,再把栈顶的值返回。如果返回的是一个对象的引用的话,那么将是finally执行后的值
因为字符串是一个在java中有特殊的对待,所以和普通对象有所不同,字符串是放到字符串常量池的,而换成一个普通对象作为返回值就能够看出来了。
java中的字符串可以看http://b0r0j0.blogbus.com/logs/8213193.html
–EOF–
TortoiseSVN的安装和简单使用
下载安装TortoiseSVN:http://cdnetworks-kr-2.dl.sourceforge.net/project/tortoisesvn/Application/1.6.5/TortoiseSVN-1.6.5.16974-win32-svn-1.6.5.msi
1.下载项目
新建一个目录,进入目录,在空白处右击,点击SVN Checkout…
第一个文本框(URL of repository)填写svn的地址,其余默认,如果还没有用户,首先就是输入用户名密码
2.清除原来的用户
想修改用户,首先就是清除原来的用户
右击空白处-》 TortoiseSVN-》settings
选择左侧的saved data, 点右侧界面Authentication data的clear按钮
新用户的创建将按第一个步骤就可以了
3.update,commit
都很简单了,都在对应的目录下点击右键就可以了
4.上传工程
右击工程->import
相关文章: 用MyEclipse和googlecode的svn控制自己的代码
–EOF–
mysql更改引擎 (InnoDB,MyISAM)
mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。
查看当前数据库的所支持的数据库引擎以及默认数据库引擎
show engines;
更改方式1:修改配置文件my.ini
我将my-small.ini另存为my.ini,在[mysqld]最后添加为上default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB
更改方式2:在建表的时候指定或者建完表修改
--建表的时候指定 create table mytbl( id int primary key, name varchar(50) )type=MyISAM; --建完表后修改 alter table mytbl2 type = InnoDB; --查看修改结果(mytest为表所在的database名字) show table status from mytest;
相关文章:绿色版MySQL的安装和使用
参考文章:Mysql支持事务的InnoDB
–EOF–
hsqldb时间使用总结
官方文档:http://hsqldb.org/doc/guide/guide.html
可以查看有关时间的函数(可以搜索datediff,马上就可以转到时间函数那块)
hsqldb中时间可以使用now、CURRENT_TIMESTAMP这样的函数表示,也可以使用字符串,类似'yyyy-MM-dd','yyyy-MM-dd HH:mm:ss.SSS'这样的字符串
例如建一张表,插入一条数据
create table user( id INTEGER primary key, birthday DATETIME default 'now' );
插入时间插入可以使用默认值now(无需填写)、或者sql语句中使用函数now(),curdate()之类的 、或者使用'yyyy-MM-dd','yyyy-MM-dd HH:mm:ss.SSS'这样的字符串。
insert into user(id) values(1); insert into user values(2,now()); insert into user values(3,'2009-12-20'); insert into user values(4,'2009-12-20 20:01:02'); insert into user values(5,'2009-12-20 20:01:02.123');
结果:
1 2009-12-20 23:17:06.211 2 2009-12-20 23:17:06.211 3 2009-12-20 00:00:00.0 4 2009-12-20 20:01:02.0 5 2009-12-20 20:01:02.123
当你向hsqldb中插入某个时间,就可以结合DateFormat、Calendar等类组合出字符串了
–EOF–
用Swing显示时间比实际的晚8小时解决方法
参考文章:http://blog.csdn.net/subchen/archive/2008/04/18/2303402.aspx
在main中调用:
System.setProperty(“user. timezone”, “GMT+8″);
不起作用
改为
TimeZone.setDefault(TimeZone.getTimeZone("ETC/GMT-8"));
时间显示正确
–EOF–
PL SQL Developer和精简版Oracle客户端安装
用自己的xp连接远程的oracke10g,单独安装个oracle太浪费了。
安装了精简版oracle居然成功了。
步骤:
1.下载oracle精简版:
From: http://x.gd2.xdowns.com:8080/088/oracle9i310.rar
To: C:\Documents and Settings\Administrator\桌面\oracle9i310.rar
Size: 12.2 MB (12,710,213 bytes)
Transferred: 12.2 MB (12,710,213 bytes)
安装后也只有33.4M
2 .安装(D:\Oracle)
3.配置,下面是一个配置文件的参考
打开D:\Oracle\ora90\network\ADMIN下的tnsnames.ora
ORCL_192.168.0.19 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.19)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
(SERVER = DEDICATED)
)
)
可能出现的问题:
无法连接远程服务器 报无法处理服务名 的提示
解决方法:
在Path环境变量中找到D:\Oracle\ora90\BIN\; 把位置放在前面,使用sql plus连接ORCL_192.168.0.19成功
在pl sql developer中也能成功
–EOF–
用java判断数据库某个表是否存在
ResultSet rs = conn.getMetaData().getTables(null, null, "carpark".toUpperCase(), null);
while(rs.next()){
System.out.println(rs.getObject(3).toString());
}
主要就是用到getTable方法
前两个参数没研究,直接用null就可以,感兴趣的可以去查查api
第三个参数是表名:null 和“%”都表示所有的表,其中是区分大小写的,必须是大写才可以
第四个参数:types – 要包括的表类型所组成的列表,必须取自从 getTableTypes() 返回的表类型列表;null 表示返回所有类
例如:new String[]{“TABLE”,”VIEW”}
只有在hsqldb中测试通过,其他数据库没有测试
–EOF–
用MyEclipse和googlecode 的svn控制自己的代码
因为经常在公司和自己电脑上写程序,可以尝试用googlecode控制一下自己的代码
具体可以参考网上的这篇博文,很详细
http://blog.sina.com.cn/s/blog_5d31611a0100fkml.html
总结一下 ,希望对打算使用googlecode的人有所帮助(假设MyEclipse的svn和gmail都有):
1.打开http://code.google.com/hosting/ ,点击下面那个Create a new project的超级链接
创建成功后访问自己的项目主页:http://code.google.com/p/项目名称,例:http://code.google.com/p/usc/(上文那个博主的一个项目)
2. 点击右侧的星星,点亮后可以获取svn的密码(setting),用户名就是你的gmail地址,这样svn服务器就建立好了
3. MyEclipse切换到svn模式下(右上角,可以选java、debug之类的那个,现在选svn)
右击-》new-》Repository Location,输入https://项目名称.googlecode.com/svn/
注意是googlecode.com 不是google.com
用户名为你的Gmail邮箱全名(包括@gmail.com),密码为刚刚在创建项目时候Setting里面的密码(不是你的Gmail 邮箱密码)
4.新建一个工程,右击工程名,team-》Share Project……就可以把你的工程上传到svn上了
补充:第二步中可能获取不了svn密码,页面不返回,可以换下浏览器(opera有时不行,换下ie,ff就好了),实在不行,就用代理登录,然后获取密码,保存好,以便以后使用
–EOF–
MyEclipse中Resin因为out of memory自动关闭的解决
1.方法1
Window-》preferences-》java-》installed JREs
选中您的虚拟机,点edit
在Default VM Aguments中加如下参数:
-Xms128M -Xmx512M
2.方法二
在配置resin路径的时候,点jdk,在Java VM arguments中填写:
-Xms512m -Xmx1024m
建议使用第二种方法
原因:MyEclipse默认分给Resin的内存太小造成的,这样就可以解决了。
–EOF–
把sql脚本导入powerdesigner
前几天研究wordpress的数据库设计,直接看sql导出的sql语句不直观,于是使用了powerdesigner的导入sql脚本功能,这样分析数据库的设计就更直观了。
1.安装wordpress后,程序就自动创建好了表(这个功能很人性化),我们要做的就是把创建表的sql语句导出,使用mysqldump命令导出
D:\>mysqldump -uroot -proot wpblog > wpblog.sql D:\>
那么在D盘就生成了wordpress的数据库脚本,然后删掉注释和插入数据的语句(注释和插入数据挨着,所以删除很简单),不删除一些数据,powerdesigner可能会没响应
2.打开powerdesigner,选择File –> Reverse Engineer –> Database……
Model name随便写,我填的是wpblog,DBMS选MySQL 5.0
然后确定
在Selection选项卡中选:Using scripts files:添加刚才的导出的sql脚本(wpblog.sql)
Options选项卡中的File Encoding 选择:UTF8+QuickDetect
然后确定,一切OK
看来用powerdesigner设计数据库,导出SQL(右击空白处–>Properties–>Preview),用sql脚本看数据库的设计真的很方便。
–EOF–