首页 > 其他分享 >静态内部类

静态内部类

时间:2024-09-16 11:24:46浏览次数:3  
标签:内部 静态 System static Inner println public

Java中的静态内部类是指在一个类的内部定义的另一个类,并且该内部类被声明为静态(static)的。静态内部类与普通内部类的区别在于,静态内部类不依赖于外部类的实例,可以直接通过外部类名访问。


// 静态内部类

class Outer{

   public int data1 = 1;

   /*外部类定义的属性(重名)*/

   public static int data2 = 2;

   public static int data3 = 3;

   static {

       System.out.println("外部类静态块");

   }

   /*成员方法*/

   public void outerMothod() {

       System.out.println("外部类的成员方法");

   }

   /*静态方法*/

   public static void outerStaticMethod() {

       System.out.println("外部类的静态方法");

   }

   public void test(){

       System.out.println("Out:: test()");

   }

   static class Inner{

       public int data4 = 4;

       public static int data5 = 5;

       public static int data3 = 33; //与外部类同名

       public void InnerShow(){

           // 访问内部类成员属性

           System.out.println("内部类data4:"+data4);

           //访问外部类成员属性

           //不重名访问 非静态成员属性

           //System.out.println(data1); //无法直接访问外部非静态成员

           System.out.println("data1:" + new Outer().data1); // 间接访问

           //不重名直接访问 静态成员属性

           System.out.println("外部类data2:" + data2);

           System.out.println("内部的data3:"+ data3);

           System.out.println("外部的data3:"+ Outer.data3);

       }

       public static void InnerStaticShow() {

           //调用时会先加载Outer类,类加载的时候执行静态代码块

           outerStaticMethod();

       }

   }

   /*外部类的内部如何和内部类打交道*/

   public static void callInner() {

       System.out.println(Inner.data3);

       //System.out.println(Inner.data4); //内部类的非静态成员属性无法直接访问

       System.out.println(new Inner().data4);

       

       Inner.InnerStaticShow();

       new Inner().InnerShow();  //调用内部类非静态成员方法

   }

}

public class Test {

   /* 其他类访问静态内部类 */

   public static void main(String[] args) {

       //访问静态内部类的静态方法,Inner类被加载(类加载的时候执行静态代码块),此时外部类未被加载,独立存在,不依赖于外部类。

       Outer.Inner.InnerStaticShow();

       // 静态内部类实例化,不用(),相比于实例内部类优点:不需要外部类的引用

       Outer.Inner in = new Outer.Inner();

       in.InnerShow();

   }

}

总结:【抓住关键字——static,作为静态成员存在】


静态内部类可以包含任意的信息,可以被任意访问权限修饰符修饰。

静态内部类的方法只能访问外部类的static关联的成员。

静态内部类可以独立存在,不依赖于其他外围类。

其他类访问内部类的静态信息,直接 Outer.Inner.static成员信息 就可以了。

其他类实例化内部类 Outer.Inner instance = new Outer.Inner();,然后 instance. 成员信息(属性、方法)即可。


标签:内部,静态,System,static,Inner,println,public
From: https://blog.51cto.com/u_16274468/12030507

相关文章

  • 局部内部类
    Java局部内部类是指在一个方法或代码块内部定义的内部类。与成员内部类不同,局部内部类只能在定义它的方法或代码块内部使用,无法在外部访问。publicclassOut{  /*属性和方法*/  privateintoutVariable=1;  /*外部类定义的属性*/  privateintcommonVariable......
  • 匿名内部类
     Java匿名内部类是一种特殊的内部类,它没有类名,直接在创建对象时定义并实现。通常用于创建只需要使用一次的类对象,可以简化代码,提高代码的可读性和可维护性。原本我们需要创建子类或实现类,去继承父类或实现接口,才能重写其中的方法。但是有时候我们这样做了,然而子类和实现类却只使用......
  • 记一次nginx布署spring cloud项目后,jar包运行正常,但访问静态资源报404的问题。
    1、我们知道springcloud,是通过注册中心来注册所有的应用,这里面也包括网关gateway的注册:2、这里面我们运行了consoleapplication应用,这样里面就有一个Instance。3、测试静态资源的访问:4、consoleapplication结构:5、访问单个模块里的资源是正常的,但是上了服务器,nginx布......
  • 漫话linux:基础IO,软硬链接,动静态库管理
    1.软硬链接    1.软链接:是一个独立文件,具有独立的inode,也有独立的数据块,它的数据块里面保存的是指向的文件的路径,公用inode        1.建立软连接ln-s目标文件或目录,链接名 目标文件或目录表示路径,链接名代表命令,无论在哪里输入命令就能调......
  • 帝国cms生成静态文件怎么用
    在帝国CMS中生成静态文件的过程主要包括几个步骤:配置伪静态、生成静态文件以及配置服务器。下面详细介绍如何使用帝国CMS生成静态文件:1.开启伪静态功能伪静态可以让动态页面看起来像是静态页面,这对于SEO和用户体验都有好处。登录后台:首先登录帝国CMS的后台管理界面。进入系......
  • C++ 定义静态成员 static 关键字不能在定义出重复出现
    定义静态成员和其他的成员函数一样,我们既可以在类的内部也可以在类的外部定义静态成员函数。当在类的外部定义静态成员时,不能重复static关键字,该关键字只出现在类内部的声明语句:voidAccount::rate(doublenewRate){interestRate=newRate;}Note:和类的所有成员一样,当我......
  • java 反射创建内部类
    Java反射创建内部类在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时检查或修改类的行为。内部类(InnerClass)则是一种特殊的类,它定义在另一个类的内部,并可以访问外部类的成员。本文将深入探讨如何使用Java反射来创建内部类的实例,并展示其在实际开发中的应用。内部类的基......
  • 选择静态IP还是动态IP?
     在全球化的市场研究中,海外问卷调查是一种重要的数据收集手段。然而,选择合适的IP类型对于确保调查的效率、质量和合法性至关重要。本文将探讨在进行海外问卷调查时,静态IP与动态IP的优劣,并提供决策指导。一、IP类型基础在深入讨论之前,首先了解两种IP类型的特性是必要的。动......
  • 海外问卷调查:选择静态IP还是动态IP?
    在全球化的市场研究中,海外问卷调查是一种重要的数据收集手段。然而,选择合适的IP类型对于确保调查的效率、质量和合法性至关重要。本文将探讨在进行海外问卷调查时,静态IP与动态IP的优劣,并提供决策指导。一、IP类型基础在深入讨论之前,首先了解两种IP类型的特性是必要的。动态......
  • 项目内部调用的远程接口开发
    编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中,实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用,而不是直接暴露给外部用户或前端。项目内部的远程接口统一放在api工程首先进入api编写接口,注意使用@FeignClient注解进入......