java_内部类

1.局部内部类

        有些类只在某个方法中用一次,就可以在方法块里定义一个内部类。局部内部类不能用访问修饰符修饰,作用域就在声明这个局部内部类的块中。局部内部类最大的好处就是对外完全隐藏,只能在作用域所在的这个块中访问。第二个有点就是可以访问作用域存在的这个块的局部变量,这些变量属于事实最终变量,实际上算是在生成局部内部类是形成了一个拷贝一样的字段,及时局部变量出来作用域,局部内部类里还是可以用。

2.匿名内部类

        直接创建一个类的对象,而不将对象赋值给引用使用,这样的内被称为匿名内部类。你们内部类可以是一个接口,也可以是一个类。

package demo;

import java.security.SecureRandom;

/**
 * <p> TODU </P>
 *
 * @author yeager
 * @Version V1.1.1.0
 * @date 2023/11/30 13:37
 */
public class NunameClassDemo {
    interface printNunames
    {
        void printNuname(String s);
    }
   public NunameClassDemo()
    {

    }
    public void NunameMsg(printNunames nunames)
    {
        nunames.printNuname("Hello");
    }

    public static void main(String[] args)
    {
        NunameClassDemo demo = new NunameClassDemo();
        demo.NunameMsg(new printNunames() {
            @Override
            public void printNuname(String s) {
                System.out.println(s + " World");
            }
        });

        var object = new printNunames() {
            @Override
            public void printNuname(String s) {
                System.out.println(s + " World");
            }
        };
        object.printNuname("我不是白菜的");
    }
}

3.静态内部类

        使用内部类只是为了把一个类隐藏在另外一个类的内部,并不需要内部类有外部类的引用,就可以将这个内部类声明为static类型。

        1.只要内部类不需要访问外部类对象,一般就应该声明为静态内部类。也有交嵌套类的。

        2.与常规内部类不同,静态内部类可以有静态字段和方法。

        3.在接口中声明的内部类都自动是static和public类型。

        4.类中声明的接口、记录和枚举自动为static。

感觉出来实例化传参,不会使用到外部的信息的时候,就可以啦。

package demo;

/**
 * <p> TODU </P>
 *
 * @author yeager
 * @Version V1.1.1.0
 * @date 2023/11/30 13:50
 */
public class StaticInnerClassDemo {
    //声明一个静态内部类
    public static class Pair
    {
        private double first;
        private double second;

        public Pair(double first,double second)
        {
            this.first = first;
            this.second = second;
        }

        public double getFirst()
        {
            return first;
        }
        public double getSecond()
        {
            return second;
        }
    }

    public static Pair MinAndMax(double[] values)
    {
        double min  = Double.POSITIVE_INFINITY;
        double max  = Double.NEGATIVE_INFINITY;
        for(double d: values)
        {
           min =  min > d? d:min;
           max = max < d ? d:max;
        }
        return new Pair(min,max);
    }

    public static void main(String[] args)
    {
        var arrs = new double[20];
        for(int i = 0; i < arrs.length;i++)
        {
            arrs[i] = 100 *Math.random();
        }
        Pair pair = MinAndMax(arrs);
        System.out.println("数组最小值为:" + pair.getFirst());
        System.out.println("数组最大值为:" + pair.getSecond());
    }
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值