精华内容
下载资源
问答
  • 1.外部类,最大的修饰符有public(表示该在项目所有中可以被导入),default(该只能在同一个package中使用),abstract,final 2.内部指位于内部但不包括位于块、构造器、方法内,且有名称的,...
    1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final
    2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。
    3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰

    转载于:https://www.cnblogs.com/xhlwjy/p/11316057.html

    展开全文
  • java内部面试题: java内部分类: 成员内部,局部内部,静态...成员内部拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,默认情况下访问的是成员内部方法。访问外部类方法外部类.this...

    java内部类面试题:

    java内部类分类:

    成员内部类,局部内部类,静态内部类,匿名内部类

    静态内部类不能访问外部类的属性方法,所以android开发过程中可以优化handler

    其他内部类可以访问外部类,是因为持有外部类的引用。

    成员内部类说明:

    成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,默认情况下访问的是成员内部类的方法。访问外部类方法:

    外部类.this.成员变量

    外部类.this.成员方法

    外部类想访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问,内部类的创建依赖外部类:

            Outter outter = new Outter();

            Outter.Inner inner = outter.new Inner();  

      和外部类不同内部类可以用private,protected,public修饰,内部类有点类似外部类变量的味道。public 都可以访问,private修饰时只能在外部类的内部访问,protected修饰只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。

    局部内部类:

    方法内部定义,作用于在方法内部,不能用访问修饰符修饰。

    匿名内部类,没有构造函数,主要用于事件绑定,回调函数设置。

    静态内部类,添加了static 关键字,不依赖与外部类。

    内部原理说明:

    public class OuterClass {
    	
    	public static void main(String args) {
    		
    	}
    
    	class Inner1 {
    		
    	}
    	
    	static class Inner2{
    		
    	}
    	
    	public  void getInner() {
    		class Inner3{
    			
    		}
    	}
    	
    	public  void getEvent() {
    		setClick(new Event() {
    
    			@Override
    			public void onClick() {
    				
    			}
    			
    		});
    	}
    	
    	interface Event{
    		void onClick();
    	}
    	
    	public void setClick(Event event) {}
    	
    }

    编译之后生成:

    利用javap -p 命令进行分析。

    OuterClass.class是外部类对应的class。

    OuterClass$1是匿名内部类实现了接口Event的class

    javap -p OuterClass$1.class
    
    Compiled from "OuterClass.java"
    class com.ldx.demo2.OuterClass$1 implements com.ldx.demo2.OuterClass$Event {
      final com.ldx.demo2.OuterClass this$0;
      com.ldx.demo2.OuterClass$1(com.ldx.demo2.OuterClass);
      public void onClick();
    }

    OuterClass$Inner1.class

    javap -p OuterClass$Inner1.class
    Compiled from "OuterClass.java"
    class com.ldx.demo2.OuterClass$Inner1 {
      final com.ldx.demo2.OuterClass this$0;
      com.ldx.demo2.OuterClass$Inner1(com.ldx.demo2.OuterClass);
    }

    可以看到构造函数中持有外部类的引用,所以可以访问外部类。

    OuterClass$Inner2.class

    javap -p OuterClass$Inner2.class
    Compiled from "OuterClass.java"
    class com.ldx.demo2.OuterClass$Inner2 {
      com.ldx.demo2.OuterClass$Inner2();
    }

    静态内部类没有持有外部类的引用。

    OuterClass$1Inner3.class

    javap -p OuterClass$1Inner3.class
    Compiled from "OuterClass.java"
    class com.ldx.demo2.OuterClass$1Inner3 {
      final com.ldx.demo2.OuterClass this$0;
      com.ldx.demo2.OuterClass$1Inner3(com.ldx.demo2.OuterClass);
    }

    局部内部类持有外部类的应用

    展开全文
  • 关于外部类只能用public或默认修饰的说法:我是这样理解的:这些修饰权限是针对中的那些变量、方法、内部来说的,而外部类已经在最外部(即不存在说在哪个的内部,或是哪个的子类这些范围),作为单独文件...

    关于外部类只能用public或默认修饰的说法

    我是这样理解的:这些修饰权限是针对类中的那些变量、方法、内部类来说的,而外部类已经在最外部(即不存在说在哪个类的内部,或是哪个类的子类这些范围),类作为单独文件被加载不能被修饰为私有(private)或受保护的(protected)[下面也解释了]。只有类内部的那些变量方法去针对访问权限来讨论才有意义。

    上述讨论权限这样说才更具意义:

    public: (类中被修饰为public的所有变量、方法、内部类)对所有类可见。

    protected: (类中被修饰为protected的所有变量、方法、内部类)对同一包内的类和所有子类可见。

    default(即缺省,什么也不写): (类中被修饰为default的所有变量、方法、内部类)在同一包内可见。

    private: (类中被修饰为private的所有变量、方法、内部类)在同一类内(自身)可见。

    即:均是针对类内部的内容来讨论的访问权限所具备的意义。

    既然这样为什么还要对 外部类 或 类 做修饰呢,直接规定只有类内部才能使用访问权限修饰符不就行了?



    作者:李舜生
    链接:https://www.zhihu.com/question/60501402/answer/257896935
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • 这里所说的“匿名内部”主要是指在其外部类的成员方法内定义,同时完成实例化的,若其访问该成员方法中的局部变量,局部变量必须要被final修饰。 原因是编译程序实现上的困难:内部对象的生命周期会超过局部...

    重点!重点!重!点

    匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型

    1. 这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰。
    2. 原因是编译程序实现上的困难:内部类对象的生命周期会超过局部变量的生命周期。局部变量的生命周期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,这些局部变量全部死亡。而内部类对象生命周期与其它类一样:自创建一个匿名内部类对象,系统为该对象分配内存,直到没有引用变量指向分配给该对象的内存,它才会死亡(被JVM垃圾回收)。所以完全可能出现的一种情况是:成员方法已调用结束,局部变量已死亡,但匿名内部类的对象仍然活着。
    3. 如果匿名内部类的对象访问了同一个方法中的局部变量,就要求只要匿名内部类对象还活着,那么栈中的那些它要所访问的局部变量就不能“死亡”。
    4. 解决方法:匿名内部类对象可以访问同一个方法中被定义为final类型的局部变量。定义为final后,编译程序的实现方法:对于匿名内部类对象要访问的所有final类型局部变量,都拷贝成为该对象中的一个数据成员。这样,即使栈中局部变量已死亡,但被定义为final类型的局部变量的值永远不变,因而匿名内部类对象在局部变量死亡后,照样可以访问final类型的局部变量,因为它自己拷贝了一份,且与原局部变量的值始终一致。
    展开全文
  • 如果在IDE中,用protected和private修饰外部类,一定会报错的。 protected class Demo{ // 会报错! } private class Demo{ // 会报错! } public class Demo{ // 正确! } class Demo{ // 正确! } 什么...
  • 对于顶级(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制...
  • abstract,将一个声明为抽象,没有实现的方法,需要子类提供方法实现。 final,将一个生命为最终(即非继承),表示他不能被其他继承。 friendly,默认的修饰符,只有在相同包中的对象才能使用这样的...
  • 自从用eclipse写Java代码后,虽然效率得到了解放。但是很多Java有关的概念一下子弱了很多。没办法,自动提示、自动导包、自动这自动那的...最近重温了Java中权限...一、权限修饰修饰外部类的包内包外情况分析:...
  • 为什么内部引用外部类的局部变量时,此变量要用final修饰 代码 public void test() { final int i = 3; runOnUiThread(new Runnable() { @Override public void run() { mTvShow.s
  • 类修饰符: public (访问控制符) ,将一个声明为公共,他可以被任何对象访问,一个程序的主类必须是公共。 protected (保护访问控制符) 同一个包中的其他任何以及任何子类 (无论子类是在哪个包中声明的) 中...
  • java 外部类只能被public 和 default 修饰(但是这是为什么?) 对于一个外部类 定义为 private 很显然是没有意义的,一个定义出来其他的都无法和他沟通,独立存在是没有意义的. 默认是default,即缺省的时候外部...
  • java中的类修饰符、成员变量修饰符、方法修饰

    千次阅读 多人点赞 2016-09-09 15:07:15
    java中的类修饰符、成员变量修饰符、方法修饰
  • 1.外部类,最大的修饰符有public(表示该在项目所有中可以被导入),default(该只能在同一个package中使用),abstract,final 2.内部指位于内部但不包括位于块、构造器、方法内,且有名称的,...
  • 首先,不清楚Java外部类和内部的同学可以先百度一下。 其次,我们简单了解一下四种权限修饰符: private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本,其他任何都无法访问。...
  • 【考题题干】的设计要求它的某个成员变量不能被外部类直接访问。应该使用下面的哪些修饰符 获得需要的访问控制。 A.public B.no modifier C.protected D.private 【试题分析】Java 有 4 种访问类型,...
  • private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本,其他任何都无法访问。 public(公共的)接口访问权限:使用public关键字,就意味着被声明的成员或方法对所有都是可以...
  • Java进阶(四十)Java、变量、方法修饰符讲解

    万次阅读 多人点赞 2016-08-30 10:00:51
    Java进阶(四十)Java、变量、方法修饰符讲解Java类修饰符 abstract: 将一个声明为抽象,没有实现的方法,需要子类提供方法实现。 final: 将一个生命为最终(即非继承),表示他不能被其他继承。 private:...
  • 对于顶级(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制...
  • 大家都知道的成员变量和方法可以使用private和protected修饰。使用private修饰,表示该的成员只能在的内部访问。使用protected修饰,表示该的成员可以被的内部、同包下的其它以及该的子类访问。从组织...
  • abstract,将一个声明为抽象,没有实现的方法,需要子类提供方法实现。 final,将一个生命为最终(即非继承),表示他不能被其他继承。 friendly,默认的修饰符,只有在相同包中的对象才能使用这样的...
  • 默认的修饰符(default)可以保证该外部类可被同一包的其它使用。 public可以使该在同一工程的任意位置(本包和其它包)中使用。 若声明为private,该不能被任何其它调用,则失去了在实际应用中的意义(一...
  • abstract 将一个声明为抽象,没有实现方法,需要子类提供方法的实现,所以不能创建该的实例 final 将一个声明为最终,即非继承,表示 他不能被其他继承 缺省 缺省修饰的时候,则表示在相同包的对象...
  • final可以修饰类方法,变量。 final修饰不可以被继承。 final修饰方法不可以被覆盖。 final修饰的变量是一个常量,只能被赋值一次。 内部只能访问被final修饰的局部变量(JDK8之前)。 //final修饰...
  • static和final能否修饰类方法,属性

    千次阅读 2018-12-21 02:50:05
    可以修饰方法。 可以修饰属性。 1-1:修饰内部后内部有什么特点? 答:可以直接创建对象,创建方式如下 1-2:如果内部没有被继承如果创建对象? 答:必须先new一个外部类对象,然后在对象.new 外部类创建 ...
  • 文章目录1 内部的基本概念1.1 内部的定义1.2 内部的优缺点2 创建内部2.1 在外部类外部创建非静态内部2.2 在外部类外部创建静态内部类...3.2 静态内部3.3 方法内部3.4 匿名内部4 内部外部类的关系...
  • 修饰符分为:可访问控制符和非访问控制符两种。 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract ;最终类修饰符 final ① 公共类修饰符 public Java 语言中 的可访问控制符...
  • 内部没有使用static关键字修饰,并且和外部类的成员变量和方法属于同一级别,这样的是非静态成员内部(可以使用权限修饰修饰,和final、abstract关键字修饰)。 public class Atest { private String name = ...
  • class Outer { private String name = "hello world . "; public void fun(final String s) { class Inner { public void print() { Syst

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 179,609
精华内容 71,843
关键字:

外部类修饰方法