BlogJava

在网上,看到一个问题 什么是全局变量?说实话,这个问题我想了一会儿。觉得有二义性,可能大部分人会说,只要是在堆栈外面定义的 就是全局。 我觉得,全局这个概念,我想反问提问者,是线程全局?进程全局? 好吧,我今天想说说后者的。其实,在写hook的时候,大家都知道,进程需要共享dll中的全局变量。没错,就是它,我觉得被进程共享的 才叫全局。

在应用程序开发过程中,使用的最多的数据类型就是字符串 。在Java语言平台中也是如此。为此掌握字符串的处理技巧,无疑是一位数据库管理员必须要掌握的技能。笔者这里就给大家介绍如何利用字符接来解决一些实际的问题。一、 字符接概述。

在编写应用程序的时候,我们往往需要将多个字符接起来,来完成特定的功能。如现在有两个字符串变量,分别为名字(变量名为name)和年龄(变量名为age)。现在需要在屏幕上输出我的名字是某某,年龄多少这个字符串。这个语句该如何写呢?可以写为我的名字是+name+,年龄为+age。也就是说,在Java语言中,可以通过+号将多个字符串(包括变量)连接成一个字符串。在屏幕上打印出来或者将其赋值给一个新的字符串变量。在进行这个字符接的时候,大家需要注意一点。也许有些程序员以前学过其他的开发语言,如SQL语言等等。不同的语言采用的字符接字符是不同的。如在SQL中采用的就是符号。有时候,在开发应用程序的时候,开发人员可能会混淆。如在利用JAVA语言开发应用程序,在代码中需要加入SQL语句从数据库中查询数据。此时就有可能在JAVA代码中和SQL代码中都要用到字符接的情况(SQL代码中要将多个字段的内容连接为一个字段)。由于两个代码所采用的连接符号不同,所以可能会搞错。

二、 利用字符接解决分行问题。

在JAVA开发平台中,可以利用+号将多个字符串合并为一个字符串。不过在实际工作中,这个合并功能往往还可以帮助系统开发人员解决一些棘手的问题。如根据语法,JAVA代码中一句相连的字符串不能够分开在两行中书写。这是什么意思呢?如现在有一个字串比较长,为我的名字叫萝卜,今年29岁,在宁波工作。如果将这个字符串写在同一行的话,那么这一行会很长,从而影响代码的阅读。但是,笔者希望其在屏幕上输出或者保存在文件中时,则是在同一行。在这种情况下,该如何处理呢?

确实,这是应用程序开发人员在程序开发过程中经常遇到的一个问题。因为在书写代码时,一个好的程序开发人员应该兼顾到其代码的美观,这有助于程序开发人员阅读代码。毕竟有时候需要多个程序开发人员一同完成某个任务。而不能够只完成某个特定的功能就可以了。此时,为了代码的美观与更好的阅读性,有经验的程序开发人员往往会利用这个+号连接字符来处理这个分行的问题。

由于对于长的字符串,JAVA代码不能够分为两行来写。否则的话,系统就会提示语法错误。遇到这种情况时,为了提高阅读性,我们往往要求程序开发人员把他们分为两行,同时利用加号将他们连接起来。如下所示:

我的名字叫萝卜,今年29岁,+

在宁波工作

也就是说,应用程序开发人员可以使用+号将两个字符接起来,然后在+号处换行,从而将两个字符接起来。此时,JAVA编译器会认为这是的,允许程序开发人员采用这个技巧来对字符串进行合理的分行。所以说,利用字符接可以有效的解决分行问题。

三、 利用字符接来实现数据类型的自动转换。

在各种开发语言中,都有各种各样的数据类型。有时候为了满足特定的需要,要对他们进行数据类型的转换。如需要将数字类型的数据转换为字符串类型的数据;再如将某个字符串2432转换为数值类型的数据。在JAVA语言的开发平台中,数据类型的转换有两种方式,分别为隐式转换与显示转换。一般情况下,从低级数据类型向高级类型的转换,系统会自动进行转换,而不需要程序员进行任何的手工操作或者指定。这个从低级数据类型向高级数据类型的转换,就叫做隐式转换。在对数据类型进行转换的时候,程序开发人员需要遵守严格的规则,否则的话容易出现错误。如从低精度数据类型向高精度数据类型转换的时候,则永远不会发生溢出,通常情况下都会成功。而如果把高精度数据类型转换为低精度数据类型的话,则就会发生溢出错误,从而导致部分信息丢失,甚至无法正常转换。

不过在JAVA开发平台中,除了以上这两种转换方式外,还有一种数据类型的转换方法。就是如果某个字符串和某个变量一起(这个变量可能是数值型的数据或者是日期型的数据)利用+号连接起来时,系统会自动对这个变量进行转换,会将其转换为字符串数据类型,然后再与原先的字符接起来。

也就是说,字符串也可同其他基本数据类型进行连接。如果将字符串同这些数据类型进行连接时(如数值型的数据),会将这些数据直接转换成字符串。如那个例子中我的名字是+name+,年龄为+age这个字符串,age这个变量为数值型的数据,而其他为字符串的数据。现在程序开发人员就可以利用这个+号将不同数据类型的字符接起来。不过最后的数据类型都会字符串的数据类型。即系统会先将变量age转换为字符型数据,然后再跟其他字符串数据类型进行连接。那么在后台中,这到底是如何实现呢?如果在利用+号来进行连接的时候,如果某个变量不是字符串的数据类型,则系统回自动调用一个toSring方法,将非字符串的数据类型转换成字符串的数据类型,再进行合并。由于这个过程是系统自动完成的,所以程序开发人员需要特别的注意。一般来说,只要将+号运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式。所以程序开发人员应谨慎地将其他数据类型与字符串相连,以免得到意想不到的结果。如将这个利用+号连接起来的内容,如果其中有个操作数是字符型数据的话,那么将其赋值给数值型的变量时,就会导致莫名其妙的问题。这种问题很可能存在。因为这个+号,除了可以连接字符串,还可以用来对数值型的数据进行四则运法运算。所以,在进行四则运法运算时,要确保各个操作数都是数值型的。否则的话,这个后果就可想而知了。

另外需要再提一句的是,如果在进行加法运算时,需要注意其数据类型的隐式转换。如现在有三个操作数,其中两个操作数其小数点保留两位;另外一个操作数其小数点保留为1位。而最后赋值给一个变量,其保留小数位数3位。这就是一个涉及到不同精度的数据类型的数值型数据转换问题。那么最终的结果是什么呢?笔者这里卖个关,大家若想知道结果的话,可以回去编个程序测试一下。有时候,笔者告诉你们答案,读者并不一定记得住。所以,笔者在这里就点倒为止。

总之一句话,+号这个连接符号,不仅可以连接各个字符串,而且还用来完成分行与数据类型的隐式转换。为此笔者,各个程序开发人员需要注意这方面细节,一定能够获得不少的收获。

posted @2012-08-09 11:43chen11-1 阅读(127)收藏

对于J2EE,我们知道当开发应用时,在架构设计阶段的决定将对应用的性能和可扩展性产生深远的影响。现在当开发一个应用项目时,我们越来越多地注意到了性能和可扩展性的问题。应用性能的问题比应用功能的不丰富问题往往更为严重,前者会影响到所有用户,而后者只会影响到碰巧使用该功能的那些用户。

作为应用系统的负责人,一直被要求要少花钱多办事—-用更少的硬件,更少的网络带宽,以及更短的时间完成更多的任务。J2EE通过提供组件方式和通用的中间件服务是目前首选的最优方式。而要能够构建一个具有高性能和可扩展性的J2EE应用,需要遵循一些基本的架构策略。

缓存(Caching)

简单地说,缓存中存放着频繁访问的数据,在应用的整个生命周期中,这些数据存放在持久性存储器或存放在内存中。在实际中,典型的现象是在分布式系统中每个JVM中有一个缓存的实例或者在多个JVM中有一个缓存的实例。

缓存数据是通过避免访问持久性存储器来提高性能的,否则会导致过多的磁盘访问和过于频繁网络数据传输。

复制

复制是通过在多台物理机器上创建指定应用服务的多个拷贝来获得整体更大吞吐效率。理论上看,如果一个服务被复制成两个服务,那么系统将可处理两倍的请求。复制是通过单一服务的多个实例的方式从而减少每个服务的负载来提高性能的。

并行处理

并行处理将一个任务分解为更为简单的子任务,并能够同时在不同的线程中执行。

并行处理是通过利用J2EE层执行模式的多线程和多CPU特点来提高性能。与使用一个线程或CPU处理任务相比,以并行方式处理多个子任务可以使操作系统在多个线程或处理器中进行分配这些子任务。

异步处理

应用功能通常被设计为同步或串行方式。异步处理只处理那些非常重要的任务部分,然后将控制立即返回给调用者,其他任务部分将在稍后执行。

异步处理是通过缩短那些在将控制返回给用户之前必须处理的时间来提高性能的。虽然都做同样多的事情,但是用户不必等到整个过程完成就可以继续发出请求了。

资源池

资源池技术使用的是一套准备好的资源。与在请求和资源之间维持1:1的关系的不同,这些资源可被所有请求所共享。资源池的使用是有条件的,需要衡量下面两种方式的代价:

A、维持一套可被所有请求共享资源的代价

B、为每个请求都重新创建一个资源的代价

当前者小于后者时,使用资源池才是有效率的。

希望通过本文介绍的是J2EE中的五个核心策略,对你有帮助。posted @2012-08-09 11:42chen11-1 阅读(128)收藏