• Java--嵌套类


    一、static静态

    方便在没有创建对象的情况下来进行调用(方法/变量)。
    很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

    1. static修饰的变量:在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员。注意,static只能修饰成员变量,不可以修饰局部变量。
    1. public String name;
    2. public static int age;
    1. Student s=new Student();
    2. s.name="张三";
    3. s.age=12;
    4. Student s1=new Student();
    5. s1.name="李四";
    6. s1.age=15;
    7. System.out.println(s.name+"今年"+s.age+"岁了");
    8. System.out.println(s1.name+"今年"+s1.age+"岁了");

    注:当成员变量为静态变量时,那么它的值是存储在内存的静态区中,所以赋值时会变成一个值。 

    2.static修饰的方法:static的另一个作用,就是修饰成员方法。static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗,我们可能会经常在帮助类或工具类中看到它的使用。

    1. public static void say() {
    2. System.out.println("我是一名学生");
    3. }
    	Student.say();
    

    注:当方法为静态方法时,那么它可以直接使用类名获取方法,main方法是我们常见的静态方法。 

    二、嵌套类

    在 Java 语言中允许在另外一个类中定义一个类,这样的类被称为嵌套类。包含嵌套类的类称为外部类,也可以叫做封闭类,在本文中统一叫做外部类。

    1. //学生类
    2. public class Student {
    3. //优等生类
    4. class kind{
    5. }
    6. }

    嵌套类分为两类:

    • 静态嵌套类:使用static声明,一般称为嵌套类。
    • 非静态嵌套类:非static声明,一般称为内部类。
    1. //学生类
    2. public class Student {
    3. public String name;
    4. public static int age;
    5. //优等生类
    6. static class kind{
    7. String techang;
    8. }
    9. //普通生类
    10. class weak{
    11. String youdian;
    12. }
    13. }
    1. Student.kind k=new Student.kind();
    2. k.techang="唱歌";
    3. System.out.println(k.techang);

    嵌套类是它的外部类的成员,非静态嵌套类(内部类)可以访问外部类的其他成员,即使该成员是私有的。而静态嵌套类只能访问外部类的静态成员。

    嵌套类作为外部类的一个成员,可以被声明为:private,public,protected或者包范围(注意:外部类只能被声明为public或者包范围)。

    嵌套类特点:

    • 嵌套类可以访问外部类的所有数据成员和方法,即使它是私有的。
    • 提高可读性和可维护性:因为如果一个类只对另外一个类可用,那么将它们放在一起,这更便于理解和维护。
    • 提高封装性:给定两个类A和B,如果需要访问A类中的私有成员,则可以将B类封装在A类中,这样不仅可以使得B类可以访问A类中的私有成员,并且可以在外部隐藏B类本身。
    • 减少代码的编写量。

    1、静态嵌套类
    静态嵌套类其实就是在顶级类中封装的一个顶级类,它的行为和顶级类一样,它被封装在顶级类中其实就是为了方便打包。

    • 静态嵌套类是外部类的静态成员,它可以直接使用外部类名.静态嵌套类名访问自身。
    • 它可以访问外部类的静态成员和静态私有成员。
    • 与其他类一样,静态嵌套类不能访问非静态成员。
    1. //学生类
    2. public class Student {
    3. public String name;
    4. public static int age=12;
    5. //优等生类
    6. static class kind{
    7. String techang;
    8. static void say() {
    9. System.out.println(age);
    10. }
    11. }
    12. //普通生类
    13. class weak{
    14. String youdian;
    15. }
    16. }
    Student.kind.say();
    

    2、非静态嵌套类
    非静态嵌套类也就是内部类,它有以下几个特点:

    • 实例化内部类必须先实例化一个外部类。
    • 内部类实例与外部类实例相关联,所有不能在内部类中定义任何静态成员。
    • 内部类是非静态的。
      非静态嵌套类包括:成员内部类、局部内部类、匿名内部类

    成员内部类:
    在外部类中并且在外部类的方法外创建的非静态嵌套类,称为成员内部类。说白了成员内部类就是外部类的一个非静态成员而已。
    创建成员内部类的实例,你必须先实例化一个外部类,接着,通过外部类的实例来创建成员内部类的实例。因此成员内部类的实例必须存在于一个外部类的实例中。另外,由于内部类的实例与外部类的实例相关联,因此它不能定义任何静态成员。

    局部内部类:
    局部内部类(Local inner class)通常定义在一个块中。所以通常你会在一个方法块中找到局部内部类。正如局部变量那样,局部内部类的作用域受到方法的限制。它可以访问外部类的所有成员,和它所在的局部方法中所有局部变量。如果你想调用局部内部类中的方法,你必须先在局部方法中实例化局部内部类。

    局部内部类限制:

    • 无法从方法外部调用局部内部类
    • 局部内部类不能被声明为private, public, protected
    • 在JDK1.7之前局部内部类不能访问非final的局部变量,但是在JDK1.8及之后是可以访问非final的局部变量的。

    匿名内部类:
    匿名内部类,可以理解为不需要声明类的对象,直接使用类的内容。
    在使用匿名内部类的过程中,我们需要注意如下几点:

    • 使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
    • 匿名内部类中是不能定义构造函数的。
    • 匿名内部类中不能存在任何的静态成员变量和静态方法。
    • 匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
    • 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

  • 相关阅读:
    Vue3 - style v-bind 动态样式(详细使用教程)
    2022最新SpringCloud面试题附完整答案
    m基于基站休眠的LTE-A异构网络中节能算法matlab仿真
    【数据结构】串(二)—— 朴素模式匹配算法
    供应商管理软件有哪些特点和优势?
    商家入驻商城 多商户商城 宝塔安装搭建教程 说明 小程序、h5、pc端
    ROS2与turtlebot4仿真入门教程-测试雷达和相机
    ESP8266-Arduino编程实例-VEML6040颜色传感器驱动
    Qt入门学习及GUI编程基础教程
    Jeston ros1 环境下 编译RealSense SDK
  • 原文地址:https://blog.csdn.net/m0_67082679/article/details/126268764