GVKun编程网logo

Java NullPointerException-如何在Java中有效处理空指针(java空指针问题如何解决)

17

在这篇文章中,我们将带领您了解JavaNullPointerException-如何在Java中有效处理空指针的全貌,包括java空指针问题如何解决的相关情况。同时,我们还将为您介绍有关Android

在这篇文章中,我们将带领您了解Java NullPointerException-如何在Java中有效处理空指针的全貌,包括java空指针问题如何解决的相关情况。同时,我们还将为您介绍有关Android----java.lang.NullPointerException:---java.lang.NullPointerException:、Exception in thread "main" java.lang.NullPointerException到底哪里是空指向了啊?、Java Array数组错误 Exception in thread "main" java.lang.NullPointerException、java 出现“Exception in thread "main" java.lang.NullPointerException”的知识,以帮助您更好地理解这个主题。

本文目录一览:

Java NullPointerException-如何在Java中有效处理空指针(java空指针问题如何解决)

Java NullPointerException-如何在Java中有效处理空指针(java空指针问题如何解决)

Java NullPointerException是未经检查的异常,并且进行了扩展RuntimeExceptionNullPointerException不会强制我们使用catch块来处理它。

1.为什么在代码中出现NullPointerException

NullPointerException是代码中您尝试访问/修改尚未初始化的对象的情况。从本质上讲,它意味着对象引用变量没有指向任何地方,并且不指向任何内容或为“ null ”。一个抛出空指针异常的示例Java程序。

package com.howtodoinjava.demo.npe;
 
public class SampleNPE
{
    public static void main(String[] args)
    {
       String s = null ;
       System.out.println( s.toString() );   // ''s'' is un-initialized and is null
    }
}

 

2. Java NullPointerException通常发生的常见位置

好吧,由于各种原因NullPointerException可能会出现在代码中的任何位置,但是我根据自己的经验准备了最常出现的地点清单。

  1. 在未初始化的对象上调用方法
  2. 方法中传递的参数是 null
  3. 调用toString()对象的方法是null
  4. if不检查null相等性的情况下比较块中的对象属性
  5. 对于像Spring这样的依赖注入的框架来说,配置不正确
  6. synchronized在一个对象上使用null
  7. 链接的语句,即单个语句中的多个方法调用

这不是详尽的清单。还有其他几个地方和原因。如果您还可以回忆起其他任何内容,请发表评论。它也会帮助其他人(初学者)。

 

3.避免Java NullPointerException的最佳方法

3.1。三元运算符

如果不为null,则运算符将得出左侧的值,否则将评估右侧。它具有如下语法:

布尔表达式?value1:value2;

如果expression计算为true,则整个表达式将返回value1,否则返回value2。它更像if-else构造,但是更有效和更具表现力。为了防止NullPointerException(NPE),请像以下代码一样使用此运算符:

字符串str =(参数==空)“ NA”:参数;

3.2。使用Apache Commons StringUtils进行字符串操作

Apache commons lang是用于各种操作之王的几个实用程序类的集合。其中之一是StringUtils.java使用StringUtils.isNotEmpty()验证作为参数传递的字符串是否为空或空字符串。如果不为null或为空;然后进一步使用它。

其他类似的方法是StringUtils。IsEmpty()和StringUtils.equals()。他们在javadocs中声称,如果StringUtils.isNotBlank()抛出NPE,则API中存在错误。

if (StringUtils.isNotEmpty(obj.getvalue())){
     String s = obj.getvalue();
     ....
}

3.3。很早检查方法参数是否为空

您应该始终将输入验证置于方法的开头,以使其余代码不必处理输入错误的可能性。因此,如果有人传递空值,那么事情将在堆栈中早点破裂,而不是在较深的位置(根本问题很难识别)中破裂。

在大多数情况下,针对快速故障行为是一个不错的选择。

3.4。考虑原始而不是对象

当对象引用指向无内容时,将发生空问题。因此,尽可能多地使用原语始终是安全的,因为它们不会受到空引用的影响。所有原语都必须附加一些默认值,因此请当心。

3.5。仔细考虑链接方法调用

虽然链式语句很容易在代码中查看,但它们不是NPE友好的。一条分散在多行中的语句将为您提供堆栈跟踪中第一行的行号,无论它出现在何处。

  ref.method1().method2().method3().methods4();

这种链式语句将仅打印“ 行号xyz中发生了NullPointerException”。调试这样的代码确实很难。避免此类呼叫。

3.6。使用String.valueOf()而不是toString()

如果必须打印任何对象的字符串表示形式,请不要使用object.toString()。这是NPE的非常软的目标。而是使用String.valueOf(object)。
即使object在第二种方法中为null,它也不会给出异常,并且将输出null来输出流。

3.7。避免从方法中返回null

避免NPE的一个很棒的技巧是返回空字符串或空集合,而不是返回null。在您的应用程序中一致地执行此操作。您会注意到,如果这样做,则不需要进行大量的空检查。

例如:

List<string> data = null ;
 
@SuppressWarnings ( "unchecked" )
public List getDataDemo()
{
    if (data == null )
       return Collections.EMPTY_LIST; //Returns unmodifiable list
    return data;
}

使用上述方法的用户即使错过了空检查,也不会看到难看的NPE。

3.8。不鼓励传递空参数

我已经看到一些方法声明,其中方法需要两个或多个参数。如果参数之一作为null传递,则方法以某种不同的方式起作用。避免这种情况。

相反,您应该定义两种方法;一个带有单个参数,第二个带有两个参数。强制传递参数。当您在方法内部编写应用程序逻辑时,这很有帮助,因为您可以确保方法参数不会为null。因此,您不会放置不必要的假设和断言。

3.9。在“安全”非空字符串上调用String.equals(String)

代替在下面的代码中编写字符串比较

public class SampleNPE {
    public void demoEqualData(String param) {
       if (param.equals( "check me" )) {
          // some code
       }
    }
}

像这样写上面的代码。即使参数作为null传递,这也不会在NPE中引起。

public class SampleNPE {
    public void demoEqualData(String param) {
       if ( "check me" .equals(param)) // Do like this
       {
          // some code
       }
    }
}

 

4.可用的NullPointerException安全操作

4.1。运算符实例

instanceof运算符是NPE安全的。因此,instanceof null总是返回false。它不会导致NullPointerException。如果您记住这一事实,则可以消除混乱的条件代码。

// Unnecessary code
if (data != null &amp;&amp; data instanceof InterestingData) {
}
 
// Less code. Better!!
if (data instanceof InterestingData) {
}

4.2。访问类的静态成员

如果您要处理静态变量或静态方法,则即使您的引用变量指向null,也不会得到null指针异常,因为静态变量和方法调用是在编译时根据类名绑定的,并且与对象无关

MyObject obj = null ;
String attrib = obj.staticAttribute; //no NullPointerException because staticAttribute is static variable defined in class MyObject

5.如果必须在某些地方允许NullPointerException怎么办

Joshua bloch在有效的Java中说:“可以说,所有错误的方法调用都可以归结为非法论点或非法状态,但是其他例外通常用于某些种类的非法论据和状态。如果调用者在某个参数中传递了null,而该参数禁止使用null值,则约定NullPointerException将抛出而不是IllegalArgumentException

因此,如果必须NullPointerException在代码的某些地方允许使用,则请确保使它们比通常具有更多的信息性看下面的例子:

package com.howtodoinjava.demo.npe;
 
public class SampleNPE {
    public static void main(String[] args) {
       // call one method at a time
       doSomething( null );
       doSomethingElse( null );
    }
 
    private static String doSomething( final String param) {
       System.out.println(param.toString());
       return "I am done !!" ;
    }
 
