2012年11月9日

     摘要: PL/SQL Developer version 9.0.6.1665 无限用户注册码激活码 1 Product Code: 46jw8l8ymfmp2twwbuur8j9gv978m2q2du 2 serial Number:307254 3 password:xs374ca 4 License Numbe...  阅读全文

posted @ 2013-10-15 09:02 志成中国 阅读(4007) | 评论 (1)编辑 收藏

     摘要:  认识ExtJSextjs是使用javascript、css和html等技术实现的主要用于创建用户界面,且与后台技术无关的前端ajax框架。extjs来源于yui,开发理念来源于传统的桌面软件开发。1.下载extjs,解压,得到目录结构o builds:是extjs压缩后的代码,体积更小,加载更快o docs :extjs的文档o examples...  阅读全文

posted @ 2013-01-05 17:04 志成中国 阅读(1178) | 评论 (2)编辑 收藏

     摘要: 不同概率的抽奖今天为大家写个小程序。工作中有遇到一些抽奖的活动,但是你懂得,抽奖物品的概率肯定不是一样,你会发现好的东西很难抽到,经常抽到一些垃圾的东西,嘿嘿,这就是本文要说的,我们要控制抽奖物品的概率。还有顺便说一句,网上这种小程序几乎没有,很多都是等概率的抽奖balabala…需求很简单,为了更加形象,这里我们列一个表格来显示我们抽奖的物品和对应的概率(没有边框,大家凑合着看看吧,...  阅读全文

posted @ 2012-11-09 16:03 志成中国 阅读(466) | 评论 (2)编辑 收藏

Java中static、this、super、final用法

亲:本文具体讲解了Java中static的用法,具体内容有static的静态方法、静态变量、静态类。(⊙o⊙),你们觉得如何?
一、static
请先看下面这段程序:
public class Hello{
public static void main(String[] args){ //(1)
System.out.println("Hello,world!"); //(2)
}
}
 
看过这段程序,对于大多数学过Java 的从来说,都不陌生。即使没有学过Java,而学过其它的高级语言,例如C,那你也应该能看懂这段代码的意思。它只是简单的输出“Hello,world”,一点别的用处都没有,然而,它却展示了static关键字的主要用法。
在1处,我们定义了一个静态的方法名为main,这就意味着告诉Java编译器,我这个方法不需要创建一个此类的对象即可使用。你还得你是怎么运行这个程序吗?一般,我们都是在命令行下,打入如下的命令(加下划线为手动输入):
 
javac Hello.java
java Hello
Hello,world!
 
这就是你运行的过程,第一行用来编译Hello.java这个文件,执行完后,如果你查看当前,会发现多了一个Hello.class文件,那就是第一行产生的Java二进制字节码。第二行就是执行一个Java程序的最普遍做法。执行结果如你所料。在2中,你可能会想,为什么要这样才能输出。好,我们来分解一下这条语句。(如果没有安装Java文档,请到Sun的官方网站浏览J2SE API)首先,System是位于java.lang包中的一个核心类,如果你查看它的定义,你会发现有这样一行:public static final PrintStream out;接着在进一步,点击PrintStream这个超链接,在METHOD页面,你会看到大量定义的方法,查找println,会有这样一行:
 
public void println(String x)
 
好了,现在你应该明白为什么我们要那样调用了,out是System的一个静态变量,所以可以直接使用,而out所属的类有一个println方法。
静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。如下所示:
class Simple{
static void go(){
System.out.println("Go...");
}
}
public class Cal{
public static void main(String[] args){
Simple.go();
}
}
 
调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。
静态变量
静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了。看下面这段代码:
 
class Value{
static int c=0;
static void inc(){
c++;
}
}
class Count{
public static void prt(String s){
System.out.println(s);
}
public static void main(String[] args){
Value v1,v2;
v1=new Value();
v2=new Value();
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1.inc();
prt("v1.c="+v1.c+" v2.c="+v2.c);
}
}
 
结果如下:
 
v1.c=0 v2.c=0
v1.c=1 v2.c=1
 
由此可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。值得探讨的是静态变量的初始化问题。我们修改上面的程序:
 
class Value{
static int c=0;
Value(){
c=15;
}
Value(int i){
c=i;
}
static void inc(){
c++;
}
}
class Count{
public static void prt(String s){
System.out.println(s);
}
Value v=new Value(10);
static Value v1,v2;
static{
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1=new Value(27);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v2=new Value(15);
prt("v1.c="+v1.c+" v2.c="+v2.c);
}
public static void main(String[] args){
Count ct=new Count();
prt("ct.c="+ct.v.c);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1.inc();
prt("v1.c="+v1.c+" v2.c="+v2.c);
prt("ct.c="+ct.v.c);
}
}
 
运行结果如下:
v1.c=0 v2.c=0
v1.c=27 v2.c=27
v1.c=15 v2.c=15
ct.c=10
v1.c=10 v2.c=10
v1.c=11 v2.c=11
ct.c=11
 
这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。非静态变量不是本文的主题,在此不做详细讨论,请参考Think in Java中的讲解。
静态类
通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。如下代码所示:
 
public class StaticCls{
public static void main(String[] args){
OuterCls.InnerCls oi=new OuterCls.InnerCls();
}
}
class OuterCls{
public static class InnerCls{
InnerCls(){
System.out.println("InnerCls");
}
}
}
 
输出结果会如你所料。

posted @ 2012-11-09 16:01 志成中国 阅读(181) | 评论 (0)编辑 收藏

java try catch 谁先执行问题,你能说明白吗
问题1 
 try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 
也许你的答案是在return之前,但往更细地说,我的答案是在return中间执行,请看下面程序代码的运行结果: 
public  class Test {
public static void main(String[] args) {
System.out.println(new Test().test());;
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}
}
---------执行结果是什么  为什么 ---------
问题2
下面的程序代码输出的结果是多少?
public class  smallT
{
public static void  main(String args[])
{
smallT t  = new  smallT();
int  b  =  t.get();
System.out.println(b);
}
public int  get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
}
       2012-6-19 16:23 满意回答 输出是1和2,
20705080 回答的很好了,只有几点补充下,首先代码例子用的是基本数据类型,他们进行传值就是传值,其次finally的用途是用来回收系统资源的,没有catch也是正常的使用(不catch,把异常throw回调用方法),再有finally和return是有关系的,而且经常有人提,就是finally的代码在return前运行,这就是我为什么先说你的例子是基本数据类型的原因,因为return x(1);被放入stack中,stack是后进先出的,等待finally运行完再运行,但他已经被赋值了就是1,如果你把代码改成这样试试看
public Something getSome(){
         Something s = new Something("Dog");
         try{
              return s;
        }finally{
             s.name ="cat";
         }}
加个类
class Something{
        public String name ;
        something(String name){
               this.name = name;}
}
因为相对于基本数据类型,引用传值传的值是个地址,return s(地址);放入stack中,又被取出时地址不变但地址那边的数据已经是cat了赞同0| 评论 
第1个
有finally的话
try 里的return    是先保存x的结果   等待finally走完   虽然x变2了  但是return的值还是1  
因为到return的时候已经把x的值取出来  等待finally走完  不管x怎么变  之前的1是不会变的
第2个
return     等待finally走完   但是finally里return了   所以返回的是2
    赞同0| 评论                2012-6-19 14:54 畅捷通丶稀饭 | 五级 
第一个是1,因为 x=1 try里面返回的是1 后面又执行了finally 后。X 是2 但是没有返回。所以 还是1
第二个是2,因为finally最后执行,返回的是2. 赞同0| 评论                2012-6-19 14:56 java2000_net | 
finally中的语句是一定要执行的,这点是肯定的。finally中的语句执行在try之后。通常try是要和catch(不捕获异常try就没意义了)。一般的用法是:
try{
1想要执行的代码
}catch(Exception e){
 2异常处理
}finally{
3最终执行的代码
}
1中代码没错执行的顺序就是1->3
1中代码有错执行的顺序是2->3
finally中的代码和return是没关系的,你可以把return写在任何地方。它只和try、catch有关。假如你把问题一种finally的代码写成:
finally{
return ++x;
}那么结果就是2了。
finally一定会执行,且在try或catch之后执行。
不知道这么说能明白吗~~~
不明白可以问,我再回答~~~ 赞同0| 评论                2012-6-19 15:22 黑夜也明亮 | 四级 
问题1:答案 1。因为return的值在执行finally之前已经确定下来了。所以即使在finally里怎么该值它始终是1,除非在finally里在return ++x重新修改返回的值。return x它不会直接返回值回去而是等程序执行完finaly后才返回。
你因该有听过有finaly的程序一定会执行finaly代码吧。
问题2:答案 2。根据一的结论二也是成立的。 赞同0| 评论                2012-6-19 16:41 iedgtg | 五级 
第一个问题:输出的是1,因为finally总是在try-catch执行之后执行,而且,一定是在return之前执行。第一个问题里应该是在return x;之前执行,但是,此时return的值已经固定了,就是说finally再执行也改变不了return的值,当然x的值成了2,但是return的值已经固定为1了。
第二个问题:输出的是2,因为finally一定是在return之前执行,本来程序return的值是1,即将要return了,但是有finally,所以finally先执行,所以return的值是2。
但是第二种情况不建议使用,就是说finally里不建议用return,因为这样finally就没有正常的执行完毕,这是不推荐的。 赞同0| 评论         

posted @ 2012-11-09 16:00 志成中国 阅读(184) | 评论 (0)编辑 收藏

GET与Post提交问题: ---------------------------------------------- 运行login.jsp点登陆时调用两次toLoginAction /WEB-INF/jsp/main/main.jsp /WEB-INF/jsp/user/login_form.jsp 所以取得结果在toLoginAction的execute里运行两次 String pass = iuserDao.findPassWordByEmail(email); System.out.println(email); System.out.println(pass); 也输出两次:条件不同,输出内容不同 当login_form.jsp里的表单 使用post方式提交时,控制台输出如下: root@root.com root null null 当login_form.jsp里的表单 使用get方式提交时,控制台输出如下: root@root.com root root@root.com root 解决方案一:加struts的token拦截器,只让表单提交一次。 解决方案二:转一个action,就是把他自动提交的那个请求通过action的转发取消掉。 问题: 为什么get和post的默认请求后取到的值会不同? 为什么在window的电脑里没有问题? ---------------------------------------------- 在window下,正常输出如下: root@root.com root ---------------------------------------------- 缓存问题(服务器缓存或者浏览器缓存或者浏览器bug),导致提交两次,与操作系统、程序、js提交是没关系! get:通过URL路传参,当页面再次提交,还会把URL中的值传递给action,所有属性再次被填充就不出现null值 post:URL路径没有信息,当再次提交,就出现属性就出现null值 你在学生机器上,把在tomcat中work目录删除、在把\webapps 中项目删除,把web容器缓存清空下! 或者把学生机器重新启动下,把服务器缓存彻底清除下! ---------------------------------------------- ---------------------------------------------- 图片:struts-user.xml配置如下: ---------------------------------------------- ToLoginAction类如下 : ---------------------------------------------- 进入主页面的URL如: ---------------------------------------------- 登陆的URL如: ---------------------------------------------- 登陆界面: ---------------------------------------------- windwo系统下提交输出如图: ---------------------------------------------- Linux系统下,采用get提交时 ---------------------------------------------- Linux系统下,采用post提交时 ---------------------------------------------- 最后在学生电脑上又试了几次,get方式提交正常和window系统下一样了,post方式 提交还是没改变,不知道为什么。 ---------------------------------------------- 邮件内容如下: 发件人:贾东坡 发送时间: 2012-11-08 09:37 收件人:zhaozq 主题: dang_get_post 赵老师: 您好。学生的程序有点问题,想听一下您的理解。问题描述如下: 进入当当网的main页面,点登陆输入用户名,密码后,点登陆会请求ToLoginAction, 进入main页面。在ToLoginAction里打印了email和pass,登陆之后输出结果在linux 系统下与window下不同。window系统下正常输出,而在linux系统下有输出两次,并且 login_form.jsp时表单提交方法为get时,两次都能正常输出;当提交方式为post里,第 二次为null。例如: 在window系统下: 我们在输入框,输入用户名:root@qq.com 密码root,会输出如下: root@qq.com root 在linux系统下 当login_form.jsp的表单提交为get时,输出root@qq.comroot时, 输出如下: root@qq.com root root@qq.com root 当login_form.jsp的表单提交为post时,输入root@qq.comroot时, 输出如下: root@qq.com root null null 原因分析:首先想的是submit按钮在使用js时,有自动提交功能,可是也没使用js啊, 还有在linux系统有自己的form机制。还有一个是程序有问题。 解决方案:我给这个action加了个token表单拦截器就可以。说明是表单提交两次。 问题是:1.为什么表单会提交两次,而在window下只提交一个。 2.为什么在linux下用get和post提交方式第二次取到的值会不一样。 3. form提交时在linux系统下与window有什么不一样。 附件内是程序源码,谢谢您的宝贵时间。 祝: 身体健康,工作顺利! 贾东坡北方区 北方基地项目部 项目经理 E-mail: jiadp@tarena.com.cn Address: 北京市昌平区北七家镇宏富创业园科技园综合楼3层 Mobile: 18301442726 Fax: 86-10-82823773 Website: www.tarena.com.cn ---------------------------------------------- 发件人:zhaozq 发送时间: 2012-11-08 11:21 收件人:jiadp 主题: 回复: dang_get_post 贾老师: 您好! 你们班的学生机器是不是采用的是云服务器? zhaozq ---------------------------------------------- 赵老师: 您好。我们班的机器都是普通主机,linux系统的,不是用核的,也不是云服务器。 谢谢您的宝贵时间。 ---------------------------------------------- 贾老师: 您好! 缓存问题(服务器缓存或者浏览器缓存或者浏览器bug),导致提交两次,与操作系统、程序、js提交是没关系! get:通过URL路传参,当页面再次提交,还会把URL中的值传递给action,所有属性再次被填充就不出现null值 post:URL路径没有信息,当再次提交,就出现属性就出现null值 你在学生机器上,把在tomcat中work目录删除、在把\webapps 中项目删除,把web容器缓存清空下! 或者把学生机器重新启动下,把服务器缓存彻底清除下! zhaozq ---------------------------------------------- 赵老师: 您好。您的分析很有道理,可是我用另外几台电脑,试了也不行,所以不该是缓存问题。 浏览器bug,这个还没测试,因为所有学生的电脑都是同样的系统,同样的浏览器,都是这个 情况。要是缓存问题,怎么可能用token拦截了,拦截下的是缓存的,还是我自己提交的,以及 在哪地方缓存。还有个问题就是,在web学习的时候也有表单提交,为什么就没有这种情况,是 不是和struts有关。 谢谢,您的宝贵时间。 ---------------------------------------------- 赵老师回复: 您好。您的分析很有道理,可是我用另外几台电脑,试了也不行,所以不该是缓存问题。 浏览器bug,这个还没测试,因为所有学生的电脑都是同样的系统,同样的浏览器,都是这个 情况。要是缓存问题,怎么可能用token拦截了,拦截下的是缓存的,还是我自己提交的,以及 token不是拦截了,而是令牌值相同不在提交,不是在window 系统提交没问题吗?那就与程序无关了,那就是系统 缓存或者浏览器缓存中,正常当浏览器关闭,缓存中数据就清除,但是如果机房比较热、服务器处于长期运营等情况都会导致缓存信息无法清空,而影响程序执行 在哪地方缓存。还有个问题就是,在web学习的时候也有表单提交,为什么就没有这种情况,是 缓存 不是和struts有关。 和struts没有关系,而是与计算机硬件设备有关,这个影响具体什么时候会造成,这个都不能预计,这种情况一般比较少见。 祝: 身体健康,工作顺利! ---------------------------------------------- 赵老师: 您好。谢谢您的详细解答,真是受益匪浅,这个问题可以划上句话了。同学们都很喜欢听 您讲课,风趣幽默、也易于接受,期待您更多的讲解。 谢谢,您的精神讲解。您辛苦了。 祝: 身体健康,工作顺利! ---------------------------------------------- ---------------------------------------------- Debug linux系统下截图如下: ---------------------------------------------- get方式时:正常情况下:输出和win一样了。 root@root.com root ---------------------------------------------- post方式时:输出如下: root@root.com root null null -------------------------------------------------------------------------------------------

posted @ 2012-11-09 15:49 志成中国 阅读(1186) | 评论 (0)编辑 收藏


posts - 9, comments - 5, trackbacks - 0, articles - 0

Copyright © 志成中国