您的位置:首页 > 编程语言 > Java开发

JAVA

2015-06-06 10:26 211 查看
Java的基本符号(token)

Java的单词符号有五种:关键字、标识符、常量、分隔符和操作符。

Java的字符集 

Java 采用一种称为unicode的字符集,该字符集合是一种新的编码标准,与常见的ASCII码的区别在于: 

unicode使用16位二进制而不是8位来表示一个字符。 

unicode字符集中增加了许多非拉丁语字符。

标识符 

Java标识符必须以字母,数字,美元符号"$",下划线"_"组成,标识符第一个字符不可用数字。

Java语言对字母的大小写是敏感的,在语法中严格区分大小写。

关键字 

关键字是为特定目的而保留的保留字,程序员不要将关键字作为自己的标识符。 Java的关键字有:

abstract boolean break byte case catch char class continue do double else extends false 

find finally float for implements import instanceof int interface long native new null 

package private public return short static super switch synchronized this throw true try void while

常量 

常量可分为整型常量,浮点数常量,字符常量,字符串常量和布尔常量。

整型常量:可分为int型和long型两种,缺省为int型,long型数值后加L。 整型常量可用10、8和16进制表示。

如:123(十进制) 052(八进制) 0x3c(十六进制) 

浮点数常量:有单精度和双精度之分,缺省为双精度,单精度在数值后加f。另外,浮点数常量也可用普通计数法和科学计数法来表示。

如:1.23f 1.1E-2 

字符常量:用‘ ‘括起来的一个字符。如‘a‘,‘H‘。

使用16位的unicode字符集。

Java 语言可使用转义字符‘“‘来标记特殊字符。如‘“n‘表示换行符。 

字符串常量用" "包括,如"Hello World"。 

布尔常量只有两个值,true和false。

分隔符 

分隔符起分隔单词符号的作用。包括分号";"、花括号"{}"和空白符号。

Java的注释 

Java的注释有三种形式:

单行注释 

如://Comment on one line 

多行注释 

如:/* Comment on one 

    or more lines */ 

文档注释 

如:/** Document 

    Comment */

Java的数据类型和变量

Java的基本数据类型 

Java的基本数据类型有8种,见下表: 
数据类型 类别 宽度(位) 取值范围 
boolean 逻辑型 1 true/false 
char 文字型 16 
byte 整数类型 8 -27 ~ 27-1 
short 整数类型 16 -215 ~ 215-1 
int 整数类型 32 -231 ~ 231-1 
long 整数类型 64 -263 ~ 263-1 
float 浮点型 32 
double 浮点型 64

Java的变量 

Java的变量在使用前必须声明。如 int radios, color;

Java为所有基本数据类型的变量作了预定义(预设置的值)。如 

类型名 boolean char byte short int long float double 

预置值 false ‘“u0000‘ (byte)0 (short)0 0 0L 0.0f 0.0

数据类型的转换 

Java是一种强类型的语言,在赋值和参数传递时,都要求类型的匹配。类型转换有三种情况:自动转换、强制转换和使用类的方法转换。

自动转换:往往低精度类型到高精度类型能自动转换。

如: byte b1=10, b2=20;

int b3=b1+b2; 

强制转换:高精度类型到低精度类型必须强制转换。这时数据可能会丢失部分信息。

如:char key=(char)(12+55) //变量key被赋值为unicode值为67的字符‘c‘ 

方法转换:如

String str = "123"; 

int a = Integer.parseInt(str); 

使用Integer类的方法parseInt将String转换为对应的整数。 

Java编程的习惯约定

为了提高程序的可读性,Sun公司推荐在Java编程时使用以下的习惯约定:

类名(classes):有一个或若干个名词组成,开头大写,名词间的区分也用大写,其他小写。

如:class AccountBook 

class ComplexVariable

接口(Interfaces):规则同类名。

如:Interface Account

方法(methods): 由一个或多个动词组成,开头小写,动词间区分用大写,其他小写。

如:balanceAccount()

