关于Java中Static的一些理解

在学习内部类和泛型类时遇到的一个代码例子,编写一个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博客

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值