    private static String doSomethingElse( final String param) {
       if (param == null ) {
          throw new NullPointerException(
                " :: Parameter ''param'' was null inside method ''doSomething''." );
       }
       System.out.println(param.toString());
       return "I am done !!" ;
    }
}

这两个方法调用的输出是这样的:

Exception in thread "main" java.lang.NullPointerException
  at com.howtodoinjava.demo.npe.SampleNPE.doSomething(SampleNPE.java: 14 )
  at com.howtodoinjava.demo.npe.SampleNPE.main(SampleNPE.java: 8 )
 
Exception in thread "main" java.lang.NullPointerException:  :: Parameter ''param'' was null inside method ''doSomething'' .
  at com.howtodoinjava.demo.npe.SampleNPE.doSomethingElse(SampleNPE.java: 21 )
  at com.howtodoinjava.demo.npe.SampleNPE.main(SampleNPE.java: 8 )

显然,第二个堆栈跟踪更有用,并且使调试容易。

Android----java.lang.NullPointerException:---java.lang.NullPointerException:

Android----java.lang.NullPointerException:---java.lang.NullPointerException:

2021-03-06 13:26:12.274 8544-8544/com.example.helloworld E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.helloworld,PID: 8544
java.lang.NullPointerException:: Unable to start activity ComponentInfo{com.example.helloworld/com.example.helloworld.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setonCheckedchangelistener(android.widget.CompoundButton$OnCheckedchangelistener)' on a null object reference
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3897)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setonCheckedchangelistener(android.widget.CompoundButton$OnCheckedchangelistener)' on a null object reference
at com.example.helloworld.MainActivity.setListener(MainActivity.java:161)
at com.example.helloworld.MainActivity.onCreate(MainActivity.java:138)
at android.app.Activity.performCreate(Activity.java:8085)
at android.app.Activity.performCreate(Activity.java:8073)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3870)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:219) 
at android.app.ActivityThread.main(ActivityThread.java:8349) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) 
2021-03-06 13:26:12.282 8544-8544/com.example.helloworld I/Process: Sending signal. PID: 8544 SIG: 9

 

检查一下xml文件定义的checkBox的id和在activity里获取的id是否一致

问题出在运行时找不到对应的checkBox

 

 

Process: com.example.helloworld,PID: 21319
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.helloworld/com.example.helloworld.MoreActivity}: java.lang.illegalaccessexception: java.lang.class<com.example.helloworld.MoreActivity> is not accessible from java.lang.class<android.app.AppComponentFactory>
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3815)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
Caused by: java.lang.illegalaccessexception: java.lang.class<com.example.helloworld.MoreActivity> is not accessible from java.lang.class<android.app.AppComponentFactory>
at java.lang.class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
at android.app.Instrumentation.newActivity(Instrumentation.java:1264)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3800)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:219) 
at android.app.ActivityThread.main(ActivityThread.java:8349) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) 

 

这是在清单文件没有注册activity

所有的activity类都必须是public 的 不然清单文件找不到,所以就无法运行

 

java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference;

这和问题一是一样的,因为找不到对应的id

博主链接:https://blog.csdn.net/qq_42618969/article/details/81141895

 

 

 

 

页面布局常用:

android:id 为控件指定相应的ID
android:text 指定控件的文本,置尽量使用strings.xml
android:grivity 指定控件的基本位置 ,比如举重,居右,
android:padding 指定控件的内边距,控件当中的内容
android:singleLine 如果设置为真的话,则将控件的内容在同一行当中显示

android:layout_above 将该空间的底部至于给定ID的空间之上
android:layout_below: 将该控件的顶部至于给定ID的控件之下
android:layout_toLeftOf: 将该控件的右边缘和给定ID的控件的左 边缘对其
android:layout_toRightOf 将该控件的左边缘和给定的ID的控件的右边缘对齐

