内部类之静态内部类

一、位置

  被定义在一个类下,且被static修饰

二、结构

  静态内部类下可以定义静态和非静态的属性和方法

三、静态内部类访问外部类

  1.不能访问外部类非静态的属性和方法

  2.调用属性【方法】方式:

    2.1直接写属性名【调用方法名】-------本质还是第二种

2.1外部类.属性名【方法名】

源码:

class Outter {
     private static int b =3;

     public static void test(){
         System.out.println("外部类静态方法");
     }
     static class Inner{
        public void get(){
            System.out.println(b);//可以访问外部静态属性
            test();//可以访问外部类静态方法
        }
    }
}

反编译源码:

class Outter
{
    private static int b;

    public static void test() {
        System.out.println("\u5916\u90e8\u7c7b\u9759\u6001\u65b9\u6cd5");
    }

    static {
        Outter.b = 3;
    }

    static class Inner
    {
        public void get() {
            System.out.println(Outter.b);
            Outter.test();
        }
    }
}

四、外部类访问静态内部类

class Outter {
     private static int b =3;

     public static void test(){
         System.out.println("外部类静态方法");
     }
     static class Inner{
         private int a = 1;

         private static int b = 2;

         public void get(){
            System.out.println("get");
        }

         public static void get2(){
             System.out.println("get2");
         }

    }

     public static void main(String[] args) {
        //静态变量-方法  --方式一
        System.out.println(Inner.b);
        Inner.get2();
        //静态变量-方法  --方式二
        System.out.println(Outter.Inner.b);
        Outter.Inner.get2();
        //非静态--方式1
        System.out.println(new Inner().a);
        new Inner().get();
        //非静态--方式2
        System.out.println(new Outter.Inner().a);
    }
}

以上是对静态内部类的总结,有不对的地方请大家多多指点,大家共同进步!!!

原文地址:https://www.cnblogs.com/cc-umf-lm/p/10622281.html

时间: 2024-11-12 16:53:49

内部类之静态内部类的相关文章

java内部类和静态内部类

看代码理解内部类,局部内部类和静态内部类 内部类代码: public class InnerTest { private static String name; private int age; public InnerTest(String name, int age){ this.name = name; this.age = age; } public void getInstance() { System.out.println("name:" + name.toString(

内部类与静态内部类

前言 如果你是一个急性子,没什么耐性的人,可以只看下句,自己去品味理解: 内部类:就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我.(所以内部类对象是以外部类对象存在为前提的) 静态内部类:就是我跟你没关系,自己可以完全独立存在,但是我就借你的壳用一下,来隐藏自己. 如果还不知道静态和普通成员的区别,就先学static吧. 静态成员:属于这个类,数据存放在class文件中,程序运行之前就已经存进去数据了. 普通成员:属于这个类的对象,程序运行后生成堆栈中. 先来看一下官方说法,根据O

内部类及静态内部类的实例化

内部类的实例化 如果内部类未声明为static,在实例化时首先需要new一个外部类的对象.并通过p.new Inner()的方式new 内部类,表明这个内部类指向该外部类.内部类的class类型为:Parent.Inner,而不是p.Inner,这个需要和new的方式区分开. public class Test {  public static void main(String[] args) {   Parent p = new Parent();   Parent.Inner i = p.n

Java中的嵌套类、内部类、静态内部类

在Java中我们在一个类的内部再定义一个类,如下所示: class OuterClass { ... class NestedClass { ... } } 那么在上面的例子中我们称OuterClass为外围类(enclosing class),里面的那个类称之为嵌套类(Nested Class). 嵌套类可以分为两种,静态的和非静态的,即静态嵌套类和非静态嵌套类.非静态嵌套类又叫做内部类(Inner Class).我们通常所说的静态内部类其实是不严格的,严格的说应该叫做静态嵌套类(Static

java 内部类和静态内部类的区别

下面说一说内部类(Inner Class)和静态内部类(Static Nested Class)的区别:定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明public.protected.private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static.final的,也可以实现特定的接口.外部类按常规的类访问方式使用内部 类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性. (1)创建实例 OutClass.

Java内部类(4):静态内部类&接口内部类

使用static修饰的内部类我们称之为静态内部类,不过我们更喜欢称之为嵌套内部类.静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有.没有这个引用就意味着: 1. 它的创建是不需要依赖于外围类的. 2. 它不能使用任何外围类的非static成员变量和方法. 1 interface Contents { 2 int value(); 3 } 4 5 interface Destination {

静态非静态内部类匿名内部类局部内部类

内部类有静态内部类,静态内部类,匿名内部类,局部内部类 (1)非静态内部类 直接在类的内部定义的类就是非静态内部类,如下 public class Test { public static void main(String[] args) { Outer.Inner c1=new Outer().new Inner(); c1.Print(); } } class Outer{ private int temp=10; class Inner{ private int temp=100; pub

java的四种内部类(转)

一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类. 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中.  1.常规内部类中的方法可以直接使用外部类的实例变量和实例方法.  2.在常规内部类中可以直接用内部类创建对象  3.代码如下: public class MyOuter { private int x = 100; // 创建内部类 class MyInner {  private String y = "Hello!"; public

java 内部类与外部类的区别

最近在看Java相关知识的时候发现Java中同时存在内部类以及非公有类概念,而且这两个类都可以不需要单独的文件编写,可以与其他类共用一个文件.现根据个人总结将两者的异同点总结如下,如有什么不当地方,欢迎大家指正. 1.非公有类和内部类对应的文件名与这两种类的类名无关: 2.一个源文件中可以包含多个非公有类或者内部类: 3.非公有类不能使用public关键字(一般前面不加关键字),内部类可以使用public.private.protected关键字: 4.非公有类中可以添加0到多个内部类: 5.非