首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java内部类以及为什么要用public static void修饰main()函数,String args[]是什么?(浅显的一些探索)

} } 上面代码测试了一些常规的方法。下面简单说明几点 1:首先非静态成员内部类里面是不可以定义静态的属性的,否则编译不会通过。...block Inner inner = outerandInner.new Inner(); 4:非静态成员内部类可以访问到外部类的属性 然后可以通过inner调用非静态成员内部类属性...5:非静态成员内部类可以访问到外部私有化属性。 ---- 6:外部类也是不能直接访问静态局部成员内部类成员的,这个特点同属于对内部类访问的特点。...8:静态成员内部类不可以访问到外部类的私有化成员 9:静态成员内部类可以直接访问到外部类的静态成员 10:静态成员内部类不能直接访问外部类非静态成员 局部内部类 局部内部类是一个在方法中定义的内部类...为什么main方法要用static修饰 我就疑惑为什么mian方法非要是静态的?

25120

Java之static作用的全方位总结

但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。举个简单的例子: ?   ...而对于非静态成员方法,它访问静态成员方法/变量显然是毫无限制的。   因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。...但是在嵌套类里可以包含所有这些东西。也就是说,在非静态内部类中不可以声明静态成员,只有将某个内部类修饰为静态类,然后才能够在这 个类中定义静态的成员变量与成员方法。    ...该静态导入语句使用通配符来表达“我想在此类中的所有静态成员上进行静态导入”。 3、现在我们终于看到静态导入特性的好处!我们不必在System.out.println中键入System。太好了!...虽然对于静态方法来说没有this,那么在非静态方法中能够通过this访问静态成员变量吗?先看下面的一个例子,这段代码输出的结果是什么?

1.6K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    领导说再这么写就GC掉我!

    这个写法大家应该没啥异议,日常的开发中有时也会写内部类,我们稍微深入的想一下:为什么 Inner 类可以直接用父类的东西呢? 因为非静态内部类持有外部类的引用。...:为非静态内部类持有外部类的引用。...延伸一下 再看看我前面说的那个结论: 非静态内部类持有外部类的引用。 强调了一个“非静态”,如果是静态内部类呢?...这个就是告诉我:当我们在使用内部类的时候,尽量要使用静态内部类,免得莫名其妙的持有一个外部类的引用,又不用上。 其实用不上也不是什么大问题。 真正可怕的是:内存泄露。...比如网上的这个测试案例: Inner 类不是静态内部类,所以它持有外部类的引用。但是,在 Inner 类里面根本就不需要使用到外部类的变量或者方法,比如这里的 data。

    19410

    从字节码深刻理解内部类

    (如果 entry 使用内部类,每个 entry 中将会包含一个指向该 Map 的引用,这样就浪费了空间和时间) 思考 内部类是如何获取到外部类的属性? 静态内部类没有调用外部类属性时 ?...静态内部类好处 延迟加载,当真正调用静态内部类时才会去加载。 可以访问外部类的私有变量。 可以作为辅助类,但其实可以把它当成一个普通的类来看。...现在我们考虑一下我图中的那个 ? 为什么要去调用一个 Object 的 getClass 方法呢?...非静态内部类常见用法 定义一个视图。 例如,Map 接口的实现往往使用非静态内部类来实现它们的集合视图。Set 和 List 这种集合接口的实现往往也使用非静态内部类来实现他们的迭代器。...非静态内部类的每个实例都隐含着与外部类的一个外部实例相关联。在非静态内部类的实例方法内,可以调用外部实例上的方法,或者利用修饰过的 this 构造获得外部实例的引用。

    92220

    Android常见问题及开发经验总结(四)

    1)单例模式   2)观察者模式 这两个是我用的最多的。 其它的还有 Builder模式  外观模式 模板方法 策略模式 代理模式 迭代器模式 责任链模式 命令模式 桥接模式 原型模式。...,为什么建议使用static关键字 这个是静态内部类和非静态内部类的主要区别之一。...非静态内部类会隐式持有外部类的引用,就像大家经常将自定义的adapter在Activity类里,然后在adapter类里面是可以随意调用外部activity的方法的。...当你将内部类定义为static时,你就调用不了外部类的实例方法了,因为这时候静态内部类是不持有外部类的引用的。声明ViewHolder静态内部类,可以将ViewHolder和外部类解引用。...如果是静态的话,你就不能直接引用外部类,迫使你关注如何避免相互引用。 所以将 ViewHolder内部类 定义为静态的,是一种好习惯。 Android进程间通信有哪几种方式?

    42830

    这里有线程池、局部变量、内部类、静态嵌套类和一个莫得名堂的引用,哦,还有一个坑!

    这个写法大家应该没啥异议,日常的开发中有时也会写内部类,我们稍微深入的想一下:为什么 Inner 类可以直接用父类的东西呢? 因为非静态内部类持有外部类的引用。...这就是为什么我们说:为非静态内部类持有外部类的引用。...延伸一下 再看看我前面说的那个结论: 非静态内部类持有外部类的引用。 强调了一个“非静态”,如果是静态内部类呢?...这个就是告诉我:当我们在使用内部类的时候,尽量要使用静态内部类,免得莫名其妙的持有一个外部类的引用,又不用上。 其实用不上也不是什么大问题。 真正可怕的是:内存泄露。...比如网上的这个测试案例: Inner 类不是静态内部类,所以它持有外部类的引用。但是,在 Inner 类里面根本就不需要使用到外部类的变量或者方法,比如这里的 data。

    55510

    夯实Java基础系列18:深入理解Java内部类及其实现原理

    2 由于Java规定静态内部类不能用使用外在类的非静态属性和方法,所以只是为了方便管理类结构而定义。于是我们在创建静态内部类的时候,不需要外部类对象的引用。...让他成为主类的实例一部分 然后又想在内部类声明和实例无关的静态的东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法...3 对于非静态内部类是不能出现静态模块(包含静态块,静态属性,静态方法等) 4 非静态类的使用需要依赖于外部类的对象,详见上述对象innerClass 的初始化。...直到这里还没有解释为什么是final 在内部类中的属性和外部方法的参数两者从外表上看是同一个东西,但实际上却不是,所以他们两者是可以任意变化的,也就是说在内部类中我对属性的改变并不会影响到外部的形参,而然这从程序员的角度来看这是不可行的...也就是说,内部类可以被重载吗?

    1.2K10

    夯实Java基础系列18:深入理解Java内部类及其实现原理

    2 由于Java规定静态内部类不能用使用外在类的非静态属性和方法,所以只是为了方便管理类结构而定义。于是我们在创建静态内部类的时候,不需要外部类对象的引用。...让他成为主类的实例一部分 然后又想在内部类声明和实例无关的静态的东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法...3 对于非静态内部类是不能出现静态模块(包含静态块,静态属性,静态方法等) 4 非静态类的使用需要依赖于外部类的对象,详见上述对象innerClass 的初始化。...直到这里还没有解释为什么是final 在内部类中的属性和外部方法的参数两者从外表上看是同一个东西,但实际上却不是,所以他们两者是可以任意变化的,也就是说在内部类中我对属性的改变并不会影响到外部的形参,而然这从程序员的角度来看这是不可行的...也就是说,内部类可以被重载吗?

    41910

    Java基础8:深入理解内部类

    2 由于Java规定静态内部类不能用使用外在类的非静态属性和方法,所以只是为了方便管理类结构而定义。于是我们在创建静态内部类的时候,不需要外部类对象的引用。...让他成为主类的实例一部分 然后又想在内部类声明和实例无关的静态的东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法...3 对于非静态内部类是不能出现静态模块(包含静态块,静态属性,静态方法等) 4 非静态类的使用需要依赖于外部类的对象,详见上述对象innerClass 的初始化。...直到这里还没有解释为什么是final 在内部类中的属性和外部方法的参数两者从外表上看是同一个东西,但实际上却不是,所以他们两者是可以任意变化的,也就是说在内部类中我对属性的改变并不会影响到外部的形参,而然这从程序员的角度来看这是不可行的...也就是说,内部类可以被重载吗?

    1.6K00

    Android | App内存优化 之 内存泄漏 要点概述 以及 解决实战

    非静态内部类的静态实例 (“类”是这个类的类型,实例是new 出来的实例) 非静态内部类会维持一个到外部类实例的引用, 如果非静态内部类的实例是静态的, 就会间接长期维持着外部类的引用,阻止被回收掉...解决办法: 使用静态内部类, 静态内部类实例,不会维持一个到外部类实例的引用!...2.多线程相关的匿名内部类和非静态内部类 匿名内部类同样会持有外部类的引用, 如果在线程中执行耗时操作 就有可能发生内存泄漏,导致外部类无法被回收,直到耗时任务结束, 解决办法: 在页面退出时结束线程中的任务...Handler临时性内存泄露 Handler导致的内存泄漏也可以被归纳为非静态内部类实例(这里特指Handler实例)导致的; Handler通过发送Message与主线程交互, Message...图片回收:使用完bitmap,及时使用Bitmap.recycle()回收。 问题:Android不是自身具备垃圾回收机制吗?此处为何要手动回收。

    1.3K10

    【C++】深入探索类和对象:初始化列表及其static成员与友元

    static的特性:静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明 类静态成员即可用 类名::静态成员或对象.静态成员来访问...静态成员函数没有隐藏的this指针,不能访问任何非静态成员 静态成员也是类的成员,受public,protected,private访问限定符的限制 问题: 静态成员函数可以调用非静态成员函数吗?...非静态成员函数可以调用类的静态成员函数吗? 答: 静态成员函数可以调用非静态成员函数,但是需要通过对象或者指针来调用非静态成员函数。...非静态成员函数可以直接调用类的静态成员函数,使用类名或者对象名即可。 五、友元 友元提供了一种突破封装的方式(开后门),有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。...内部类这个类收到外部类的类域的限制 C++不喜欢使用内部类,类独立更好使用。

    11310

    Handler机制与原理

    非静态内部类是会隐式持有外部类的引用,所以当其他线程持有了该Handler,线程没有被销毁,则意味着Activity会一直被Handler持有引用而无法导致回收 * MessageQueue中如果存在未处理完的...Message,Message的target也是对Activity等的持有引用,也会造成内存泄漏 解决的办法 * 使用静态内部类 + 弱引用的方式 * 静态内部类不会持有外部类的的引用,...当需要引用外部类相关操作时,可以通过弱引用还获取到外部类相关操作,弱引用是不会造成对象该回收回收不掉的问题,不清楚的可以查阅JAVA的几种引用方式的详细说明 * 在外部类对象被销毁时,将MessageQueue...new一个Message,而是通过Message的静态方法obtain()来得到的呢?...可以有多个Handler 可以在子线程直接创建一个Handler吗?会出现什么问题,那该怎么做? 不能在子线程直接new一个Handler。

    43310

    Java面向对象高频面试题

    抽象类和接口的区别 接口和抽象类都不能实例化 抽象类相比于普通类多的限制是可以添加抽象方法 接口中只能声明常量和抽象方法且访问修饰符必须都为public,在JDK8之后可以定义default方法和static...静态内部类和内部类的区别   静态内部类是被声明为static的内部类,它可以不依赖外部类的实例被实例化,而通常我们的内部类是需要通过外部类的实例才能实例化。...静态变量是对象间共享的 实例变量:数据具体的某个对象,必须要先创建对象,然后通过该对象来访问实例变量, 18.静态方法中是否可以访问普通方法   肯定不可以,静态方法是在类加载阶段就创建的,而普通方法是属性对象的...void speak(){ // 普通方法可以调用静态方法 show(); } } 19.如何实现克隆 原型模式 说明 浅克隆 只是拷贝本对象,其对象内部的数组...,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。

    33430

    竟让Spring Boot搞出那么多静态内部类

    我们知道static关键字它不仅可使用在方法上,那么本文将继续挖掘static在Spring环境下的用处。...,本文将聚焦在静态内部类上。...---- 认识静态/普通内部类 由于一些小伙伴对普通内部类 vs 静态内部类傻傻分不清,为了方便后续讲解,本处把关键要素做简要对比说明: 静态内部类可以声明静态or实例成员(属性和方法);而普通内部类则不可以声明静态成员...or非静态) --> 我理解这是普通内部类能 “存活” 下来的最大理由了吧?...总之,普通内部类和外部类的关系属于强绑定,而静态内部类几乎不会受到外部类的限制,可以游离单独使用。既然如此,那为何还需要static静态内部类呢,直接单独写个Class类岂不就好了吗?

    63230

    详解 Java 内部类

    但是于此同时,静态内部类中也无法访问外部类的非静态成员,因为外部类的非静态成员是属于每一个外部类对象的,而本身静态内部类就是独立外部类对象存在的,所以静态内部类不能访问外部类的非静态成员,而外部类依然可以访问静态内部类对象的所有访问权限的成员...由此,我们现在大概能猜到内部类对象是怎么取到外部类的 private 权限的字段了:就是通过这个外部类提供的静态方法。...最后,我们在 25 行字节码指令发现:内部类的构造方法通过 invokestatic 指令执行外部类的 access$100 静态方法(在 InnerClassTest 的字节码中已经介绍了)得到外部类对象的...但是可能存在这种情况:非静态内部类对象在某个时刻已经不在被使用,或者说这个内部类对象可以在不影响程序正确运行的情况下被回收,而因为我们对这个内部类的使用不当而使得其无法被 JVM 回收,同时会导致其外部类对象无法被回收...当然这并不是建议你不使用 static 关键字,只是在使用这个关键字之前可以考虑一下这个对象使用 static 关键字修饰对程序的执行确实更有利吗?

    62030

    【Java基本功】一文读懂Java内部类的用法和原理

    2 由于Java规定静态内部类不能用使用外在类的非静态属性和方法,所以只是为了方便管理类结构而定义。于是我们在创建静态内部类的时候,不需要外部类对象的引用。...让他成为主类的实例一部分 然后又想在内部类声明和实例无关的静态的东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法...3 对于非静态内部类是不能出现静态模块(包含静态块,静态属性,静态方法等) 4 非静态类的使用需要依赖于外部类的对象,详见上述对象innerClass 的初始化。...直到这里还没有解释为什么是final 在内部类中的属性和外部方法的参数两者从外表上看是同一个东西,但实际上却不是,所以他们两者是可以任意变化的,也就是说在内部类中我对属性的改变并不会影响到外部的形参,而然这从程序员的角度来看这是不可行的...也就是说,内部类可以被重载吗?

    1.2K30

    详解 Java 内部类

    但是于此同时,静态内部类中也无法访问外部类的非静态成员,因为外部类的非静态成员是属于每一个外部类对象的,而本身静态内部类就是独立外部类对象存在的,所以静态内部类不能访问外部类的非静态成员,而外部类依然可以访问静态内部类对象的所有访问权限的成员...由此,我们现在大概能猜到内部类对象是怎么取到外部类的 private 权限的字段了:就是通过这个外部类提供的静态方法。...最后,我们在 25 行字节码指令发现:内部类的构造方法通过 invokestatic 指令执行外部类的 access$100 静态方法(在 InnerClassTest 的字节码中已经介绍了)得到外部类对象的...但是可能存在这种情况:非静态内部类对象在某个时刻已经不在被使用,或者说这个内部类对象可以在不影响程序正确运行的情况下被回收,而因为我们对这个内部类的使用不当而使得其无法被 JVM 回收,同时会导致其外部类对象无法被回收...当然这并不是建议你不使用 static 关键字,只是在使用这个关键字之前可以考虑一下这个对象使用 static 关键字修饰对程序的执行确实更有利吗?

    52630

    竟让Spring Boot搞出那么多静态内部类

    我们知道static关键字它不仅可使用在方法上,那么本文将继续挖掘static在Spring环境下的用处。...,本文将聚焦在静态内部类上。...--- 认识静态/普通内部类 由于一些小伙伴对普通内部类 vs 静态内部类傻傻分不清,为了方便后续讲解,本处把关键要素做简要对比说明: 静态内部类可以声明静态or实例成员(属性和方法);而普通内部类则不可以声明静态成员...or非静态) --> 我理解这是普通内部类能 “存活” 下来的最大理由了吧 总之,普通内部类和外部类的关系属于强绑定,而静态内部类几乎不会受到外部类的限制,可以游离单独使用。...是独立类(top-level类 or 静态内部类属于独立类) 并且 isConcrete()是具体的(非接口非抽象类) isAbstract()是抽象类 并且 类内存在标注有@Lookup注解的方法 基于以上例子

    1.2K80

    Kotlin学习笔记(四)-面向对象

    前言 本章将讲解一些管对对象和基础编程的知识。如:类,接口,抽象类,数据类,扩展方法等 接口 其实这部分的设计思路和Java基本一致。...扩展方法 为现有类添加方法、属性: fun X.y):Z{..} val X.m 注意扩展属性不能初始化,类似接口属性 Java 调用扩展成员类似调用静态方法 例子: //自己定义一个扩展方法 方法的名字是...(非静态内部类持有外部类的引用,而静态内部类无法持有外部类的引用,这是因为静态内部类优先于非实例对象而存在) 内部类和静态内部类的区别: 是否持有外部类的状态(也就是非静态内部类中可以调用 外部类.this...变成非静态 这样就可以访问到外部类的属性的 val a = 6 fun main(args: Array) { // println...(a)//访问不到 说明kotlin中默认是使用静态static内部类的 println(this@Outter.a)//当内外部类重载相同的属性或方法时 通过this@Outter

    85510

    Java面向对象进阶

    等价于 [A-Za-z0-9_] 内部类 成员内部类 成员内部类和成员方法、成员变量一样,是对象所有的,而不是类所有的 成员内部类也可以使用访问权限控制 public class Test {...:"+name); //成员内部类可以访问到外部的成员变量 //因为成员内部类本身就是某个对象所有的,每个对象都有这样的一个类定义,这里的name是其所依附对象的...} } } 静态内部类 静态内部类就像静态方法和静态变量一样,是属于类的 不需要依附任何对象,我们可以直接创建静态内部类的对象 静态内部类由于是静态的,所以相对外部来说,整个内部类中都处于静态上下文...(注意只是相当于外部来说)是无法访问到外部类的非静态内容的 public class Test { private final String name; public Test(String...可以在表达式的后面添加错误信息: public static void main(String[] args) { int a = 10; assert a > 10 : "我是自定义的错误信息

    19930
    领券