在这篇文章中,我们将带领您了解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空指针问题如何解决)
- 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是未经检查的异常,并且进行了扩展RuntimeException
。NullPointerException不会强制我们使用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可能会出现在代码中的任何位置,但是我根据自己的经验准备了最常出现的地点清单。
- 在未初始化的对象上调用方法
- 方法中传递的参数是
null
- 调用
toString()
对象的方法是null
- 在
if
不检查null
相等性的情况下比较块中的对象属性 - 对于像Spring这样的依赖注入的框架来说,配置不正确
synchronized
在一个对象上使用null
- 链接的语句,即单个语句中的多个方法调用
这不是详尽的清单。还有其他几个地方和原因。如果您还可以回忆起其他任何内容,请发表评论。它也会帮助其他人(初学者)。
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
&& 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:
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
博主链接:
页面布局常用:
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 "main" java.lang.NullPointerException到底哪里是空指向了啊?
- import java.util.*;
- class Word{
- private String enWord;
- private LinkedList<String> chParaphrase=new LinkedList<String>();
- public Word(String enWord){
- this.enWord=enWord;
- }
- public String getWord(){
- return enWord;
- }
- public void setParaphrase(String paraphrase){
- chParaphrase.add(paraphrase);
- }
- public String getParaphrase(){
- String retParaphrase="";
- Iterator<String> it=chParaphrase.iterator();
- while(it.hasNext()){
- retParaphrase+=it.next();
- retParaphrase+="\r\n";
- }
- return retParaphrase;
- }
- }
- class En2ChDict{
- Word[] word=new Word[5];
- HashMap<String,Word> hm=new HashMap<String,Word>();
- public En2ChDict(){
- word[0]=new Word("good");
- word[0].setParaphrase("n.善行,好处");
- word[0].setParaphrase("a.好的,优良的,上等的");
- word[0].setParaphrase("[p1].商品");
- word[1]=new Word("bad");
- word[1].setParaphrase("a.坏的");
- for(int i=0;i<word.length;i++){
- hm.put(word[i].getWord().toLowerCase(),word[i]);
- }
- }
- public String queryWord(String enWord){
- Word word=hm.get(enWord.toLowerCase());
- String chParaphrase;
- if(word!=null){
- chParaphrase=word.getParaphrase();
- }else{
- chParaphrase="未找到该单词!\r\n";
- }
- return chParaphrase;
- }
- }
- public class TestWord{
- public static void main(String args[])throws Exception{
- En2ChDict ecd=new En2ChDict();
- String enWord;
- while(true){
- enWord=new Scanner(System.in).next();
- if(enWord.equals("-1")){
- break;
- }
- System.out.println(ecd.queryWord(enWord));
- }
- }
- }
- 执行的时候提示:
- Exception in thread "main" java.lang.NullPointerException
- at En2ChDict.<init>(TestWord.java:38)
- at TestWord.main(TestWord.java:56)
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 "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”等相关知识,可以在本站进行查询。
本文标签: