8.空指標異常
物件陣列不能直接使用,因為會報空指標異常
publicstaticvoidmain(String[] args) {
Customercustomer=newCustomer();
Scannerscanner=newScanner(System.in);
CustomerBiz biz=newCustomerBiz();
for(inti = 0; i < biz.cArray.length; i++) {
biz.cArray[i]=newCustomer();
//必須先初始化
System.out.println("請輸入姓名:");
biz.cArray[i].name=scanner.next();
System.out.println("請輸入年齡:");
biz.cArray[i].age=scanner.nextInt();
biz.addCustomer(biz.cArray[i]);
}
biz.show();
}
}
如果直接使用會報錯,本身來說是並沒有問題的,
但是因為stu是一個Student類的陣列,裡面的元素都是物件,
而此時所有的元素都沒有賦值,預設的初始值為null,
使用null.成員變數或者null.成員方法 都會提示NullPointerException的錯誤
·直接使用會報錯的例子
·解決方法
o方法一
o方法二
o方法三(變種)
o方法四(for迴圈直接用stu[i] = new Stu初始化)
直接使用會報錯的例子
publicclass ObjectArray{
publicstaticvoid main(String[] args)
{
Student[] stu =newStudent[10];
//如下這種寫法會報錯, 本身來說是並沒有問題的,
//但是因為stu是一個Student類的陣列,裡面的元素都是物件,
//而此時所有的元素都沒有賦值,預設的初始值為null,
//使用null.成員變數或者null.成員方法
//都會提示NullPointerException的錯誤
stu[0].name ="張三";//-->會報NullPointerException錯誤
/*
上面的程式已經出錯,後面的就都省略了
*/
}
}
class Student{
publicStringname;
publicint age;
publicStringtel;
publicStringtoString()
{
return"姓名:"+this.name+", 年齡"+this.age+",電話"+this.tel;
}
}
解決方法
方法1
使用構造方法進行賦值
publicclass ObjectArray{
publicstaticvoid main(String[] args)
{
//直接用構造方法給物件賦值
Student stu1 =newStudent("張三",20,"18880472012");
Student stu2 =newStudent("李四",22,"13666150682");
Student stu3 =newStudent("王五",18,"13433430766");
//將上面構造方法new好的物件,分別賦給陣列
Student[] stu =newStudent[3];
stu[0] = stu1;
stu[1] = stu2;
stu[2] = stu3;
for(int i =0; i
{
System.out.println(stu[i]);//-->因為已經重寫過toString方法,所以可以直接列印陣列
}
}
}
class Student{
//將成員變數順便封裝一下
privateStringname;
privateint age;
privateStringtel;
//寫一個構造方法,以便在主函式中直接呼叫賦值
publicStudent(Stringname;int age;Stringtel)
{
this.name = name;
this.age = age;
this.tel = tel;
}
publicStringtoString()
{
return"姓名:"+this.name+", 年齡"+this.age+",電話"+this.tel;
}
}
方法2
對各成員變數分別賦值
publicclass ObjectArray{
publicstaticvoid main(String[] args)
{
//new 一個stu1, 再用物件.成員變數的方法將各屬性賦值
Student stu1 =newStudent();
stu1.name ="張三";
stu1.age =20;
stu1.tel ="18880472012";
//new 一個stu2, 再用物件.成員變數的方法將各屬性賦值
Student stu2 =newStudent();
stu2.name ="李四";
stu2.age =22;
stu2.tel ="13666150682";
//new 一個stu3, 再用物件.成員變數的方法將各屬性賦值
Student stu3 =newStudent();
stu3.name ="王五";
stu3.age =18;
stu3.tel ="13433430766";
//new 一個Student陣列, 分別將stu1,stu2,stu3的值賦給對應的陣列元素
Student[] stu =newStudent[3];
stu[0] = stu1;
stu[1] = stu2;
stu[2] = stu3;
}
}
class Student{
publicStringname;
publicint age;
publicStringtel;
publicStringtoString()
{
return"姓名:"+this.name+", 年齡"+this.age+",電話"+this.tel;
}
}
方法3(變種)
使用for迴圈對各元素進行賦值
import java.util.Scanner;publicclassObjectArray
{
privatestaticScannerin;
public static void main(String[] args)
{
in=newScanner(System.in);
Student[] stu =newStudent[3];
for(inti =0;i
{
//臨時的stuI一定要在for裡面定義,否則stuI賦給stu[i]之後,
//因為指向相同,stu[i]會被不斷的複寫,最後會出現所有的stu的值全部一樣
Student stuI =newStudent();
//給成員變數初始化
System.out.println("請輸入第"+(i+1)+"個學生的資訊:");
System.out.println("姓名:");
stuI.name =in.next();
System.out.println("年齡:");
stuI.age =in.nextInt();
System.out.println("電話:");
stuI.tel =in.next();
//將stuI賦給stu[i]
stu[i] = stuI;
}
//列印
for(inti =0;i
{
System.out.println(stu[i]);
}
}
}
classStudent
{
publicString name;
publicintage;
publicString tel;
public String toString()
{
return"姓名:"+this.name+", 年齡"+this.age+",電話"+this.tel;
}
}
方法4
直接給stu[i]賦new Student()物件, 來規避NullPointer Exception錯誤
publicclasstest1111
{
public static void main(String [] args)
{
Stu[] stu =newStu[3];
for(inti =0; i
{
//直接用stu[i] = new Stu()來將null變為new Stu();
stu[i] =newStu();
stu[i].setName("張三");
stu[i].setAge(15);
}
for(inti =0;i
{
System.out.println(stu[i]);
}
}
}
classStu
{
privateString name;
privateintage;
public String getName()
{
returnname;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
returnage;
}
public void setAge(int age)
{
this.age = age;
}
public String toString()
{
returnthis.name+" : "+this.age;
}
}
相關文章
- NullPointerException空指標異常的理解NullException指標
- Java中如何避免空指標異常Java指標
- Java中如何處理空指標異常Java指標
- 使用Java 8 Optional避免空指標異常Java指標
- Kafka SimpleStringSchema 可能會造成空指標異常Kafka指標
- java.lang.NullPointerException 空指標異常問題JavaNullException指標
- java 空指標異常造成的原因有哪些Java指標
- [轉載] java避免空指標異常_第1部分:在現代Java應用程式中避免空指標異常Java指標
- getter,setter 直接修改造成的空指標異常指標
- Java中的空指標異常 java.lang.NullPointerExceptionJava指標NullException
- 【優雅程式碼】03-optional杜絕空指標異常指標
- Java8新特性之空指標異常的剋星Optional類Java指標
- 關於Paging + Room,RecyclerView重新整理時的空指標異常OOMView指標
- SpringDateJpa使用JpaRepository方法出現空指標異常的問題Spring指標
- 依然是jivejdon的發帖頁面的空指標異常問題指標
- Spring中new出一個物件導致的空指標異常Spring物件指標
- 8.異常處理機制
- 野指標 空指標指標
- 如何在 Java8 中風騷走位避開空指標異常Java指標
- RecyclerView.addFocusables出現空指標異常NullPointerException的解決辦法View指標NullException
- 我在大廠做 CR——如何體系化防控空指標異常指標
- springboot+mybatis,mapper呼叫查詢的資料為空,報空指標異常Spring BootMyBatisAPP指標
- 第 10 節:複合型別-5. 指標 -- 指標與指標變數 -8. 多級指標型別指標變數
- 防止空指標指標
- 聊一聊日常開發中如何優雅的避免那無處不在的空指標異常指標
- jdon安裝不知丟擲空指標的異常出現在哪 求教指標
- 又見懸空指標指標
- GO 空指標和nilGo指標
- 關於java中空指標異常的原因及解決方法Java指標
- Variation information(資訊差異指標)ORM指標
- 如何避免空指標出錯?指標
- easyexcel字型空指標錯誤Excel指標
- C# 呼叫目標異常C#
- 常見指標型別入門指標型別
- springboot整合redis,redisTemplate 空指標Spring BootRedis指標
- MySQL遊標和異常處理MySql
- 【Java8新特性】Optional類在處理空值判斷場景的應用 迴避空指標異常 編寫健壯的應用程式Java指標
- mybatis配置執行報出Caused by: org.apache.ibatis.binding.BindingException:相關錯誤解決或者空指標異常MyBatisApacheException指標