Java内部类与外部类】的更多相关文章

昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类)和静态内部类,两者与外部类的关系是不一样的,创建的方式也不一样. 1 非静态内部类 Java的非静态内部类在构造的时候,会将外部类的引用传递进来,并且作为内部类的一个属性,因此,内部类会隐式地持有其外部类的引用.也就是非静态内部类在构造的时候需要有一个外部类的实例传递进来进行构造,不能像普通的Jav…
1.内部类访问外部类的成员和方法 在内部类中,可以无障碍地访问外部类的所有成员和方法. 在下面的实验代码中,可以看到,内部类sl可以访问外部类的私有成员:sz 和 cur. 同时可以访问私有方法:privatePrintCur(): 2.外部类访问内部类的成员和方法 在外部类中,同样可以自由访问内部类的成员和方法. 在实验代码中,外部类可以访问内部类的私有成员:在printCur方法中访问私有成员cur. 3.实验代码 www.yztrans.com [java] view plaincopy…
java 内部类和静态内部类的区别  详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和静态内部类(Static Nested Class)的区别:定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明public.protected.private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static.final的,也可以实现…
1.使用static可以声明一个内部类, 可以直接在外部调用 class Outer{ // 定义外部类 private static String info = "hello world" ; // 定义外部类的私有属性 static class Inner{ // 使用static定义内部类为外部类 public void print(){ // 定义内部类的方法 System.out.println(info) ; // 直接访问外部类的私有属性 } }; public void…
最近在看Java相关知识的时候发现Java中同时存在内部类以及非公有类概念,而且这两个类都可以不需要单独的文件编写,可以与其他类共用一个文件.现根据个人总结将两者的异同点总结如下,如有什么不当地方,欢迎大家指正. 1.非公有类和内部类对应的文件名与这两种类的类名无关: 2.一个源文件中可以包含多个非公有类或者内部类: 3.非公有类不能使用public关键字(一般前面不加关键字),内部类可以使用public.private.protected关键字: 4.非公有类中可以添加0到多个内部类: 5.非…
错误提示: 没有任何类型 TestThread 的外层实例可访问.必须用类型 TestThread 的外层实例(例如,x.new A(),其中 x 是 TestThread 的实例)来限定分配. public class CarTest { public class Car{ String engine; String Wheel; public void run(){ System.out.println("汽车在奔跑"); } } /** * @param args */ publ…
在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命周期内始终持有外部类的对象的引用,造成外部类的对象始终不满足GC的回收条件,反映在内存上就是内存泄露.(如,Android中Activity的内存泄露) 解决方案为 1.将内部类定义为static 2.用static的变量引用匿名内部类的实例 测试代码 class Outer { class Inn…
Java中non-static内部类为何可以访问外部类的变量?Java中外部类又为何可以访问内部类的private变量?这两个问题困扰过我一段时间,查了一些网上的答案,大多从“闭包”概念入手,理解起来很是费劲,能否从另外一个角度来解释这个问题呢?有句话叫做“真正了不起的程序员应该对每一个字节都了如指掌”,而弄明白Java程序的“每个字节”还是相对容易的,下面就通过一段Java代码的bytecode来分析: public class Test { public static void main(S…
今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,也就会自动被消除,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期,下面通过一个实例加以说明: 如例中所示,在外部类Outer中声明了一个内部类TimerPrint,这个类中的方法引用了方法start中的一个局部变量testTxt 逻辑上:因为该内部类出现在一个方法的…
内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { class B { public void shout1() { System.out.println(i); } } B b = new B(); b.shout1(); } public static void main(String[] args) { A a = new A(); a.shout…