变量:小写字母开头,单词间用大写字母分隔 

如:currentCustomer

常量:所有字母大写,单词间用下划线区分 

如:MAXIMUM_SIZE

Java的操作符

根据操作对象的个数操作符可分为一元、二元或三元操作符。根据操作符的功能,又可分为算术、逻辑、关系等操作符。

算术操作符

一元: + - ++ -- 

二元: + - * / % 

值得注意的是 ++ 和-- 操作符,
如:int a,x=1,y=5; 
a = ++x;b=y++;
此时a的值为2(先加1,后赋值),b的值为5(先赋值,后加1)。

二元操作符两侧的操作对象数据类型不先自动进行类型转换,再进行操作。

赋值操作符与复合赋值操作符 

可将 变量 = 变量 op 表达式 

写成 变量 op = 表达式 

如:x+=20 与 x=x+20 结果一致,但更简洁。

注意:= 与 = = 的不同。

位操作符和移位操作符

位操作符 

&(按位与) |(按位或) ^(按位异或) 

移位操作符 

E<<n 左移n位,空位补0,相当于E*2 

E>>n 右移n位,空位用原最高位的位值补足,相当于E/2 

E>>>n 右移n位,空位补0

关系操作符 

关系操作符共六个: 

>(大于) >=(大于等于) <(小于)<=(小于等于) !=(不等于) = =(相等)

关系操作符的结果为boolean型数据(true或false)。

注:= = 操作符只有在比较双方均完全一致时,其值为true,如比较的是两个对象,即使两个对象的内容相同,结果也为false,

只有这两个对象为同一对象时才为true。

逻辑操作符 

逻辑操作符的操作对象和结果均为boolean型,共六个:

!(逻辑非) && (逻辑与) ||(逻辑或)

^(逻辑并或) & (逻辑与) | (逻辑或)

按位与‘&‘也可作为逻辑与使用,但未作优化,而‘&&‘操作符是经过优化的。对‘|‘操作符也类似。

其他操作符

条件操作符 E1?E2:E3 

表达式E1若成立,执行表达式E2,否则执行E3。 

逗号操作符 

","可用于分隔语句。 

如 int x,y; 

for (x=0,y=0;x<10;x++) {...};

操作符的优先级和结合规则 

优先级: 

一元 〉算术 〉移位 〉关系 〉按位 〉逻辑 〉三元 〉(复合)赋值 〉逗号

结合规则: 

除一元、三元和赋值操作符是自右至左结合外,其他均自左至右结合。

语句的分类

Java语句按是否改变运行的状态可分为执行语句(如表达式语句)和非执行语句(如声明语句)。任何语句的末尾都以“;”结束。

执行语句按其组成可分三类:

空语句 

只有一个语句结束符“;” ,无任何内容。 

基本语句(单语句) 

独立的、完整的不能再分割为更小的可执行单元。 

复合语句(块语句) 

包含在{ }内的一条或若干条语句。 

Java的基本语句的结构可分为4类:

(1)顺序结构语句 (2)分支语句 (3)循环语句 (4)例外处理语句 

后三种语句又称为流控制语句,我们将主要介绍分支语句和循环语句,而例外处理语句包括try、catch、finally以及throw语句。

这些语句是Java所特有的。我们将在后面作专门的介绍。

分支语句

分支语句包括if-else, break, switch, return等语句。分支语句提供了一种控制机制,使得程序可以跳过一些语句,转去执行特定的语句。

条件语句 if-else.

if-else语句根据判定条件的真假来执行两种操作中的一种,其格式为:

  if (boolean-expression)
  statement1;
  else
  statement2;

其中,要注意的有:

布尔表达式boolean-expression是任意一个返回布尔型数据的表达式(这比C、C++的限制要严格)。 

每个单一的语句后都必须有分号。 
语句statement1, statement2可以是复合语句,这时要用花括号{}。{}外面不加分号。 

else子句是任选的。 

若布尔表达式的值为true,则程序执行statement1,否则执行statement2。 

