這個是變數的作用范圍的問題。
你把這個問題弄清楚了以上的也就自然解版決。
局部變數:只是在權局部有效,當變數聲明在方法中時,就只有在該方法有效。
當變數聲明在代碼塊中,就只有在該代碼塊中有效。如try..catch..語句塊
全局變數:
在全句范圍有效既是在該類中有效。
❷ java對象為空的判斷
/**
*判斷對象或對象數組中每一個對象是否為空:對象為null,字元序列長度為0,集合類、Map為empty
*
*@paramobj
*@return
*/
(Objectobj){
if(obj==null)
returntrue;
if(objinstanceofCharSequence)
return((CharSequence)obj).length()==0;
if(objinstanceofCollection)
return((Collection)obj).isEmpty();
if(objinstanceofMap)
return((Map)obj).isEmpty();
if(objinstanceofObject[]){
Object[]object=(Object[])obj;
if(object.length==0){
returntrue;
}
booleanempty=true;
for(inti=0;i<object.length;i++){
if(!isNullOrEmpty(object[i])){
empty=false;
break;
}
}
returnempty;
}
returnfalse;
}
應用場景:
讀取excel文件,轉化為一個二維數組:Object[][]arrays
但是excel中有空行,所以需要過濾Object[][]arrays中的空的一維數組:
Java代碼
/***
*過濾數組中的空元素
*
*
*@paramarrays
*@return
*/
publicstaticObject[][]filterEmpty(Object[][]arrays){
intsumNotNull=0;
/***
*統計非空元素的總個數
*/
for(inti=0;i<arrays.length;i++){
Objectobject=arrays[i];
if(!ValueWidget.isNullOrEmpty(object)
&&!SystemUtil.isNullOrEmpty((Object[])object)){//判斷元素是否為空
sumNotNull=sumNotNull+1;
}
}
Object[][]filtedObjs=newObject[sumNotNull][];
intindex=0;
for(inti=0;i<arrays.length;i++){
Object[]object_tmp=arrays[i];
if(!ValueWidget.isNullOrEmpty(object_tmp)
&&!SystemUtil.isNullOrEmpty((Object[])object_tmp)){//判斷元素是否為空
filtedObjs[index++]=object_tmp;
}
}
returnfiltedObjs;
}
判斷對象的所有成員變數是否為空
Java代碼
/***
*Determinewhethertheobject'sfieldsareempty
*
*@paramobj
*@paramisExcludeZero:true:數值類型的值為0,則當做為空;----false:數值類型的值為0,則不為空
*
*@return
*@throwsSecurityException
*@
*@throwsNoSuchFieldException
*@throwsIllegalAccessException
*/
(Objectobj,booleanisExcludeZero)
throwsSecurityException,IllegalArgumentException,
NoSuchFieldException,IllegalAccessException{
if(ValueWidget.isNullOrEmpty(obj)){//對象本身就為null
returntrue;
}
List<Field>fieldList=ReflectHWUtils.getAllFieldList(obj.getClass());
booleanisNull=true;
for(inti=0;i<fieldList.size();i++){
Fieldf=fieldList.get(i);
ObjectpropertyValue=null;
try{
propertyValue=getObjectValue(obj,f);
}catch(NoSuchFieldExceptione){
e.printStackTrace();
}
if(!ValueWidget.isNullOrEmpty(propertyValue)){//欄位不為空
if(){//是數字
if(!((Integer)propertyValue==0&&isExcludeZero)){
isNull=false;
break;
}
}elseif(propertyValueinstanceofDouble){//是數字
if(!((Double)propertyValue==0&&isExcludeZero)){
isNull=false;
break;
}
}elseif(propertyValueinstanceofFloat){//是數字
if(!((Float)propertyValue==0&&isExcludeZero)){
isNull=false;
break;
}
}elseif(propertyValueinstanceofShort){//是數字
if(!((Short)propertyValue==0&&isExcludeZero)){
isNull=false;
break;
}
}else{
isNull=false;
break;
}
}
}
returnisNull;
}
測試:
Java代碼
@Test
publicvoidtest_isNullObject()throwsSecurityException,
IllegalArgumentException,NoSuchFieldException,
IllegalAccessException{
Person2p=newPerson2();
Assert.assertEquals(true,ReflectHWUtils.isNullObject(p,true));
Assert.assertEquals(false,ReflectHWUtils.isNullObject(p,false));
p.setAddress("beijing");
Assert.assertEquals(false,ReflectHWUtils.isNullObject(p,true));
Assert.assertEquals(false,ReflectHWUtils.isNullObject(p,false));
p.setAddress(null);
p.setId(0);
Assert.assertEquals(true,ReflectHWUtils.isNullObject(p,true));
Assert.assertEquals(false,ReflectHWUtils.isNullObject(p,false));
}
Person2源代碼(省略getter,setter方法):
Java代碼
importjava.sql.Timestamp;
publicclassPerson2{
privateintid;
privateintage;
privatedoubleweight;
privateStringpersonName;
privateTimestampbirthdate;
publicStringidentitify;
protectedStringaddress;
Stringphone;
}
❸ java:try{} catch{}是什麼意思
這是一個提示出現異常的代碼。try{}catch(Exception e){}
try{}里邊代指出現異常的代碼。catch(Exception e)中的e就是異常各類,如果你能確定那種異常,就可以用那種異常代碼代替這個e。
而後邊{}就是你處理異常的方法,你可以打出異常,或者是輸出提示出錯了,很靈活。
有時候還會有一個finally{}在最後,這個是一定會處理的代碼,不會因為異常的出現會終止。
(3)javanulltry擴展閱讀:
try 是JAVA中常用到的關鍵命令。用於try..catch..finally塊,進行異常捕獲。
try是try..catch..finally塊中用來引導第一部分的關鍵字,用於聲明需要捕獲指定語句塊的異常。
完整的使用方法是:
try {
語句塊1
} catch (<? extends Throwable> e) {
語句塊2.1
} catch (<? extends Throwable> e) {
語句塊2.2
} catch (<? extends Throwable> e) {
語句塊2.3
...
} finally {
語句塊3
}
catch可以出現0次、1次或多次,finally可以出現0次或1次,但是catch和finally不能同時不出現。
catch用法:
當語句塊1中拋出異常時,立即離開語句塊1,之後會在所有catch中依次進行類名比對。如果拋出異常和catch聲明的異常類名一致,或拋出異常是catch聲明的異常的子類,則會進入該catch的語句塊(成為異常的捕獲),在catch的語句塊中可以將異常輸出到命令行或引導用戶進行問題反饋。
如果任何一個catch都不匹配,會像上層調用拋出這一異常(在此之前會進入finally語句塊,詳情參考下面的finally用法)。
finally用法:
在語句塊1、語句塊2中,任何試圖離開try..catch..finally塊的語句都會導致語句塊3被執行,如return throw break continue。在finally的語句塊中可以進行內存回收等工作。
需要注意的是,如果導致離開的不是語句造成的,而是斷電、內存不足等計算機故障,finally語句塊不會被執行。
例子:
public class Test {
public static void main(String[] args) {
int i = 10;
try {
System.out.println(i / 0);
}catch(ArithmeticException ame) {
ame.printStackTrace();
} finally {
System.out.println("byebye");
}
}
}
❹ java里,判斷一個對象是否是null,怎麼判斷
Object i = null;
try {
System.out.println(i.hashCode());
} catch (NullPointerException e) {
System.out.println("Object=null");
}