精华内容
下载资源
问答
  • 内部类和静态内部类
    千次阅读
    2022-03-12 17:41:19

    1、普通内部类和静态内部类的区别:

    a)普通内部类持有对外部类的引用,静态内部类没有持有外部类的引用。

    b)普通内部类能够访问外部类的静态和非静态成员,静态内部类不能访问外部类的非静态成员,他只能访问外部类的静态成员。

    c)一个普通内部类不能脱离外部类实体被创建,且可以访问外部类的数据和方法,因为他就在外部类里面。

    2、区别还有
    a)第一,内部类可以访问其所在类的属性(包括所在类的私有属性),内部类创建自身对象需要先创建其所在类的对象
    b)第二,可以定义内部接口,且可以定义另外一个内部类实现这个内部接口
    c)第三,可以在方法体内定义一个内部类,方法体内的内部类可以完成一个基于虚方法形式的回调操作
    d)第四,内部类不能定义static元素
    e)第五,内部类可以多嵌套
    f)static内部类是内部类中一个比较特殊的情况,Java文档中是这样描述static内部类的:一旦内部类使用static修饰,那么此时这个内部类就升级为顶类。也就是说,除了写在一个类的内部以外,static内部类具备所有外部类的特性(和外部类完全一样)。

    他们写得特别精彩,我这里就不多加赘述了
    参考文档:
    1、静态内部类与普通内部类的区别
    2、Java中静态内部类和非静态内部类有什么区别?

    更多相关内容
  • java 内部类和静态内部类的区别

    千次阅读 2019-02-21 11:11:58
    今天我们分析内部类和静态内部类的区别,首先我们写一个 InnerClassTest ,其中有一个内部 InnerClass 和静态内部类 StaticInnerClass 。 public class InnerClassTest { private int aNum = 1...

    今天我们分析内部类和静态内部类的区别,首先我们写一个InnerClassTest类,其中有一个内部类InnerClass和静态内部类StaticInnerClass

    public class InnerClassTest {
        private int aNum = 1;
    
        public static void main(String[] args) {
            new InnerClassTest().a();
        }
    
        private void a() {
            new InnerClass().innerMethod();
            new StaticInnerClass().innerMethod();
        }
    
        void b() {
    
        }
    
        private void c() {
    
        }
    
        public void d(){
    
        }
    
        private class InnerClass {
            private void innerMethod() {
                c();
                aNum = 2;
            }
        }
        
        static class StaticInnerClass {
            private void innerMethod() {
                d();
            }
        }
    }
    

    静态内部类报错

    分析

    1. 外部类能够调用内部类的私有方法new InnerClass().innerMethod()new StaticInnerClass().innerMethod().
    2. 倒数5行,StaticInnerClassinnerMethod()报错,显示d()

    Q:什么是内部类?有什么作用?静态内部类和非静态内部类的区别?

    总结

    内部类就是定义在另外一个类里面的类。它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它;但它可直接访问外部类的成员。

    静态内部类和非静态内部类的区别有:

    1. 静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。
    2. 静态内部类只能访问外部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问外部类的所用成员

    参考:

    从一道面试题开始说起 枚举、动态代理的原理
    java内部类有什么好处?为什么需要内部类?

    展开全文
  • android的内部类和静态内部类的区别

    千次阅读 2018-10-17 10:53:19
    1.static静态修饰符 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的。  static修饰表示静态的,在加载时JVM会把它放到方法区,被本以及本中所有实例所公用。...2.内部类 定义在一个内...

    1.static静态修饰符

    在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的。 
    static修饰表示静态的,在类加载时JVM会把它放到方法区,被本类以及本类中所有实例所公用。在编译后所分配的内存会在一直存在,直到程序退出内存才会释放这个空间。如果一个被所有实例公用的方法被申明为static,那么就可以节省空间了,不用每个实例初始化的时候都被分配到内存。
    2.内部类

    定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是内部类可以访问外部类的所有方法与属性,包括私有方法与属性。
    3.静态类(只有内部类才能被声明为静态类,即静态内部类)

    1.只能在内部类中定义静态类 
    2.静态内部类与外层类绑定,即使没有创建外层类的对象,它一样存在。 
    3.静态类的方法可以是静态的方法也可以是非静态的方法,静态的方法可以在外层通过静态类调用,而非静态的方法必须要创建类的对象之后才能调用。 
    5.只能引用外部类的static成员变量(也就是类变量)。 
    6.如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态的。

    以上稍微介绍了一下静态类,接下来将用代码来分析静态内部类与非静态内部类的区别。

    public class OutClassTest {
        int out1=1;
        static int out2=1;
        void out(){
            System.out.println("非静态");
        }
        static void outstatic(){
            System.out.println("静态");
        }
        public class InnerClass{
            void InnerClass(){
                System.out.println("InnerClass!");
                System.out.println(out1);
                System.out.println(out2);
                out();
                outstatic();//静态内部类只能够访问外部类的静态成员
            }

          // static void inner(){}  static int i=1; 非静态内部类不能有静态成员(方法、属性)
        }
        public static class InnerstaticClass{
            void InnerstaticClass(){
                System.out.println("InnerstaticClass");
              //  System.out.println(out1);out(); 静态内部类只能够访问外部类的静态成员
                System.out.println(out2);
                outstatic();
            }
            static void innerstatic(){}  static int i=1;//静态内部类能有静态成员(方法、属性)
        }
        public static void main(String args[]){
           OutClassTest a=new OutClassTest();
            OutClassTest.InnerstaticClass b=new OutClassTest.InnerstaticClass();//创建静态内部类
            OutClassTest.InnerClass c=a.new InnerClass();//创建非静态内部类
        }
    }

    总结
    1.是否能拥有静态成员 
    静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。 
    2.访问外部类的成员 
    静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。 
    3.静态内部类和非静态内部类在创建时有区别

    //假设类A有静态内部类B和非静态内部类C,创建B和C的区别为: 
    A a=new A(); 
    A.B b=new A.B(); 
    A.C c=a.new C();

    还有一个重点是静态内部类的对象不持有外部类的引用,非静态内部了持有外部类的引用


     

     

     

     

    展开全文
  • 背景开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类。在codeReview的时候稍微大家聊了一下。尤其是Static 修饰类和修饰对象变量不一样呢?定义1. 内部可以将一个的定义...

    背景

    开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类。在codeReview的时候稍微和大家聊了一下。尤其是Static 修饰类和修饰对象和变量不一样呢?

    定义

    1. 内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类;

    嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的也是如此。静态嵌套类无权访问封闭类的其他成员。为一体的一个部件OuterClass,一个嵌套类可以声明private,public,protected,或包专用。(回想一下,只能声明外部类public或将其包装为私有。)

    2. 静态内部类

    再一个普通类里面,给内部类加上static关键字的修饰;

    与类方法和变量一样,静态嵌套类与其外部类相关联。与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。(就和两个普通不同的类之间的使用)

    3. 两者的区别

    内部类只是外部类的成员变量,通俗讲,就是你只能通过先调用外部类才能去拿到这个类(但是这是和组合还是有区别的)。

    但是静态内部类就像是一个普通类一样。可以直接调用,直接去new对象。

    4. Java 拥有嵌套类有什么作用呢?

    这是一种对仅在一个地方使用的类进行逻辑分组的方法:如果一个类仅对另一个类有用,那么将其嵌入该类并将两者保持在一起是合乎逻辑的。嵌套此类“帮助程序类”可使它们的程序包更加简化。

    它增加了封装:考虑两个顶级类A和B,其中B需要访问A的成员,否则将对其进行声明private。通过将类B隐藏在类A中,可以将A的成员声明为私有,而B可以访问它们。另外,B本身可以对外界隐藏。

    这可能会导致代码更具可读性和可维护性:在顶级类中嵌套小类会使代码更靠近使用位置。

    Demo

    talk is cheap ,Show me Code;

    package 静态内部类;

    import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion;

    import javassist.runtime.Inner;

    import lombok.Data;

    /**

    * @authoryuanxindong

    * @date: 2020/6/19 10:25 下午

    */

    @Data

    public class OuterClassDemo {

    String outerStr;

    public OuterClassDemo(String outerStr) {

    this.outerStr = outerStr;

    }

    @Data

    public static class StaticInnerClass{

    public StaticInnerClass(String innerStr) {

    this.innerStr = innerStr;

    }

    private String innerStr;

    }

    @Data

    public class InnerClass{

    private String innerClassStr;

    public InnerClass(String outerStr) {

    //可以和外部类通讯

    this.innerClassStr = getOuterStr();

    }

    }

    public static void main(String[] args) {

    OuterClassDemo staticClassDemo =new OuterClassDemo("Outer");

    staticClassDemo.getOuterStr();

    // 内部正常类是不能直接new出来的

    // OuterClass outerClass = new OuterClass();

    StaticInnerClass innerClass = new StaticInnerClass("StaticInner");

    System.out.println(innerClass.getInnerStr());

    initInnerClass();

    }

    public static void initInnerClass(){

    OuterClassDemo staticClassDemo1 = new OuterClassDemo("OuterClassDemo");

    InnerClass innerClass = staticClassDemo1.new InnerClass("outerStr");

    System.out.println(innerClass.getInnerClassStr());

    }

    }

    注意事项

    序列化强烈建议不要对内部类(包括 本地和 匿名类)进行序列化。当Java编译器编译某些构造(例如内部类)时,它会创建综合构造。

    这些是类,方法,字段以及其他在源代码中没有相应构造的构造。合成构造使Java编译器无需更改JVM就可以实现新的Java语言功能。但是,合成构造在不同的Java编译器实现中可能有所不同,这意味着.class文件在不同的实现中也可能有所不同。因此,如果序列化一个内部类,然后使用其他JRE实现对其进行反序列化,则可能会遇到兼容性问题。

    核心讨论

    了解了静态内部类后,那static为什么修饰了类,对于这个类也是起了一个全局可用的一个作用?

    越想问题越多,还有就是为什么被Static 修饰的方法可以被类直接引用到?而static 修饰的类也可以被其他的类直接使用,而不依赖于对象。

    答 :我们得明确一下

    static修饰类的方法,表示这个方法和这个类对象没有关系,只是和这个类有关系

    static 修饰变量,按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:

    对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

    好的,是这样的。static修饰对象 可以全局使用,修饰方法可以不依赖于对象,修饰类,也不用依赖与他的对象,也可以被其他的类直接使用,或者自己进行初始化。

    总结

    嵌套类:内部类和静态内部类

    内部类属于外部类的成员,必须依赖与外部对象来实现,静态内部类,不依赖,可以自己单独实现。

    static 的修饰 变量,类,方法,代码块。 共性全局性。变量的话也就是全剧唯一性,会出现多个饮用,但不会出现多个存储。

    展开全文
  • * 标题:Java内部[成员内部、局部内部、匿名内部类和静态内部类] * * 作者:Nstar * * 时间:2020年3月13日 * * 内容: * * 问:什么是内部? * 答:在 Java 中,可以将一个定义在另一个里面或者一...
  • package day6$6;public class Inside {public static void main(String[] args) {//先创建一个外部对象Outside in=new Outside();//在通过外部对象创建一个内部...//调用内部类自己的属性方法oi.Swim();System...
  • 一、什么是内部类?or 内部类的概念 内部类是定义在另一个中的;下面TestB是TestA的内部类。即内部类对象引用了实例化该内部对象的外围对象。 public class TestA{ class TestB {} } 二、 为什么需要...
  • 内部类和静态内部类的调用方式

    千次阅读 2020-08-20 16:56:37
    一、静态内部类的创建需要依赖外部 Out.Ind j=new Out.Ind(); 二、非静态内部类 Outside in=new Outside(); //在通过外部对象创建一个内部对象 Outside.Indoor oi =in.newIndoor();
  • 内部(Inner Class)和静态内部类(Static Nested Class)的区别: 定义在一个内部的叫内部,包含内部称为外部。内部可以声明public、protected、private等访问限制,可以声明 为abstract的供其他...
  • 主要介绍了Java内部应用之静态内部类应用,结合实例形式分析了Java静态内部类的原理、功能、用法及相关操作注意事项,需要的朋友可以参考下
  • 主要介绍了Java中的静态内部类详解及代码示例,具有一定参考价值,需要的朋友可以了解下。
  • 内部静态内部类区别及举例

    千次阅读 2021-07-02 17:04:26
    静态内部类相对与外部是独立存在的,在静态内部类中无法直接访问外部中的变量、方法。如果要访问的话,必须要new一个外部的对象,使用new出来的对象来访问。 但是可以直接访问静态变量,调用静态的方法。 ...
  • Java内部静态内部类的区别

    千次阅读 2018-11-14 18:41:25
    在阅读Java Collection Framwork时,LinkedList中有个静态内部类: private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E&...
  • 静态内部类的非静态成员可访问外部的静态变量,而不可访问外部的非静态变量。匿名内部: 没有类名,没有class关键字也没有extendsimplements等关键字修饰。 的定义实例化同时进行。...
  • 静态内部类和静态内部类的区别

    千次阅读 2020-07-20 10:55:18
    静态内部类和静态内部类的区别: 1. 静态内部类不持有外部的引用 在普通内部中,可以直接访问外部的属性、方法,即使是private类型也可以,这是因为普通内部持有外部的引用,可以自由访问。而静态内部类...
  • Java 内部类和静态内部类的加载时机

    千次阅读 2018-11-28 15:24:50
    内部类和静态内部类都是延时加载的,也就是说只有在明确用到内部时才加载。只使用外部时不加载。 非静态内部类不能拥有 静态变量 静态语句 静态方法 静态内部类无需外部实例即可调用 非静态内部类需要外部...
  • 首先我们看下RecyclerView的ViewHolder的写法,javakotlin分别用静态内部类进行实现,代码是随意找的: java静态内部类: static class EndViewHolder extends BlocksView.ViewHolder { public ...
  • 问题:内部静态内部类区别、使用场景? 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。 2.静态内部类只能够访问外部的静态成员,而非静态内部类则可以访问外部的...
  • Java中静态内部类和静态内部类有什么区别?

    万次阅读 多人点赞 2018-12-24 16:33:34
    要想清楚static内部类和非static内部类的区别,首先要了解内部类的概念及特点,然后再进行一个全面的对比。 什么是内部类呢?简单的说就是在一个内部又定义了一个,这个就称之为内部类(Inner Class)。看...
  • 内部类和静态内部类设计意图

    千次阅读 2018-12-26 13:06:52
    http://www.cnblogs.com/zharma/p/8345982.html
  • 放在一个内部我们就叫内部类。...定义在类内部的非静态类,就是成员内部类。 public class Out { private static int a; private int b; public class Inner { public void print() { System.out...
  • 内部类无论是静态还是非静态, 本质上都是写在内部的一个, 比如下面代码 public class Demo { class Test { } } 对比 我们都知道Java的是有封装性的, 比如我们将一个属性或者方法写成是private修饰的, ...
  • 普通内部类和静态内部类总结

    千次阅读 2016-07-28 11:21:48
    普通内部里面不能定义各种静态的成员(包括静态变量、静态方法、静态代码块和静态内部类),而静态内部类中则可以; 静态变量静态方法会出现这个语法错误(static methods can only be declared in a static or ...
  • 文章目录简介内部类静态内部类静态内部类静态方法内部非静态方法的内部匿名内部接口总结 简介 一般来说,我们创建类和接口的时候都是一个一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因...
  •     如果一个中定义了静态成员变量静态方法,那么静态方法可以访问...静态内部类和静态内部类同静态方法非静态方法类似。 为什么要使用内部  &n...
  • 静态内部类

    千次阅读 2021-07-25 13:04:24
    静态内部类就是用saitic关键字修饰的内部类类,是与共享的,所以静态内部类的对象不依赖于外部的对象,可直接创建。        我们先创建一个,在其中创建一个静态内部类。 ...
  • 内部静态内部类的实例化

    万次阅读 2016-10-11 21:49:40
    内部类的实例化 如果内部类未声明为static,在实例化时首先需要...内部类的class类型为:Parent.Inner,而不是p.Inner,这个需要new的方式区分开。public class Test { public static void main(String[] args) {
  • 上次有朋友问我,java中的可以是static吗?我给他肯定的回答是可以的,在java中我们可以有静态实例变量、...当然也可以是静态的,下面小编整理了些关于java中的static class相关资料分享在脚本之家平台供大家参考
  • 成员内部类和静态内部类

    千次阅读 2014-07-03 04:48:05
    //其中成员内部类和静态嵌套需要在外部中调用。调用的时候比较麻烦,本文主要针对这两种内部类外部调用做分析。 //方法内部类只能在定义该内部类的方法内对其实例化;匿名内部类定义的时候直接创建该对象。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 930,649
精华内容 372,259
关键字:

内部类和静态内部类