if-else语句的一种特殊形式为: 

if (expression1){

  statement1

  } else if (expression2){

  statement2

  }……

  }else if (expressionN){

  statementN

  }

else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对。可以通过使用花括号{}来改变配对关系。 

例3.1: 比较两个数的大小,并按从小到大的次序输出。

public class CompareTwo{

public static void main (String args[]){

double d1=23.4;

double d2=35.1;

if (d2>=d1)

System.out.println(d2+">="+d1);

else

System.out.println(d1+">="+d2);

}

}

例3.2:判断某一年是否为闰年。

闰年的条件是符合下面二者之一: ①能被4整除,但不能被100整除; ②能被400整除。

public class LeapYear{

public static void main (String args[]){

int year=1989;   //method1

if ((year%4==0 && year%100!=0) || (year%400==0))

System.out.println(year+"is a leap year.");

else

System.out.println(year+"is not a leap year.");

year=2000;   //method2

boolean leap;

if (year%4 != 0)

leap=false;

else if (year%100 != 0)

leap=true;

else if (year%400 != 0)

leap=false;

else

leap=true;

if(leap==true)

System.out.println(year+" is a leap year.");

else

System.out.println(year+"is not a leap year.");

}

}

该例中,方法1用一个逻辑表达式包含了所有的闰年条件,方法2使用了if-else语句的特殊形式。

多分支语句switch

switch语句是一种多分支选择语句,它可根据switch中表达式的值,来执行多个操作中的一个,它的一般格式如下:

switch (expression){

  case value1: statement1;

          break;

  case value2: statement2;

          break;

  …………

  case valueN: statemendN;

          break;

  [default:   defaultStatement;]

}

表达式expression可以返回任一简单类型的值(如整型、字符型),多分支语句把表达式返回的值与每个case子句中的值(一个常量)相比。

如果匹配成功,则执行该case子句后的语句序列。 

default子句是任选的。当表达式的值与任一case子句中的值都不匹配时,程序执行default后面的语句。如果表达式的值与任一case子句

中的值都不匹配且没有default子句,则程序不做任何操作,直接跳出switch语句。 

break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。 

switch语句的功能可以用if-else来实现,但在某些情况下,使用switch语句更简炼,且程序的执行效率提高。

例3.3 根据考试成绩的等级打印出百分制分数段。 

public class GradeLevel {

public static void main(String args[]){

System.out.println("“nOutPut is:");

char grade=‘C‘;   //normal use

switch (grade){

case ‘A‘:    System.out.println(grade+"is 85~100");

break;

case ‘B‘:    System.out.println(grade+"is 70~84");

break;

case ‘C‘:    System.out.println(grade+"is 60~69");

break;

case ‘D‘:    System.out.println(grade+"is <60");

break;

default:    System.out.println("inputerror");

}

}

}

break语句

在switch语中,break语句用来终止switch语句的执行。使程序在switch语句后的第一个语句开始执行。 

在Java中,可以为每个代码块加一个括号。一个代码块通常是用花括号{}括起来的一段代码。加标号的格式如下: 

BlockLabel: {codeBlock} 

break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块的第一条语句处执行。其格式为: break BlockLabel; 

例如: 

a: {……     //标记代码块a

b:   {……     //标记代码块b

c:     {……   //标记代码块c

break a;

……//will not be executed

      }

        ……//will not be executed

    }

        ……//will not be executed

  }

…… //execute from here

与C、C++不同, Java中没有goto语句来实现任意的跳转, 因为goto语句破坏程序的可读性, 而且影响编译的优化。Java用break来实

现goto语句所特有的一些功能。

返回语句return

return语句用于从当前执行的方法中退出, 并返回到调用该方法的语句处继续程序的执行。返回语句有两种格式:

return expression 

返回一个值给调用该方法的语句, 返回值的数据类型必须与方法声明中的返回值类型一致。可以使用强制类型转换来使类型一致。 

return 

当方法说明中用void声明返回类型为空时, 可以使用这种格式, 它不返回任何值。不带参数的return语句有时可省略。

return语句通常用在一个方法体的最后。

循环语句

  循环语句包括 while, do-while, for, continue 等语句。循环语句的作用是反复执行一段代码,直到满足循环终止条件为止,

一个循环一般应包括四部分内容: 

初始化部分(initialization): 用来设置循环的一些初始条件,计数器清零等。

循环体部分(body): 这是反复循环的一段代码,可以是单一的一条语句,也可以是复合语句。

迭代部分(iteration): 这是在当前循环结束,下一次循环开始前执行的语句,常常用来使计数器加1或减1。

终止部分(termination): 通常是一个布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。 

下面分别介绍Java中的while语句,do-while语句和for语句。

while语句 

while语句的一般格式为:

[初始化]

while (条件表达式E){

语句S;   //循环体

}

当条件表达式E的值为true时,循环执行花括号中的语句S。S中包括迭代部分。 

while语句首先计算条件表达式E是否成立,当条件成立(true)时,才去执行循环中的语句。所以有可能循环体一次也不执行。

do-while语句 

do-while语句的一般格式为:

[初始化]

do {

语句S;   //循环体

} while (条件表达式E);

do-while语句首先执行循环体, 然后再计算终止条件, 若结果为true, 则循环执行语句S, 直到条件表达式E的结果为false。 

与while语句不同的是, do-while语句的循环体至少执行一次。

for语句 

for语句的一般格式为:

for (初始表达式; 条件表达式; 迭代表达式) {

语句S;   //循环体

}

for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。

完成一次循环后,重新判断终止条件。 

可以在for语句的初始化部分声明变量,它的作用域为整个for语句。 

for语句通常用来执行循环次数确定的情况(如对数组元素进行操作)。 

在初始化部分和迭代部分可以使用逗号语句来分隔多个操作。例如: 

for (i=0,j=10; i<j; i++,j--) {

……

}

continue语句

continue语句用来结束本次循环, 跳过循环体中下面尚未执行的语句, 接着进行终止条件的判断, 以决定是否继续循环。 

也可以用continue跳转到括号指明的外层循环中,这时的格式为 

continue outerLable;

例3.4:下例分别用while、do-while和for语句实现累计求和。

public class Sum{

public static void main(String args[]){

System.out.println("“n**while statement**");

int n=10,sum=0;    ∥initialization

while (n>0){        ∥termination

  sum+=n;        ∥body

  n--;            ∥iteration

}

System.out.println("sum is"+sum);

System.out.println("“n**do_while statement**");

n=0;                ∥initialization

sum=0;

do{

  sum+=n;        ∥body

  n++;            ∥iteration

} while(n<=10);    ∥termination

System.out.println("sum is"+sum);

System.out.println("“n**for statement**");

sum=0;

for (int i=1;i<=10;i++){

  sum+=i;

}

System.out.println("sum is"+sum);

}

}

可以从中来比较这三种循环语句,从而在不同的场合选择合适的语句。

数组

数组是有序数据的集合, 数组中的每个元素具有相同的类型。数组名和下标可唯一地确定数组中的元素。数组可分为一维数组和多维数组。

一维数组 

声明方式:

type arrayName[]; 

或 type[] arrayName; 

type可以是Java中任意的数据类型, arrayName为数组名。

如: int intArray[]; 

声明了一个名为intArray的整型数组, 数组中的每个元素为int型数据。 

Java在数组的声明中并不为数组元素分配内存, 因此 [ ] 中不用指出数组中元素个数, 即数组长度。

在访问数组的任何元素之前,我们必须为它分配内存空间, 这可用new操作符, 其格式如下:

arrayName = new type[arraySize]; 

其中,arraySize指明数组的长度。

如: intArray = new int; 为该数组分配了3个int型整数所需的内存空间。

通常, 这两部分可以合在一起, 格式如下: 

type arrayName[] = new type[arraySize]; 

如: int intArray[] = new int; 

用new操作符为数组分配内存空间后,就可以引用数组中的每一个元素。数组元素的引用方式为: arrayName[index] 

其中: index为数组下标,它可以为整型常数或表达式。如a, b(i为整型), c[6*I]等。下标从0开始, 一直到数组的长度减1。

对于上面例子中的intArray数组来说,它有3个元素,分别为: 

intArray[0], intArray[1], intArray。(注意: 没有intArray。)

另外,与C、C++中不同,Java对数组元素要进行越界检查以保证安全性。对于每个数组都有一个属性length指明它的长度。

例如: intArray.length指明数组intArray的长度。

数组的初始化 

对数组元素可以按照上述的例子进行赋值。也可以在定义数组的同时进行初始化。 

如: int a[]={1,2,3,4,5}; 

用逗号(,)分隔数组的各个元素,系统自动为数组分配一定的内存空间。

例3.5:数组的使用:

public class ArrayTest{

public static void main(String args[]){

int i;

int a[]=new int;

for (i=0;i<5;i++)

a=i;

for (i=a.length-1;i>=0;i--)

System.out.println("a["+i+"]="+a);

}

}

多维数组 

与C、C++一样, Java中多维数组可被看作数组的数组。例如二维数组就可看成是一个特殊的一维数组, 该数组的每个元素又

是一个一维数组。下面我们主要以二维数组为例来说明多维数组。 

二维数组的声明方式如下: 

type arrayName[][]; 

如: int intArray[][];

与一维数组一样,这时对数组元素也没有分配内存空间,同要使用运算符new来分配内存,然后才可以访问每个元素。

对二维数组中每个元素,引用方式为: 

arrayName[index1][index2] 

其中index1、index2为下标, 可为整型常数或表达式, 如a等。数组每一维的下标也都从0开始。

在声明二维数组的同时也可对它进行初始化。

如:int a[][]={{2,3},{1,5},{3,4}}; 

定义了一个3×2的数组,并对每个元素赋值。

数组的越界 

如果使用数组分量时,其下标超过规定的值,则会发生数组的越界。这时,虽然程序能通过编译,但在运行时会产生一个

名为ArrayIndexOutOfBoundsException 的例外,所以编程时要注意检查数组下标。

 

 

 

1.VO是用new关键字创建,由GC回收的。

  PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。

  2.VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。

  PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。

  3.VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。

  PO的属性是跟数据库表的字段一一对应的。

  PO对象需要实现序列化接口。

  -------------------------------------------------

  PO是持久化对象,它只是将物理数据实体的一种对象表示,为什么需要它?因为它可以简化我们对于物理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程。VO是什么?它是值对象,准确地讲,它是业务对象,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。

  首先说PO和VO吧,它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(当然我是指他们的属性)。正因为这样,PO独立出来,数据持久层也就独立出来了,它不会受到任何业务的干涉。又正因为这样,业务逻辑层也独立开来,它不会受到数据持久层的影响,业务层关心的只是业务逻辑的处理,至于怎么存怎么读交给别人吧!不过,另外一点,如果我们没有使用数据持久层,或者说没有使用hibernate,那么PO和VO也可以是同一个东西,虽然这并不好。

  ----------------------------------------------------

  java的(PO,VO,TO,BO,DAO,POJO)解释

  PO(persistant object) 持久对象

  在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。

  VO(value object) 值对象

  通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。

  TO(Transfer Object),数据传输对象

  在应用程序不同tie(关系)之间传输的对象

  BO(business object) 业务对象

  从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。

  POJO(plain ordinary java object) 简单无规则java对象

  纯的传统意义的java对象。就是说在一些Object/Relation Mapping工具中,能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。我的理解就是最基本的Java Bean,只有属性字段及setter和getter方法!。

  DAO(data access object) 数据访问对象

  是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO, 提供数据库的CRUD操作...

  O/R Mapper 对象/关系 映射

  定义好所有的mapping之后,这个O/R Mapper可以帮我们做很多的工作。通过这些mappings,这个O/R Mapper可以生成所有的关于对象保存,删除,读取的SQL语句,我们不再需要写那么多行的DAL代码了。

  实体Model(实体模式)

  DAL(数据访问层)

  IDAL(接口层)

  DALFactory(类工厂)

  BLL(业务逻辑层)

  BOF   Business Object Framework   业务对象框架

  SOA   Service Orient Architecture   面向服务的设计

  EMF   Eclipse Model Framework    Eclipse建模框架

  ----------------------------------------

  PO:全称是

  persistant object持久对象

  最形象的理解就是一个PO就是数据库中的一条记录。

  好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。

  BO:全称是

  business object:业务对象

  主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。

  比如一个简历,有教育经历、工作经历、社会关系等等。

  我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。

  建立一个对应简历的BO对象处理简历,每个BO包含这些PO。

  这样处理业务逻辑时,我们就可以针对BO去处理。

  VO

  value object值对象

  ViewObject表现层对象

  主要对应界面显示的数据对象。对于一个WEB页面,或者SWT、SWING的一个界面,用一个VO对象对应整个界面的值。

  DTO

  Data Transfer Object数据传输对象

  主要用于远程调用等需要大量传输对象的地方。

  比如我们一张表有100个字段,那么对应的PO就有100个属性。

  但是我们界面上只要显示10个字段,

  客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,

  这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO

  POJO

  plain ordinary java object 简单java对象

  个人感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。

  一个POJO持久化以后就是PO

  直接用它传递、传递过程中就是DTO

  直接用来对应表示层就是VO

  DAO

  data access object数据访问对象

  这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要.

  主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO

  -----------------------------------------------------------------

  PO:persistant object持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。 PO中应该不包含任何对数据库的操作.

  VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递.

  DAO:data access object数据访问对象,此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作.

  BO:business object业务对象,封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作;

  POJO:plain ordinary java object 简单无规则java对象,我个人觉得它和其他不是一个层面上的东西,VO和PO应该都属于它.

  ---------------------------------------------

  VO:值对象、视图对象

  PO:持久对象

  QO:查询对象

  DAO:数据访问对象

  DTO:数据传输对象

  ----------------------------------------

  struts 里的 ActionForm 就是个VO;

  hibernate里的 实体bean就是个PO,也叫POJO;

  hibernate里的Criteria 就相当于一个QO;

  在使用hibernate的时候我们会定义一些查询的方法,这些方法写在接口里,可以有不同的实现类.而这个接口就可以说是个DAO.

  ----------------------------------------

  PO或叫BO,与数据库最接近的一层,是ORM中的O,基本上是数据库字段对应BO中的一个属性,为了同步与安全性考虑,最好只给DAO或者Service调用,而不要用packcode,backingBean,或者BO调。

  DAO,数据访问层,把VO,backingBean中的对象可以放入。。。。

  DTO,很少用,基本放入到DAO中,只是起到过渡的作用。

  QO,是把一些与持久性查询操作与语句放入。。

  VO,V层中用到的基本元素与方法等放其中。如果要其调用BO,则要做BO转换VO,VO转换BO操作。VO的好处是其页面的元素属性多于BO,可起到很好的作用。。。。

  -----------------------------------------

  楼上的不对吧,PO是持久化对象。BO=business object—业务对象。

  PO可以严格对应数据库表,一张表对映一个PO。

  BO则是业务逻辑处理对象,我的理解是它装满了业务逻辑的处理,在业务逻辑复杂的应用中有用。

  VO:value object值对象、view object视图对象

  PO:持久对象

  QO:查询对象

  DAO:数据访问对象——同时还有DAO模式

  DTO:数据传输对象——同时还有DTO模式

 

 

 

Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;   tring s = new String("xyz");创建了几个String Object? 
  两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。  short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?   short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 = (short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 
 sleep() 和 wait() 有什么区别? 搞线程的最爱 
  sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级。   (b)正在运行的线程因为其它原因而阻塞。    wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: