final

Java代码 
  1. public class FinalOriginalTest {  
  2.     private final int a;  
  3.     private String name;  
  4.     public FinalOriginalTest(){  
  5.         a = 3;  
  6.     }  
  7.     public FinalOriginalTest(String name){  
  8.         this.name = name;  
  9.     }  
  10.     public static void main(String[] args){  
  11.         FinalOriginalTest ft = new FinalOriginalTest();  
  12.         FinalOriginalTest ft1 = new FinalOriginalTest("hello");  
  13.     }  
  14. }  

问题1:上面的程序能否编译通过?如果不能,请说明理由。 
解答:不能编译通过,可能没有初始化变量a。因为对于final类型的成员变量的初始化,在构造方法中完成赋值,如果一个类有多个构造方法,就要 保证在每个构造方法中都要完成对该final类型变量的初始化工作。所以需要在public FinalOriginalTest(String name)构造方法中给a赋值。 
注意:final可以用在类、方法、变量上。 
     1、final用在类上,表明当前类它不能被继承,没有子类。 
     2、final用在方法上,表明当前方法不能被override,不能被重写。 
     3、final用在变量上,表明当前变量是一个终态的变量,是一个常量,这个变量的值一但被赋值后就不能被改变了。 
     对于final类型的成员变量的初始化方式: 
     1、声明变量时直接赋值 
     2、在构造方法中完成赋值,如果一个类有多个构造方法,就要保证在每个构造方法中都要完成对该final类型变量的初始化工作。 

问题2:上面的程序中,修正问题1之后,将private final int a;改为private static final int a;能否编译通过?如果不能,请说明理由。 
解答:不能编译通过,因为a是静态变量,在这个类还没有实例化的时候,它的值就已经有了。所以对于一个int类型的static final类型的变量a来说,我们只能在声明的时候就给它赋值private static final int a = 3;然后把构造方法里面的赋值给注释掉,这样编译就能通过了。 

总结:对于final类型的变量,对于不加static我们可以有两种方式给它赋值:声明变量时直接赋值;在构造方法中完成赋值,如果一个类有多 个构造方法,就要保证在每个构造方法中都要完成对该final类型变量的初始化工作。对于一个变量既是final又是static的,我们必须在声明变量 时直接赋值。

java代码 
  1. public class FinalReferenceTest {  
  2.     public static final StringBuffer sb = new StringBuffer();  
  3.     public static void main(String[] args){  
  4.         sb.append("hello");  
  5.     }  
  6. }  

问题1:上面的程序能否编译通过?如果能,说明理由,如果不能,请说明理由。 
解答:能编译通过。 
分析:对于final修饰的引用类型,到底这个引用不能变还是这个引用指向的对象的内容不能变?答案是引用不能改变,而引用指向的内容是可以改变的。 

问题2:上面的程序在语句sb.append("hello");后面添加语句 sb = new StringBuffer()能否编译通过?如果能,说明理由,如果不能,请说明理由。 
解答:不能编译通过。 
分析:由于对于final修饰的引用类型,是引用不能改变,而引用指向的内容是可以改变的。因为sb已经指向了第一次new...产生的对象,已 经不能改变,所以在语句sb.append("hello");后面添加语句 sb = new StringBuffer()是不能编译通过的。 

总结:对于final类型的引用变量来说,所谓的不能改变指的是该引用不能改变。



SELECTT0.[U_SOContrNo],T0.[DocNum],T0.[DocDate], T0.[U_BusUnitTyp] 'Unit'

, T0.[U_CusPONo], T0.[CardCode], T0.[CardName]

,T1.[ItemCode],T1.[Dscription]

, Case 

   whenT0.[DocStatus] = 'O' then '未清'

   when(T0.[DocStatus] = 'C' AND T0.[CANCELED] = 'Y' ) then '已取消'

   when(T0.[DocStatus] = 'C' AND T0.[CANCELED] = 'N' ) then '已结算'

   end as 状态

,CASE

WHEN (T1.[TargetType]= 13) THEN '已开票'

WHEN (T2.[TargetType]= 13) THEN '已开票'

ELSE '...'

END AS'开票状态'

,T1.[Quantity] '合同数'

,T2.[Quantity] '发货数'

,T3.[Quantity] '退货数'

, T1.[Price] '单价'

, T0.[DocCur]

, T1.[PriceAfVAT],(T1.[PriceAfVAT] * T1.[Quantity]) AS '含税价(合同)'

, T0.[Comments]

, T5.[DocNum],T5.[DocDate], (T5.[PriceAfVAT] * T5.[Quantity]  ) AS '开票金额'

, T1.[Quantity]- T3.[Quantity]'退货否'

 

FROM ORDR T0  

INNER JOIN RDR1 T1 ONT0.DocEntry = T1.DocEntry

LEFT JOIN (

SELECT B0.[DocNum],B0.[DocType]

, B1.[TargetType],B1.[TrgetEntry], B1.[ItemCode], B1.[Quantity], B1.[PriceAfVAT] 

FROM ODLN B0 INNER JOIN DLN1 B1 ON B0.DocEntry = B1.DocEntry

) T2 ONT1.[TrgetEntry] = T2.[DocNum]

AND T1.[ItemCode] =T2.[ItemCode]

AND T1.[PriceAfVAT] =T2.[PriceAfVAT]

LEFT JOIN (

SELECT C0.[DocNum],C1.[TargetType], C1.[TrgetEntry], C1.[ItemCode], C1.[Quantity], C1.[PriceAfVAT]

FROM ORDN C0 INNERJOIN RDN1 C1 ON C0.DocEntry = C1.DocEntry

) T3 ONT2.[TrgetEntry] = T3.[DocNum]

AND T2.[ItemCode] =T3.[ItemCode]

AND T2.[PriceAfVAT] =T3.[PriceAfVAT]

 

LEFT JOIN (

SELECT D0.[DocNum],D1.[ItemCode],D1.[DocDate],  D1.[Quantity], D1.[PriceAfVAT]

FROM OINV D0 INNER JOIN INV1 D1 ON D0.DocEntry = D1.DocEntry

) T5 ON ((T1.[TargetType] = 13) AND (T1.[TrgetEntry] = T5.[DocNum]) AND (T1.[ItemCode] =T5.[ItemCode]) AND (T1.[PriceAfVAT] = T5.[PriceAfVAT]) )

OR ( (T2.[TargetType]= 13) AND (T2.[TrgetEntry] = T5.[DocNum]) AND (T2.[ItemCode] = T5.[ItemCode])AND (T2.[PriceAfVAT] = T5.[PriceAfVAT]) )

 

WHERE (T0.[Series] =39 OR  T0.[Series]  = 40) 

AND ( T0.docdate>=[%0] or [%0] = '' ) 

AND ( T0.docdate<=[%1] or [%1] = '' )

AND T1.[Quantity]-T3.[Quantity]0

 

GROUP BYT0.[DocNum],T0.[DocDate], T0.[U_BusUnitTyp],T0.[U_SOContrNo], T0.[U_CusPONo], T0.[CardCode], T0.[CardName]

,T1.[ItemCode],T1.[Dscription]

,T0.[DocStatus],T0.[CANCELED]

,T1.[TargetType],T2.[TargetType] 

,T1.[Quantity] ,T2.[Quantity],T3.[Quantity] 

, T1.[Price] ,T0.[DocCur]

, T1.[PriceAfVAT],(T1.[PriceAfVAT] * T1.[Quantity]) 

, T0.[Comments]

, T5.[DocNum],T5.[DocDate], (T5.[PriceAfVAT] * T5.[Quantity]  ) 

 

ORDER BY 1,2,10,11

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值