我在一个捕获例外程序中使用if(textAge.getText()==null)时捕捉不到例外,但是使用if(textAge.getText().length()==0)时却可以捕获到例外,各位大大帮忙解释下文本长度为零与文本为空的区别,由于程序代码较长,就不列出具体程序了。

解决方案 »

  1.   

    textAge.getText()如果返回一个空指针的话再调用length()方法就会是空指针异常了
    Object o = textAge.getText();
    o.length();//如果o==null,这句就报错
      

  2.   

    textAge.getText()如果返回一个空指针的话再调用length()方法就会是空指针异常了
    Object o = textAge.getText();
    o.length();//如果o==null,这句就报错恩,我不是在找nullpointexception的,textAge已经定义过了, 现在是返回别的异常,小弟的意思是“文本长度为零与文本为空的区别”,想弄清出这两个概念的区别,我的想法是他们涵义一样,就是在实际应用中好象有差别哦!附上代码:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    class nameException extends Exception{
    public String getMessage(){
    return "姓名长度不能为空,也不能超过10个";
    }
    }
    class ageException extends Exception{
    public String getMessage(){
    return "年龄不能为空";
    }
    }
    class ageNumException extends Exception{
    public String getMessage(){
    return "20岁以下和40岁以上免进";
    }
    }
    public class GBLDemo extends JApplet{
    GridBagLayout gbl;
    GridBagConstraints gbc;
    JPanel panel;
    JLabel labelName,labelId,labelSex,labelAge,labelAdd,labelStat,labelGrade;
    JTextField textName,textId,textAge,textAdd;
    JComboBox comboxSex,comboxStat,comboxGrade;
    JButton button1,button2;
    public void init(){

    gbl=new GridBagLayout();
    gbc=new GridBagConstraints();
    panel=new JPanel();
    panel.setSize(500,500);
    panel.setVisible(true);
    panel.setLayout(gbl);
    getContentPane().add(panel);

    labelName=new JLabel("姓名");
    labelId=new JLabel("编号");
    labelSex=new JLabel("性别");
    labelAge=new JLabel("年龄");
    labelAdd=new JLabel("地址");
    labelStat=new JLabel("籍贯");
    labelGrade=new JLabel("年级");
    textName=new JTextField(6);
    textId=new JTextField(6);
    textAge=new JTextField(3);
    textAdd=new JTextField(30);
    String strSex[]={"男","女"};
    comboxSex=new JComboBox(strSex);
    String strStat[]={"河南","山东","河北"};
    comboxStat=new JComboBox(strStat);
    String strGrade[]={"初一","初二","初三"};
    comboxGrade=new JComboBox(strGrade);
    button1=new JButton("Ok");
    button2=new JButton("Cancel");

    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=1;
    gbc.gridy=5;
    gbl.setConstraints(labelName,gbc);
    panel.add(labelName);
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=6;
    gbc.gridy=5;
    gbl.setConstraints(textName,gbc);
    panel.add(textName);

    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=1;
    gbc.gridy=9;
    gbl.setConstraints(labelId,gbc);
    panel.add(labelId);
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=6;
    gbc.gridy=9;
    gbl.setConstraints(textId,gbc);
    panel.add(textId);

    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=1;
    gbc.gridy=13;
    gbl.setConstraints(labelSex,gbc);
    panel.add(labelSex);
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=6;
    gbc.gridy=13;
    gbl.setConstraints(comboxSex,gbc);
    panel.add(comboxSex);

    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=1;
    gbc.gridy=17;
    gbl.setConstraints(labelAge,gbc);
    panel.add(labelAge);
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=6;
    gbc.gridy=17;
    gbl.setConstraints(textAge,gbc);
    panel.add(textAge);

    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=1;
    gbc.gridy=25;
    gbl.setConstraints(labelStat,gbc);
    panel.add(labelStat);
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=6;
    gbc.gridy=25;
    gbl.addLayoutComponent(comboxStat,gbc);
    panel.add(comboxStat);

    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=1;
    gbc.gridy=29;
    gbl.setConstraints(labelGrade,gbc);
    panel.add(labelGrade);
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=6;
    gbc.gridy=29;
    gbl.setConstraints(comboxGrade,gbc);
    panel.add(comboxGrade);

    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=1;
    gbc.gridy=21;
    gbl.setConstraints(labelAdd,gbc);
    panel.add(labelAdd);
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.gridx=6;
    gbc.gridy=21;
    gbl.setConstraints(textAdd,gbc);
    panel.add(textAdd);

    gbc.anchor=GridBagConstraints.SOUTH;
    gbc.gridx=80;
    gbc.gridy=150;
    gbl.setConstraints(button1,gbc);
    panel.add(button1);
    gbc.anchor=GridBagConstraints.SOUTH;
    gbc.gridx=100;
    gbc.gridy=150;
    gbl.setConstraints(button2,gbc);
    panel.add(button2);

    buttonAction actionButton=new buttonAction();
    button1.addActionListener(actionButton);
    }
    class buttonAction implements ActionListener{
    public void actionPerformed(ActionEvent e){
    getAppletContext().showStatus("");
    Object obj=e.getSource();
    if(obj==button1){
    try{
    String tname=textName.getText();
    textName.setRequestFocusEnabled(true);
    if(tname.length()==0||tname.length()>=10)
    {
    throw new nameException();
    }
    }
    catch(nameException ex){ System.out.println(ex.getMessage());
    }
    try{

    //if(textAge.getText().length()==0)
    if(textAge.getText()==null)
    {
    throw new ageException();
    }
    }
    catch(ageException exc)
    {
    System.out.println(exc.getMessage());

    }

    try{
            int tage=Integer.parseInt(textAge.getText());
    if ((tage<=20)||(tage>=40))
    {
    throw new ageNumException();
    }
    }
    catch(ageNumException exc)
    {
         System.out.println(exc.getMessage());
    }

    }

    }

    }
    }
      

  3.   

    区别:一个是对象有没有(null),一个是内容有没有(length/length() ==0)
    以数组为例:
    int[] i ={};//new int[0];
    int[] j = null;
    if(i==null){System.out.print("i=="+i);}
    if(j==null){System.out.print("j=="+j);}
      

  4.   

    严兄的回答有那么一种感觉,小弟学java不是很久,一些概念似懂非懂的,多谢指教
      

  5.   

    或者:
    String s="";
    String s=null;集合论中 fai 与{fai}的区别
      

  6.   

    textAge.getText()=null
    textAge.getText表示一个空引用  没有被分配内存
    textAge.getText().length()==0
    textAge.getText表示引用了一个长度为0的字符串 其被分配了内存
      

  7.   

    非null后,才具备说长度的条件;是充分条件关系
      

  8.   

    null说明那个变量根本就没有引用到一个String对象。
    非null才说明那个变量已经引用到一个String对象,而一个String对象,其字符串长度可能是0,也可能不是0。
      

  9.   

    恩,收到,明白,但是分给那位大大呢?好为难哦,给photicx(),大家没意见吧?
      

  10.   

    String str = null;  //空引用,对对象的引用为null
    String str = "";  //空串,str.length()=0List list = null;  //空引用
    List list = new LinkedList();  //空表,list.size()=0int[] a = null;   //空引用
    int[] a = new int[0];   //空数组,a.length=0
    可以参见《.NET Framework SDK 文档》中的“参考\类库开发人员设计指南\数组使用指南”一节
    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpgenref/html/cpconarrayusageguidelines.asp