字符串数组和对象数组问题1对照教材写一个字符串数组
 String[] str;
 str[1]="2323";
  System.out.println(str[1].toString());
结果Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
The local variable str may not have been initialized
The local variable str may not have been initialized at ShowInnodbStatus.main(ShowInnodbStatus.java:20)a 记得字符串数组一定要有长度??否则就是vector,或者解释数组和vector区别?
b 如何解决上面问题2对象数组问题
如Object[] obj;
这里不知道如何才能赋值给这个对象数组的对象值。

解决方案 »

  1.   

    String[] str=new String[2];
    str[1]="2323"; Object[] obj=new Object[3];
    Object[0]="123";  
      

  2.   

    感谢楼上
    1 数组一定有长度,假如我的数据数组长度不确定,只能选择vector
    可以给vector的用法例子?
    2 Object[] obj=new Object[3]; 
    Obj[0]="123";   
    是ok,  现在我想把另外1个类对象赋给这个obj
    how to do?
      

  3.   

    1 Vector v=new Vector()
      v.add(a);
    2 obj[0]=另外1个类对象
      

  4.   

    感谢楼上
    Vector v=new Vector() 
    发生一个错误 
    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Vector cannot be resolved to a type
    Vector cannot be resolved to a type
    a cannot be resolved
    at ShowInnodbStatus.main(ShowInnodbStatus.java:28)
    是否需要limport?另外看到Iterator 和  Entry更令人头痛哦
    Iterator<Entry<Integer, List>> 
      

  5.   

    导入包啊
    import java.util.Vector;
      

  6.   

    import java.util.* 解决引用问题
      Vector v=new Vector(); 
      v.add(a);----这个导致新的错误
    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    a cannot be resolved at ShowInnodbStatus.main(ShowInnodbStatus.java:31)
    是否方法用的不正确  。 我得找本书看看。
      

  7.   

    都搞什么啊,数组在使用前一定要初始化,指定一定的长度;现在也不推荐使用Vector,而是其它List的实现类
      

  8.   

    Vector有一个很大的好处,他可以不限制数组长度,
    正好满足要求啦---这是需求决定的
      

  9.   

    package usehashtable;     
    import java.util.Vector;     
    import java.util.Enumeration;     
    /**    
    *    
    * @author Administrator    
    */     
    public class UseVector {     
          
      Vector mainv=new Vector();     
      /** Creates a new instance of Vector */     
      public UseVector() {     
      }     
      public void setVector(){     
         
      //按照如下实例你可以存取数据库中一条记录里所有的字段值     
      Vector v1=new Vector();     
      v1.add("1");     
      v1.add("a");     
      v1.add("1a");     
      mainv.add(v1);     
      Vector v2=new Vector();     
      v2.add("2");     
      v2.add("b");     
      v2.add("2b");     
      mainv.add(v2);     
      Vector v3=new Vector();     
      v3.add("3");     
      v3.add("c");     
      v3.add("3c");     
      mainv.add(v3);     
      }     
      public void getVector(){     
      for(int i=0;i<3;i++)     
      {     
      for(int j=0;j<3;j++)     
      {     
      System.out.print(checkNull(i,j)+" ");     
      }     
      System.out.println("");     
      }     
          
      }     
         
      //只有值不为空时才返回他的值     
      public String checkNull(int row,int col)     
      {     
      try {     
      if(!((String)((Vector)mainv.elementAt(row)).elementAt(col)).trim().equals(null)){     
      return ((String)((Vector)mainv.elementAt(row)).elementAt(col));     
      }     
      else return "";     
      } catch(Exception e){     
      return "";     
      }     
      }     
      public static void main(String[] args){     
      UseVector uv=new UseVector();     
      uv.setVector();     
      uv.getVector();     
      }     
    }  
      

  10.   

    你a都没有,就用vector往里面add啊。另外,Vector不推荐使用了,使用List吧
      

  11.   

    简单点回答就二句话,
    1.局部变量不能自动初始化.
    2.如果要用list,vector,map就需要引入包import java.util.*;即可.
      

  12.   

    “Vector不推荐使用了,使用List吧???”
    请问下面代码可以用list替换吗??   (我换了编译没有问题 结果页面不能出来)
    public static Vector search(String strSql)throws Exception{
          Vector addressbookBeans=new Vector();
        
          Connection con= DbUtil.connectToDb();
          PreparedStatement pStmt=null;
          ResultSet rs=null;
          try{
            pStmt=con.prepareStatement(strSql);
            rs=pStmt.executeQuery();
            while(rs.next())
              addressbookBeans.add(new AddressBookBean(
              rs.getString("NAME"),rs.getString("PHONE"),rs.getString("ADDRESS")));        return addressbookBeans;
          }finally{
              try{
                rs.close();
                pStmt.close();
                con.close();
              }catch(Exception e){e.printStackTrace();}
          }
       }
    另外一个地方调用
    Vector addressBookBeans=AddressBookBean.search(strSql);                out.println("<table border=\"2\" cellspacing=\"0\" cellpadding=\"0\">");
                    out.println("<tr>");
                    out.println("<th BGCOLOR=\"#00FF00\"><b>Name</b></th>");
                    out.println("<th BGCOLOR=\"#00FF00\"><b>Phone<b></th>");
                    out.println("<th BGCOLOR=\"#00FF00\"><b>Address</b></th>");
                    out.println("</tr>");                for(int i=0;i<addressBookBeans.size();i++)
                    {
                            AddressBookBean bean=(AddressBookBean)addressBookBeans.elementAt(i);
                            out.println("<tr>");
                            out.println("<td>"+ bean.getName() + "</td>");
                            out.println("<td>"  +bean.getPhone() + "</td>");
                            out.println("<td>"+bean.getAddress()+"</td>");
                    }                out.println("</table>");按照 superheizai的说法,我将vector换成list,结果编译没有问题 数据不能出来
      

  13.   

    Java语言基础知识之字符串数组
    java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。2.4.1 一维数组 1. 一维数组的定义  type arrayName[ ];
      类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。
      例如:
       int intArray[ ];
       Date dateArray[];
     2.一维数组的初始化  ◇ 静态初始化
        int intArray[]={1,2,3,4};
        String stringArray[]={"abc", "How", "you"};  ◇ 动态初始化 
        1)简单类型的数组
        int intArray[]; 
        intArray = new int[5];   2)复合类型的数组
        String stringArray[ ];
        String stringArray = new String[3];/*为数组中每个元素开辟引用
                          空间(32位) */
        stringArray[0]= new String("How");//为第一个数组元素开辟空间 
        stringArray[1]= new String("are");//为第二个数组元素开辟空间
        stringArray[2]= new String("you");// 为第三个数组元素开辟空间 3.一维数组元素的引用  数组元素的引用方式为:
         arrayName[index]  index为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。2.4.2 多维数组  Java语言中,多维数组被看作数组的数组。 1.二维数组的定义  type arrayName[ ][ ];
      type [ ][ ]arrayName; 2.二维数组的初始化  ◇ 静态初始化
      int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};  Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。  ◇ 动态初始化
      1) 直接为每一维分配空间,格式如下:
      arrayName = new type[arrayLength1][arrayLength2];
      int a[ ][ ] = new int[2][3];  2) 从最高维开始,分别为每一维分配空间:
      arrayName = new type[arrayLength1][ ];
      arrayName[0] = new type[arrayLength20];
      arrayName[1] = new type[arrayLength21];
      …
      arrayName[arrayLength1-1] = new type[arrayLength2n];  3) 例:
      二维简单数据类型数组的动态初始化如下,
      int a[ ][ ] = new int[2][ ];
      a[0] = new int[3];
      a[1] = new int[5];  对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。
      而且,必须为每个数组元素单独分配空间。  例如:
      String s[ ][ ] = new String[2][ ];
      s[0]= new String[2];//为最高维分配引用空间
      s[1]= new String[2]; //为最高维分配引用空间
      s[0][0]= new String("Good");// 为每个数组元素单独分配空间
      s[0][1]= new String("Luck");// 为每个数组元素单独分配空间
      s[1][0]= new String("to");// 为每个数组元素单独分配空间
      s[1][1]= new String("You");// 为每个数组元素单独分配空间 3.二维数组元素的引用
      
      对二维数组中的每个元素,引用方式为:arrayName[index1][index2]
      例如: num[1][0]; 4.二维数组举例:【例2.2】两个矩阵相乘
      public class MatrixMultiply{
       public static void main(String args[]){
       int i,j,k;
       int a[][]=new int [2][3]; //动态初始化一个二维数组
       int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};//静态初始化
                               一个二维数组
       int c[][]=new int[2][4]; //动态初始化一个二维数组
       for (i=0;i<2;i++)
         for (j=0; j<3 ;j++)
          a[i][j]=(i+1)*(j+2);
       for (i=0;i<2;i++){
         for (j=0;j<4;j++){
          c[i][j]=0;
       for(k=0;k<3;k++)
         c[i][j]+=a[i][k]*b[k][j];
          }
         }
       System.out.println("*******Matrix C********");//打印Matrix C标记
       for(i=0;i<2;i++){
         for (j=0;j<4;j++)
          System.out.println(c[i][j]+" ");
         System.out.println();
          }
         }
       }2.5 字符串的处理2.5.1 字符串的表示  Java语言中,把字符串作为对象来处理,类String和StringBuffer都可以用来表示一个字符串。(类名都是大写字母打头) 1.字符串常量  字符串常量是用双引号括住的一串字符。
        "Hello World!" 2.String表示字符串常量  用String表示字符串:
      String( char chars[ ] );
      String( char chars[ ], int startIndex, int numChars );
      String( byte ascii[ ], int hiByte );
      String( byte ascii[ ], int hiByte, int startIndex, int numChars );
      String使用示例:
      String s=new String() ; 生成一个空串  下面用不同方法生成字符串"abc":
      char chars1[]={'a','b','c'};
      char chars2[]={'a','b','c','d','e'};
      String s1=new String(chars1);
      String s2=new String(chars2,0,3);
      byte ascii1[]={97,98,99};
      byte ascii2[]={97,98,99,100,101};
      String s3=new String(ascii1,0);
      String s4=new String(ascii2,0,0,3); 3.用StringBuffer表示字符串  StringBuffer( ); /*分配16个字符的缓冲区*/
      StringBuffer( int len ); /*分配len个字符的缓冲区*/
      StringBuffer( String s ); /*除了按照s的大小分配空间外,再分配16个
                   字符的缓冲区*/2.5.2 访问字符串  1.类String中提供了length( )、charAt( )、indexOf( )、lastIndexOf( )、getChars( )、getBytes( )、toCharArray( )等方法。  ◇ public int length() 此方法返回字符串的字符个数
      ◇ public char charAt(int index) 此方法返回字符串中index位置上的字符,其中index 值的 范围是0~length-1
      ◇ public int indexOf(int ch)
        public lastIndexOf(in ch)
      
      返回字符ch在字符串中出现的第一个和最后一个的位置
      ◇ public int indexOf(String str)
        public int lastIndexOf(String str)
      返回子串str中第一个字符在字符串中出现的第一个和最后一个的位置 
      ◇ public int indexOf(int ch,int fromIndex)
        public lastIndexOf(in ch ,int fromIndex)
      返回字符ch在字符串中位置fromIndex以后出现的第一个和最后一个的位置
      ◇ public int indexOf(String str,int fromIndex)
        public int lastIndexOf(String str,int fromIndex)
      返回子串str中的第一个字符在字符串中位置fromIndex后出现的第一个和最后一个的位置。
      ◇ public void getchars(int srcbegin,int end ,char buf[],int dstbegin)
       srcbegin 为要提取的第一个字符在源串中的位置, end为要提取的最后一个字符在源串中的位置,字符数组buf[]存放目的字符串,    dstbegin 为提取的字符串在目的串中的起始位置。 
      ◇public void getBytes(int srcBegin, int srcEnd,byte[] dst, int dstBegin)
      参数及用法同上,只是串中的字符均用8位表示。 2.类StringBuffer提供了 length( )、charAt( )、getChars( )、capacity()等方法。  方法capacity()用来得到字符串缓冲区的容量,它与方法length()所返回的值通常是不同的。2.5.3 修改字符串  修改字符串的目的是为了得到新的字符串,类String和类StringBuffer都提供了相应的方法。有关各个方法的使用,参考java 2 API。 1.String类提供的方法:   concat( )
       replace( )
       substring( )
       toLowerCase( )
       toUpperCase( )  ◇ public String contat(String str);
      用来将当前字符串对象与给定字符串str连接起来。
      ◇ public String replace(char oldChar,char newChar);
      用来把串中出现的所有特定字符替换成指定字符以生成新串。
      ◇ public String substring(int beginIndex);
      public String substring(int beginIndex,int endIndex);
      用来得到字符串中指定范围内的子串。
      ◇ public String toLowerCase();
      把串中所有的字符变成小写。
      ◇ public String toUpperCase();
      把串中所有的字符变成大写。 2.StringBuffer类提供的方法:  append( )
      insert( )
      setCharAt( )  如果操作后的字符超出已分配的缓冲区,则系统会自动为它分配额外的空间。
      ◇ public synchronized StringBuffer append(String str);
      用来在已有字符串末尾添加一个字符串str。
      ◇ public synchronized StringBuffer insert(int offset, String str);
      用来在字符串的索引offset位置处插入字符串str。
      ◇ public synchronized void setCharAt(int index,char ch);
      用来设置指定索引index位置的字符值。   注意:String中对字符串的操作不是对源操作串对象本身进行的,而是对新生成的一个源操作串对象的拷贝进行的,其操作的结果不影响源串。  相反,StringBuffer中对字符串的连接操作是对源串本身进行的,操作之后源串的值发生了变化,变成连接后的串。2.5.4 其它操作  1.字符串的比较  String中提供的方法:
      equals( )和equalsIgnoreCase( )
      它们与运算符'= ='实现的比较是不同的。运算符'= ='比较两个对象是否引用同一个实例,而equals( )和equalsIgnoreCase( )则比较  两个字符串中对应的每个字符值是否相同。 2.字符串的转化  java.lang.Object中提供了方法toString( )把对象转化为字符串。 3.字符串"+"操作  运算符'+'可用来实现字符串的连接:
      String s = "He is "+age+" years old.";
      其他类型的数据与字符串进行"+"运算时,将自动转换成字符串。具体过程如下:
      String s=new StringBuffer("he is").append(age).append("years old").toString();  注意:除了对运算符"+"进行了重载外,java不支持其它运算符的重载。【本讲小结】  java中的数据类型有简单数据类型和复合数据类型两种,其中简单数据类型包括整数类型、浮点类型、字符类型和布尔类型;复合数据类型包含类、接口和数组。表达式是由运算符和操作数组成的符号序列,对一个表达式进行运算时,要按运算符的优先顺序从高向低进行,同级的运算符则按从左到右的方向进行。条件语句、循环语句和跳转语句是java中常用的控制语句。  数组是最简单的复合数据类型,数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。Java中,对数组定义时并不为数组元素分配内存,只有初始化后,才为数组中的每一个元素分配空间。已定义的数组必须经过初始化后,才可以引用。数组的初始化分为静态初始化和动态初始化两种,其中对复合数据类型数组动态初始化时,必须经过两步空间分配:首先,为数组开辟每个元素的引用空间;然后,再为每个数组元素开辟空间。Java中把字符串当作对象来处理, java.lang.String类提供了一系列操作字符串的方法,使得字符串的生成、访问和修改等操作容易和规范。