android:layout_alignBaseLine 该控件的baseline和给定ID的控件的Baseline对齐
android:layout_alignBottom 将该控件的底部边缘与给定ID控件的底部边缘
android:layout_alignLeft 将该控件左边缘与给定ID控件的左边缘对齐
android:layout_alignRight 将该控件的右边缘与给定ID控件的右边缘对齐
android:layout_alignTop 将给定控件的顶部边缘与给定ID控件的顶部对齐

android:alignParentBottom 如果该值为true 则将该控件的底部和父控件的底部对齐
android:layout_alignParentLeft 如果该值为true则将该控件的左边与父控件的左边对齐
android:layout_alignParentRight 如果该值为true则将该控件的右边与父控件的右边对齐
android:layout_alignParentTop 将控件的顶部与父控件的顶部对齐

android:layout_centerHorizontal 如果值为真,该控件将被至于水平方向的中央
android:layout_centerInParent 将被至于父控件水平方向和垂直都居中
android:layout_centerVertical 将被至于垂直方向的中央

第一类:属性值为true或false

android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物

第二类:属性值必须为id的引用名“@id/id-name”

android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

第三类:属性值为具体的像素值,如30dip,40px

android:layout_marginBottom 离父控件底边缘的距离
android:layout_marginLeft 离父控件左边缘的距离
android:layout_marginRight 离父控件右边缘的距离
android:layout_marginTop 离父控件上边缘的距离

EditText的android:hint
设置EditText为空时输入框内的提示信息。

android:gravity 
android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右

android:layout_gravity
android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,

android:layout_gravity=”right”则button靠右

android:layout_alignParentRight
使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。

padding和margin的区别:
所以padding是定义控件自己的内容和控件边缘之间的距离,padding有填充填料的意思,而margin是在说控件的四个边缘之外的距离,指的是和别的控件之间的距离,margin有边缘,页面留白的意思


原文链接:https://blog.csdn.net/qq_28296925/article/details/51115132

 

Exception in thread

Exception in thread "main" java.lang.NullPointerException到底哪里是空指向了啊?

  1. import java.util.*;
  2. class Word{
  3. private String enWord;
  4. private LinkedList<String> chParaphrase=new LinkedList<String>();
  5. public Word(String enWord){
  6. this.enWord=enWord;
  7. }
  8. public String getWord(){
  9. return enWord;
  10. }
  11. public void setParaphrase(String paraphrase){
  12. chParaphrase.add(paraphrase);
  13. }
  14. public String getParaphrase(){
  15. String retParaphrase="";
  16. Iterator<String> it=chParaphrase.iterator();
  17. while(it.hasNext()){
  18. retParaphrase+=it.next();
  19. retParaphrase+="\r\n";
  20. }
  21. return retParaphrase;
  22. }
  23. }
  24. class En2ChDict{
  25. Word[] word=new Word[5];
  26. HashMap<String,Word> hm=new HashMap<String,Word>();
  27. public En2ChDict(){
  28. word[0]=new Word("good");
  29. word[0].setParaphrase("n.善行,好处");
  30. word[0].setParaphrase("a.好的,优良的,上等的");
  31. word[0].setParaphrase("[p1].商品");
  32. word[1]=new Word("bad");
  33. word[1].setParaphrase("a.坏的");
  34. for(int i=0;i<word.length;i++){
  35. hm.put(word[i].getWord().toLowerCase(),word[i]);
  36. }
  37. }
  38. public String queryWord(String enWord){
  39. Word word=hm.get(enWord.toLowerCase());
  40. String chParaphrase;
  41. if(word!=null){
  42. chParaphrase=word.getParaphrase();
  43. }else{
  44. chParaphrase="未找到该单词!\r\n";
  45. }
  46. return chParaphrase;
  47. }
  48. }
  49. public class TestWord{
  50. public static void main(String args[])throws Exception{
  51. En2ChDict ecd=new En2ChDict();
  52. String enWord;
  53. while(true){
  54. enWord=new Scanner(System.in).next();
  55. if(enWord.equals("-1")){
  56. break;
  57. }
  58. System.out.println(ecd.queryWord(enWord));
  59. }
  60. }
  61. }
  62. 执行的时候提示:
  63. Exception in thread "main" java.lang.NullPointerException
  64.         at En2ChDict.<init>(TestWord.java:38)
  65.         at TestWord.main(TestWord.java:56)

Java Array数组错误 Exception in thread

Java Array数组错误 Exception in thread "main" java.lang.NullPointerException

Array数组必须指定length

比如,

public class test{
   private String name;
   private String pwd;
   private String[] account=new String[3];
   public test(String a, String b,String c,String d,String f){
       name=a;
       pwd=b;
       account[0]=c;
       account[1]=d;
       account[2]=f;

       //这地方不报空指针才怪
       account[3]=f;
   }
   public static void main(String[] args){
       test newTest = new test("1","2","2","2","2"); 
       System.out.print(newTest.account[0]);
   }

}

 

java 出现“Exception in thread

java 出现“Exception in thread "main" java.lang.NullPointerException”

我是java初学者,种植学写一个小程序“学生成绩管理系统”,在51自学网上学习的。现在遇到一个问题如下:

Exception in thread "main" java.lang.NullPointerException
    at Admin.print(Admin.java:8)
    at Admin.create(Admin.java:35)
    at Text.main(Text.java:23)

所有代码如下
请大神门帮忙看一下问题出在哪里????
第一个文件 定义类文件

public class Student {
    private int on;
    private String name;
    private int age;
    private int java;
    private int C_shar;
    private int html;
    private int sql;
    private int sum;
    private int avg;
    public int getOn() {
        return on;
    }
    public void setOn(int on) {
        this.on = on;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getJava() {
        return java;
    }
    public void setJava(int java) {
        this.java = java;
    }
    public int getC_shar() {
        return C_shar;
    }
    public void setC_shar(int c_shar) {
        C_shar = c_shar;
    }
    public int getHtml() {
        return html;
    }
    public void setHtml(int html) {
        this.html = html;
    }
    public int getSql() {
        return sql;
    }
    public void setSql(int sql) {
        this.sql = sql;
    }
    public int getSum() {
        return sum;
    }
    public void setSum() {
        this.sum = this.java+C_shar+this.html+this.sql;
    }
    public int getAvg() {
        return avg;
    }
    public void setAvg() {
        this.avg =this.sum/4;
    }
    public String toString(){
        String msg="\t"+this.on+"\t"+this.name+"\t"+this.age+"\t"+this.java+"\t"
        +C_shar+"\t"+this.html+"\t"+this.sql+"\t"+this.sum+"\t"+this.avg;    
        return msg;
    }
}
第二个文件 主程序文件
import java.util.*;
public class Text {//主程序
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        //System.out.println("—请定义人数—");
        Student[] stuArr=new Student[4];
        Admin adminStu=new Admin();
        while(true){
            System.out.println("10:添加一个学生");
            System.out.println("11:查找一个学生");
            System.out.println("12:根据编号更新学生的基本信息");
            System.out.println("13:根据编号删除学生");
            System.out.println("14:根据编号输入学生的各门成绩");
            System.out.println("15:根据某一门成绩进行排序");
            System.out.println("16:根据总分进行排序");
            System.out.println("99:退出系统");
            int number=in.nextInt();
            if(number==10){
                System.out.println("请输入学生姓名");
                String name=in.next();
                System.out.println("请输入学生年龄");
                int age=in.nextInt();
                adminStu.create(name,age,stuArr);    //添加学生
            }else if(number==11){
                System.out.println("执行查找学生的基本信息操作");
                System.out.println("请输入学生编号进行查找");
                int on=in.nextInt();
                adminStu.select(on,stuArr);
            }else if(number==12){
                System.out.println("执行更新学生的基本信息操作");
                System.out.println("请输入学生编号");
                int on=in.nextInt();
                System.out.println("请输入学生姓名:");
                String name=in.next();
                System.out.println("请输入学生年龄:");
                int age=in.nextInt();
                adminStu.update(on,name,age,stuArr);
            }else if(number==13){
                System.out.println("执行删除学生操作");
                System.out.println("请输入学生编号");
                int on=in.nextInt();
                adminStu.delate(on,stuArr);

            }else if(number==14){
                System.out.println("执行输入成绩操作");
                System.out.println("请输入学生编号");
                int on=in.nextInt();
                adminStu.input(on,stuArr);            
            }
        }

    }

}
第三个文件:方法文件
import java.util.*;
public class Admin {//用来管理学生的类    
    String msg="\t编号\t姓名\t年龄\tjava\tC#\thtml\tsql\t总分\t平均分";
    public void print(Student[] arr){
        System.out.println(msg);
        for(int i=0;i<arr.length;i++){
            if(arr!=null){
                arr[i].setSum();
                arr[i].setAvg();
                System.out.println(arr[i]);
            }
        }
    }
    public boolean exist(int on,Student stu){//判断学生是否存在
        if(stu!=null){
            if(stu.getOn()==on){
                return true;
            }else{
                return false;
            }
        }
        return false;
    }
    public void create(String name,int age,Student[] arr){
        Student stu=new Student();
        stu.setName(name);
        stu.setAge(age);
        int i=this.setIndex(arr);
        stu.setOn(i);
        if(i==9999){
            System.out.println("学生人数已达到最大");
        }else{
            arr[i]=stu;
        }
        this.print(arr);
    }
    public int setIndex(Student[] arr){//返回为空的下标
        for(int i=0;i<arr.length;i++){
            if(arr[i]==null){
                return i;}
        }
        return 9999;
    }
    public void select(int on,Student[] arr){//查询方法
        System.out.println(msg);
        for (int i=0;i<arr.length;i++){
            if(this.exist(on, arr[i])==true){
                System.out.println(msg);
                System.out.println(arr[i]);
                return;
            }
        }
        System.out.println("没有这个人");
    }
    public void update(int on,String name,int age,Student arr[]){//更新学员信息
//        更新学员信息
        for(int i=0;i<arr.length;i++){
            if(this.exist(on, arr[i])){
                arr[i].setName(name);
                arr[i].setAge(age);
                System.out.println("******更新学生信息成功******");
                this.print(arr);    
                return;
            }
        }
        System.out.println("******更新信息没有成功******");
    }
    public void delate(int on,Student[] arr){
        for(int i=0;i<arr.length;i++){
            if(this.exist(on, arr[i])){
                arr[i]=null;
                this.print(arr);
                return;
            }
        }
        System.out.println("没有这个学生存在");
    }
    public void input(int on,Student[] arr){//输入学生成绩
        for(int i=0;i<arr.length;i++){
            if(this.exist(on, arr[i])==true){
                System.out.println("请输入"+arr[i].getName()+"java成绩:");
                Scanner in=new Scanner(System.in);
                arr[i].setJava(in.nextInt());
                System.out.println("请输入"+arr[i].getName()+"C#成绩:");
                arr[i].setC_shar(in.nextInt());
                System.out.println("请输入"+arr[i].getName()+"html成绩:");
                arr[i].setHtml(in.nextInt());
                System.out.println("请输入"+arr[i].getName()+"SQL成绩:");
                arr[i].setSql(in.nextInt());
                this.print(arr);
                break;

            }
        }
    }
    

}

今天关于Java NullPointerException-如何在Java中有效处理空指针java空指针问题如何解决的分享就到这里,希望大家有所收获,若想了解更多关于Android----java.lang.NullPointerException:---java.lang.NullPointerException:、Exception in thread "main" java.lang.NullPointerException到底哪里是空指向了啊?、Java Array数组错误 Exception in thread "main" java.lang.NullPointerException、java 出现“Exception in thread "main" java.lang.NullPointerException”等相关知识,可以在本站进行查询。

本文标签: