日期:2014-05-20  浏览次数:20667 次

这个程序为什么要加static?
对于下面这个程序在子类中
一,为什么要用static修饰?
二,在方法minmax为什么也要用static 修饰?
三,<String>是否可以去掉,我试了一下,是可以的,但是不是有的情况下不可以?

public class Test
{
public static void main(String[] args)
{
String[] words = {"Mary", "had", "a", "little", "lamb"};
A.B mm = A.minmax(words);
System.out.println("min = " + mm.getFirst());
System.out.println("max = " + mm.getSecond());
}
}

class A
{
public static class B<String>
{
private String first;
private String second;

public B(String first, String second)
{
 this.first = first;
 this.second = second;
}
public String getFirst()
{
return first;
}
public String getSecond()
{
return second;
}
}

public static B<String> minmax(String[] a)
{
if(a==null || a.length==0)
{
return null;
}

String min = a[0];
String max = a[0];

for(int i=1; i<a.length; i++)
  {
   if(min.compareTo(a[i])>0)
   {
     min = a[i];
   }
   if(max.compareTo(a[i])<0)
   {
   max = a[i];
   }
  }
  
  return new B<String>(min, max);
}
}

------解决方案--------------------
方法声明为static时,可以直接通过类名.方法名来调用。
------解决方案--------------------
一,为什么要用static修饰?
static表示静态的,不需要new操作,就可以直接调用。建议LZ把static去掉,看看怎么修改代码,才能让它正常执行。
二,在方法minmax为什么也要用static 修饰?
A.minmax,这是用类名标注的方式调用,因此要为静态的。如果去掉static,那么调用此方法,需要new一个A的对象,通过对象引用调用。
三,<String>是否可以去掉,我试了一下,是可以的,但是不是有的情况下不可以?
可以去掉。这是泛型检查。如果不检查,传了一个其它类型的对象进去,可能会在代码执行的时候报错。加泛型的好处是,在编译时就做了类型判断,这样如果误传类型对象,可以在编译时报错。


------解决方案--------------------
class A没有 minmax这个方法。
------解决方案--------------------
static表示静态的,不需要new操作,就可以直接调用
方法minmax  如果去掉 需要new一个
------解决方案--------------------
一.static修饰的类或方法或属性,都是类相关的,与类实例化的对象无关,因此只需使用类名就可以使用static修改时的任何成员。
二.A.B mm = A.minmax(words);若想在B类实例化对象之前调用B类的方法,那么该方法必须为类相关,因此需要用static修饰。
三.<String>任何情况下都可以去掉,这是java泛型的内容,加上<String>将类局限于只对String类型进行描述,如果不加的话,则可以对所有类型进行描述。