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

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

1. 静态内部类不持有外部类的引用

在普通内部类中,可以直接访问外部类的属性、方法,即使是private类型也可以,这是因为内部类持有外部类的引用,可以自由访问。而静态内部类只能访问外部类的静态方法和静态属性,如果是private也能访问,其他则不能访问。

2. 静态内部类不依赖外部类

普通内部类与外部类之间是相互依赖关系,内部类实例不能脱离外部类实例,也就是说他们会同生共死,一起声明,一起被垃圾回收。而静态内部类是可以独立存在的,即使外部类消亡了,静态内部类还是可以存在的。静态内部类形似内部,神似外部。编译之后的类文件名格式为:外部类$内部类

3. 普通内部类不能声明static的方法和变量

普通内部类不能声明static的方法和变量,允许static常量,静态内部类形似外部类,没有任何限制

时间: 2024-10-09 07:12:30

静态内部类和非静态内部类的区别的相关文章

《java入门第一季》之面向对象静态内部类和非静态内部类的区别

很感谢在内部类章节,"开心阳"先生给与的建议.使用静态内部类.这里就简单说一下静态内部类的使用. package com.devin; public class MyMain{ private static String name = "woobo"; private String num = "X001"; // 静态内部类可以用public,protected,private修饰 static class Person { // 静态内部类中

Java 静态内部类与非静态内部类 学习记录.

目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合,我并不是很清楚,留下一些值得思考的问题作为记录,说不定以后能自己来填.于是就会有这篇文章啦. 常规使用方法我也不想介绍,网上一大把,我就说说比较容易错的,值得注意的地方. 注意 这篇文章只是分享一下我对内部类的一些研究与困惑吧,说不定对大家有帮助,说不定能引导大家一起思考学习.Java语法知识其实

静态内部类与非静态内部类之间的访问

package cn.hncu.day3.inner; public class Outer { private int size; public void aa(){ size++; System.out.println(size); } public void bb(){ //共用this对象,不需要另外再new一个Outer对象去调用aa() aa(); //相当于this.aa(); } //非静态的内部类1---演示一个非静态内部类的基本用法 //可理解为外部类的一个成员,跟一个方法一

黑马程序员——————>非静态内部类

------- android培训.java培训.期待与您交流! ---------- 大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个人类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类,内部类主要有如下作用: 1:内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类. 2:内部类成员可以直接访问外部类的私有数据,因为内部类被当成其成员,同一个类的成员之间可以互相访问.但外部类不能访问内部类的实现细

Java中内部类揭秘(一):外部类与非静态内部类的”相互可见性“

声明:本博客为原创博客,未经允许,不得转载!原文链接为 http://blog.csdn.net/bettarwang/article/details/27012421. 我们都知道,非静态内部类可以访问外部类的私有成员(包括私有变量和方法),这也正是使用非静态内部类与普通类的一个重要区别:非静态内部类是依赖于外部类对象而存在的,这种依赖就包括它要能自由地访问外部类对象的所有成员(因为private成员都可以访问了,其他权限的成员更不在话下.不过一般来说一个内部类只会访问外部类的部分成员而不是全

java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定义了一个类(下文可以看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,他的用处可能对于初学者来说并不是那么显著,但是随着对他的深入了解,你会发现java的设计者在内裤类上面的确是用心良苦.学会使用内部类,是掌握java高级编程的一部分,他可以让你更优雅的设计你的程

非静态内部类创建静态实例造成的内存泄漏

请大家思考,为什么会内存泄漏? 1. 首先,非静态内部类默认会持有外部类的引用. 2. 然后又使用了该非静态内部类创建了一个静态的实例. 3. 该静态实例的生命周期和应用的一样长,这就导致了该静态实例一直会持有该Activity的引用,导致Activity的内存资源不能正常回收. 正确的做法有两种,一种是将内部类testResource改成静态内部类,还有就是将testResource抽取出来,封装成一个单例,如上一个例子那样,但是需要context时单例要切记注意Context的泄漏,使用ap

Java非静态内部类中为什么不能有静态变量却可以有常量?

如:public class InnerClassDemo{ int x; class A{ static int a = 0;//这样写是不合法的. static final int b=0;//这样写是合法的    }}解答:简单说,定义一个静态的域或者方法,要求在静态环境或者顶层环境,这里静态环境具体说,你的例子里如果加上 static class A就ok.非静态内部类 依赖于一个外部类对象,而静态域/方法是不依赖与对象——仅与类相关,因此,非静态内部类中不能定义静态域/方法,编译过不了

非静态内部类

非静态内部类里,不可以有静态方法.静态属性.静态块.