精华内容
下载资源
问答
  • 内部类实例化如果内部类未声明为static,在实例化时首先需要new一个外部的对象。并通过p.new Inner()的方式new 内部类,表明这个内部类指向该外部内部类的class类型为:Parent.Inner,而不是p.Inner,这个...

    内部类的实例化

    如果内部类未声明为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.new Inner();

    i.print();

    }

    }

    class Parent {

    class Inner {

    public void print() {

    System.out.println("xxx");

    }

    }

    }

    静态内部类的实例化

    静态内部类与普通内部类的区别在于,静态内部类的对象是不指向与某个具体的外部类对象,所以在创建对象时不需要创建外部类对象。并且在new的时候是通过

    new Parent.Inner()方式,而不是Parent.new

    Inner()。不要和内部类的实例化搞混了。class的声明和内部类是一样的,都是Parent.Inner

    public class Test {

    public static void main(String[] args) {

    Parent.Inner i = new Parent.Inner();

    i.print();

    }

    }

    class Parent {

    staticclass Inner {

    public void print() {

    System.out.println("xxx");

    }

    }

    }

    展开全文
  • “常规”内部类具有指向外部类实例的隐藏(隐式)指针。这使编译器可以生成代码来为您寻找指针,而无需键入它。例如,如果外部中有一个变量“ a”,那么内部类中的代码只能执行“ a = 0”,但是编译器将为“ ...

    “常规”内部类具有指向外部类实例的隐藏(隐式)指针。这使编译器可以生成代码来为您寻找指针,而无需键入它。例如,如果外部类中有一个变量“ a”,那么内部类中的代码只能执行“ a = 0”,但是编译器将为“ outerPointer.a = 0”生成代码,并在其中保留隐藏指针封面。

    这意味着在创建内部类的实例时,必须具有外部类的实例才能将其链接到。如果在外部类的方法中进行此创建,则编译器会知道将“ this”用作隐式指针。如果要链接到其他外部实例,则可以使用特殊的“新”语法(请参见下面的代码段)。

    如果将内部类设置为“静态”,则没有隐藏的指针,并且内部类无法引用外部类的成员。静态内部类与常规类相同,但是其名称的作用域位于父类内部。

    这是一段代码,演示了创建静态和非静态内部类的语法:

    public class MyClass {

    int a,b,c; // Some members for MyClass

    static class InnerOne {

    int s,e,p;

    void clearA() {

    //a = 0;  Can't do this ... no outer pointer

    }

    }

    class InnerTwo {

    //MyClass parentPointer;      Hidden pointer to outer instance

    void clearA() {

    a = 0;

    //outerPointer.a = 0      The compiler generates this code

    }

    }

    void myClassMember() {

    // The compiler knows that "this" is the outer reference to give

    // to the new "two" instance.

    InnerTwo two = new InnerTwo(); //same as this.new InnerTwo()

    }

    public static void main(String args[]) {

    MyClass outer = new MyClass();

    InnerTwo x = outer.new InnerTwo(); // Have to set the hidden pointer

    InnerOne y = new InnerOne(); // a "static" inner has no hidden pointer

    InnerOne z = new MyClass.InnerOne(); // In other classes you have to spell out the scope

    }

    }

    展开全文
  • 静态内部类可以被实例化!1.首先在外部中的static方法中不能使用普通内部,因为内部必须要与外部建立关联才能使用,可以说是同生共死。2.我在编码过程中,需要2个共同完成一个功能,其中一个工具只会被...

    最近遇到的一个问题,记录一下。

    静态内部类可以被实例化!

    1.首先在外部类中的static方法中不能使用普通内部类,因为内部类必须要与外部类建立关联才能使用,可以说是同生共死。

    2.我在编码过程中,需要2个类共同完成一个功能,其中一个工具类只会被用来完成这个功能,所以我选择将这个类作为内部类,但是这个内部类与外部类又没有直接的关联(使用普通内部类,我需要new一个外部类,通过外部类才能new一个内部类,这样显然不合适),所以我选择使用静态内部类。

    3.关于静态内部类的对象:首先多次new是在堆中创建了不同的对象,和普通类的对象一样。我在使用的时候,主要怕多个静态内部类的对象在程序运行过程中像静态成员变量一样一直占据内存空间导致OOM,经过验证,静态内部类的对象虽然每次new都生成一个对象,但是会被及时的回收,不会因为一直占据内存空间导致OOM。

    // 静态内部类

    private static class AA

    {

    int a;

    }

    btn1.setOnClickListener(new OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    for(int i = 0 ; i < 1000; i++)

    {

    // 静态内部类可以被实例化

    AA a = new AA();

    a.a = i;

    list.add(a);

    }

    }

    });

    btn3.setOnClickListener(new OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    for(int i = 0 ; i < list.size(); i++)

    {

    // 不为同一个对象

    Log.i("aaaa", list.get(i)+"");

    }

    }

    });

    e55789a2cbaa0fb37ed4300f61c9fe28.png

    通过btn3打印的Log我们可以看到静态内部类的对象不是同一个

    另外为了验证能不能及时回收,查看内存使用情况的方法:

    4bf887d102ba49d46fcf02634d068e06.png

    data object后面的Total Size就是程序中对象占用的内存,检测内存是否合理使用,你可以打开应该,来回的操作,看看TotalSize又没有明显的增长,正常情况下,如果没有垃圾数据,内存会及时的被回收,TotalSize也就维持在相对稳定的数值,如果,一直在上涨说明你的程序就有OOM的风险了。

    展开全文
  • I try to instantiate the inner class defined in the following Java code:public class Mother {public class Child {public void doStuff() {// ...}}}When I try to get an instance of Child like thisClass&g...

    I try to instantiate the inner class defined in the following Java code:

    public class Mother {

    public class Child {

    public void doStuff() {

    // ...

    }

    }

    }

    When I try to get an instance of Child like this

    Class> clazz= Class.forName("com.mycompany.Mother$Child");

    Child c = clazz.newInstance();

    I get this exception:

    java.lang.InstantiationException: com.mycompany.Mother$Child

    at java.lang.Class.newInstance0(Class.java:340)

    at java.lang.Class.newInstance(Class.java:308)

    ...

    What am I missing ?

    解决方案

    There's an extra "hidden" parameter, which is the instance of the enclosing class. You'll need to get at the constructor using Class.getDeclaredConstructor and then supply an instance of the enclosing class as an argument. For example:

    // All exception handling omitted!

    Class> enclosingClass = Class.forName("com.mycompany.Mother");

    Object enclosingInstance = enclosingClass.newInstance();

    Class> innerClass = Class.forName("com.mycompany.Mother$Child");

    Constructor> ctor = innerClass.getDeclaredConstructor(enclosingClass);

    Object innerInstance = ctor.newInstance(enclosingInstance);

    EDIT: Alternatively, if the nested class doesn't actually need to refer to an enclosing instance, make it a nested static class instead:

    public class Mother {

    public static class Child {

    public void doStuff() {

    // ...

    }

    }

    }

    展开全文
  • “常规”内部类具有指向外部类实例的隐藏(隐式)指针。 这允许编译器生成代码以便为您追逐指针而无需键入它。 例如,如果外部中有变量“a”,那么内部类中的代码只能执行“a = 0”,但编译器将生成“outerPointer.a...
  • 这是我在书中看到的代码,代码中有把实例化静态内部类。静态怎么可以实例化?为什么要这么做?import java.util.concurrent.*;import java.util.concurrent.locks.*;public class Consumerproducer {private ...
  • Handler声明称静态内部类实例化报错安卓开发实现下载进度条在使用Handler更新UI的时候,我是这样写的handler = new Handler(){@Overridepublic void handleMessage(Message msg) {progressBar.setProgress(...
  • 看到你在几个网站都问了这个问题。不知道你要用在什么业务场景下。...2. 不能从嵌套的对象中访问非静态的外围对象。如下所示代码为定义一个静态嵌套public class StaticTest{private static String...
  • 加载完外部之后,再加载静态内部类(初始静态变量和静态代码块etc) 如果在程序中单纯的使用 外部,并不会触发静态内部类的加载 扩展: ①一个内部有静态内部类和非静态内部类静态内部类和非静态内部...
  • 静态内部类实例化

    2021-10-01 16:36:17
    静态内部类实例化 结论: 静态内部类中的非静态变量和方法需要实例化静态内部后,才能调用。(且访问权限够) 静态内部类中的静态变量和方法可以直接访问使用。(且访问权限够) 静态内部类可以访问外部的变量和...
  • 小编典典您可能是混淆static与abstract作为kihero说...在Java中,默认情况下,嵌套不是静态的(此非静态种类也称为“内部类”),这意味着它们需要其外部实例,并在隐藏字段的后台进行跟踪,但是这使内部类可以...
  • 内部但在方法外部声明的称为成员内部。我们可以通过两种方式实例化成员内部内调用在外调用...如果内部是静态的,则可以在没有外部实例的情况下实例化静态内部类。否则,内部对象必须与外部...
  • 【资料来源】方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以...
  • 的组成:属性、方法、构造器、代码块(普通块、静态块、构造块、同步块)、内部类(成员内部类、局部内部类) 2.内部类 (1)成员内部类静态、非静态 (2)局部内部类 位置:方法内、块内、构造器内 */ public ...
  • Java静态内部类

    2021-03-10 09:08:24
    为什么设计内部1、B只用于服务A,不需要与其他产生依赖关系,就可以将B设置成A的内部2、A里面有一些属性和方法可以抽出作为单独的模块或组件,就可以将其作为A的一个内部类静态内部类就是个独立的。...
  • 静态内部类不持有外部的引用这个观点是众所周知的。虽然明白是因为其构造函数内没有传入外部的引用。可是为什么静态可以没有传入引用呢,静态内部类的加载又是什么样的过程呢?这几天找到的答案,似乎都不能让...
  • 参考文章:【https://www.cnblogs.com/maohuidong/p/7843807.html】前言:在看单例模式的时候,在网上找帖子看见其中有一种(IoDH) 实现单例的方式,其中用到了静态内部类,文章中有写到当jvm加载外部的时候,并...
  • 背景开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类。在codeReview的时候稍微和大家聊了一下。尤其是Static 修饰和修饰对象和变量不一样呢?定义1. 内部可以将一个的定义...
  • Java静态内部类的作用

    2021-03-06 21:42:47
    Java静态内部类的作用在一个中创建另外一个,叫做成员内部。这个成员内部可以静态的(利用static关键字修饰),也可以是非静态的。由于静态的内部在定义、使用的时候会有种种的限制。在开发过程中,内部中...
  • 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用。...
  • 今天来说说Java中的最后一种内部——静态内部类所谓的静态内部类,自然就是用static修饰的内部,那用static修饰过后的内部,跟一般的内部相比有什么特别的地方呢?首先,它是静态的,这就意味着它的创建不...
  • 1、非静态内部类定义内部很简单,只要把一个放在另一个内部定义即可。public class OuterClass{//此处可以定义内部}注意:同一个java源文件定义了多个,它们之间是相互独立的,那种情况不是内部。内部...
  • 如果你在一个静态方法中创建一个InnerClass对象,比如在OuterClass中保存的main,那么事情会变得更加严峻.在那里你需要更明确: 这不行 public class OuterClass { public static void main(String[] args) { Inner...
  • 静态代码块:在系统初始化时时使用静态内部类:不能操作访问外部数据。静态的在运行时加载到内存中,不需要实例化,在的内部也不能使用this。1. 在中生命一个方法为static,可以直接点用词方法...
  • java内部类详解

    2021-02-26 09:28:04
    序言有位小同学要我写一篇这个的总结,我说那好吧,那就动手写总结一下这个内部类的知识,感觉这个在面试中也会经常遇到,内部类、反射、集合、IO流、异常、多线程、泛型这些重要的基础知识大家都比较容易记不住。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 246,258
精华内容 98,503
关键字:

java静态内部类实例化

java 订阅