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());
}
}