zoukankan      html  css  js  c++  java
  • 类名.class 与 类名.this 详解

    类名.class 与 类名.this 详解

    今天在看 PropertyPlaceholderConfigurer 源码时,突然看到一个 PropertyPlaceholderConfigurer.this.resolvePlaceholder 的用法,以前只知道有个 "类名.class" 的用法,今天才知道还有个 "类名.this"

    类名.class

    我们知道在 java 中,一个类在被加载的时候虚拟机就会自动的生成一个这个类的一个 Class 类型的 "类对象",每个类都对应着一个这样的类对象,通过这个 Class 类型的类对象,我们就能够使用 "内省与反射" 机制,访问一个类的信息,比如:对应类中的方法有哪些,成员域有哪些等等;获取一个类的 "类对象" 的方法之一就是通过使用 "类名.class" 这个方式返回一个 Class 类型的对象,其他的获取这个 Class 对象的方法如下:

    1. 利用对象调用 getClass() 方法获取该对象的 Class 实例

    2. 使用 Class 的静态方法 forName(),用类的名字获取一个 Class 实例

    3. 运用 "类名.class" 的方式获取 Class 实例,对基本数据类型的封装类,还可以采用 "类名.type" 来获取对应的基本数据类型的 Class 实例。

    这个应该都比较熟了,就不过多介绍了,下面着重介绍一下 "类名.this"

    类名.this

    这个语法的应用主要有两个方面:

    (1) 当在一个类的内部类中,如果需要访问外部类的方法或者成员域的时候,如果使用 "this.成员域" 调用的显然是内部类的域 ,如果我们想要访问外部类的域的时候,就要必须使用 "外部类.this.成员域"

    public class PropertyPlaceholderConfigurer extends PlaceholderConfigurerSupport {
    
        protected String resolvePlaceholder(String placeholder, Properties props, int systemPropertiesMode) {
            String propVal = null;
            if (systemPropertiesMode == SYSTEM_PROPERTIES_MODE_OVERRIDE) {
                propVal = resolveSystemProperty(placeholder);
            }
            if (propVal == null) {
                propVal = resolvePlaceholder(placeholder, props);
            }
            if (propVal == null && systemPropertiesMode == SYSTEM_PROPERTIES_MODE_FALLBACK) {
                propVal = resolveSystemProperty(placeholder);
            }
            return propVal;
        }
    
        private class PropertyPlaceholderConfigurerResolver implements PlaceholderResolver {
    
            private final Properties props;
    
            private PropertyPlaceholderConfigurerResolver(Properties props) {
                this.props = props;
            }
    
            @Override
            public String resolvePlaceholder(String placeholderName) {
                return PropertyPlaceholderConfigurer.this.resolvePlaceholder(placeholderName, props, systemPropertiesMode);
            }
        }
    
    }
    

    内部类 PropertyPlaceholderConfigurerResolver 在 resolvePlaceholder 方法中调用外部类的方法为 PropertyPlaceholderConfigurer.this.resolvePlaceholder

    (2) 还有一个使用情况,那就是在是使用意图更加的清楚

    public class MainActivity extends Activity {
    
        @Override   
        protected void onCreate(Bundle savedInstanceState) {    
            super.onCreate(savedInstanceState);    
            setContentView(R.layout.activity_main);   
    
            Intent intent = new Intent(MainActivity.this , OtherActivity.class) ;  
        }
    }
    
  • 相关阅读:
    shell的随机数
    centos7 安装install_mysql5.7网络教程安装_无报错.sh
    关于所有运动框架总结
    仅一年工作经验成功跳槽字节跳动,腾讯并拿到字节的offer,全靠这份面经!
    面试必看!花了三天整理出来的并发编程的锁及内存模型,看完你就明白了!
    新鲜出炉!花了三天整理的JVM复习知识点,面试突击必备!
    深度分析!面试99%被问到的多线程和并发篇,看完你就懂了
    去年去阿里面试,被问到ArrayList和LinkedList,我是这样回答的!
    深度分析:面试阿里,字节99%会被问到Java类加载机制和类加载器
    深度分析:Java并发编程之线程池技术,看完面试这个再也不慌了!
  • 原文地址:https://www.cnblogs.com/binarylei/p/8433282.html
Copyright © 2011-2022 走看看