在学习内部类和泛型类时遇到的一个代码例子,编写一个Pair类,用于返回字符串比较的两个结果。
可以帮助理解:
“引用非静态方法只能通过实例化对象后 通过对象名点方法名来访问 而静态方法可以通过 类名点方法名或者对象名点方法名来访问”
package HeXin8;
/**
* 泛型类和内部类的一个简单应用
* 有关Static的理解
* @author DELL
*/
public class PairTest1 {
public static void main(String[] args) {
String[] words = {"Mary","had","a","little","lamb"};
var mm = new ArrayAlg();
System.out.println("min = " + mm.minmax(words).getFirst());
System.out.println("max = " + mm.minmax(words).getSecond());
/**
* 另一种方法
* 当下面的内部类Pair和minmax被定义为静态内部类时,可以直接在main()方法中调用对象名字,如:
* ArrayAly.Pair mm = ArrayAly.minmax(words) //此处直接使用了
* System.out.println("min = " + mm.getFirst());
* System.out.println("max = " + mm.getSecond());
*/
}
}
class ArrayAlg{
public class Pair {
private String first;
private String second;
//无参
public Pair(){}
//有参
public Pair(String first,String second){
this.first = first;
this.second = second;
}
public String getFirst() {
return first;
}
public String getSecond() {
return second;
}
public void setFirst(String first) {
this.first = first;
}
public void setSecond(String second) {
this.second = second;
}
}
public Pair minmax(String[] a) {
if(a == null || a.length == 0) return null;
String min = a[0];
String max = a[0];
/**
* compareTo字符串比较规则 从第一个“字母”进行ascii比较,大写在前,小写在后!!!!
*/
for(String temp: a){
if(min.compareTo(temp) > 0) min = temp;
if(max.compareTo(temp) < 0) max = temp;
}
/*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 Pair(min,max);
}
}
参考:【项目问题解决】“Non-static method cannot be referenced from a static context” error-CSDN博客
补充:
这篇文章很好地从内存的角度解释了为什么静态方法可以直接点名调用,而非静态方法必须实例化。感觉这里应该是后面内存分配的相关知识,现在来看确实很有意思。不用实例化,Java中可以直接调用类中静态方法,原理。_类的方法怎么不实例化调用-CSDN博客