Java学习之四:“this”和“类名.this”以及“类名.class”的区分和详解

引言:
对于以上三个语法结构的区分,需要先理解Class类
所有对象的类以及调用了静态方法的类都需要在对象创建之前在JVM虚拟机中加载,加载内容被称为“类对象”,每个类的类对象是唯一且是不可变的。而在对象创建的时候,由于类对象已加载,所以可以添加上类型标签。

1. Class类介绍:
此类的介绍是为了解释 类名.class的含义。

1.1 Class类简介:
Class类只有私有的构造方法,所以不能使用new关键词来创建一个Class对象;只有JVM虚拟机可以创建一个类对象,且是在类加载的时候被调用的。
运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象,和其名字相同的类对象名。
每个数组属于被映射为 Class 对象的一个类,所有具有相同类型和维数的数组都共享该 Class 对象。只不过数组对象的名字比较奇怪
一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。
1.2 得到类对象的三个方法:
虽然我们不能使用构造器得到Class对象,但是却可以通过其他方法得到:(注意,class对象可以是接口)
我们先创建一个对象,比如: String类: String str = new String("Hello World");

方法1:通过 对象.getClass()得到对象类(非静态方法):
Class classOfString=str.getClass();

注意事项:getClass方法继承于Object类,是一个native方法

方法2:通过Class类的静态方法forName()返回类对象:

        try {
            Class classOfString2=Class.forName("java.lang.String");
            System.out.println(classOfString2);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
注意事项:

forNanme()方法会抛出异常ClassNotFoundException,所以需要使用try-catch语句捕获。
forName方法输入参数为类名,而不是对象名,并且要完整写出类路径,否则会抛出异常
方法3:通过类名.class返回此类对象(非静态方法):
Class classOfString3=String.class;

介绍完以上三种方法,不仅知道了得到Clas对象的方法,也知道了类名.class是什么意思了,其就是返回类名所对应的唯一类对象。

1.3 Class类的常用方法:
getName()
其原理上调用了一个本地私有方法的非静态方法,返回String类型的实例,代表Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
newInstance()
此方法用于返回一个类对象的实例,实例构造只能无参构造器,且为弱类型(即Object类型)。
例子:
    try {
                String s =(String) classOfString.newInstance();
        }     catch (InstantiationException e) {
                e.printStackTrace();
            }     catch (IllegalAccessException e) {
                e.printStackTrace();
        }
可见由于newInstance返回的是Object类型,所以需要额外向下强制转型。

getClassLoader()
返回该类的类加载器。
getComponentType()
返回表示数组组件类型的 Class。
getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
isArray()
判定此 Class 对象是否表示一个数组类。
2. this关键词:
this关键字的三大应用:

this调用本类中的属性,也就是类中的成员变量,例如:set和构造器中经常使用this关键字(与输入方法的输入参数同名了);
this调用本类中的其他方法,但通常this可以省略;
this调用本类中的其他构造方法,调用时要放在构造方法的首行,this()方法可以为有参,也可以为无参(重载)。
总之,关键字this用于指代当前的对象。因此,类内部可以使用this作为前缀引用实例域以及方法(包括构造方法);

3. 类名.this :
类名.this一般用于内部类调用外部类的对象时使用,因为内部类使用this.调用的是内部类的域和方法,为了加以区别,所以使用类名.this来加以区分。例如以下代码:

class OuterClass {
    final String str = "OuterClass";
    private InnerClass innerClass;

    public InnerClass getInner() {
        innerClass = new InnerClass();
        return innerClass;

    }

    class InnerClass {
        final String str = "InnerClass";
        final String str2 = this.str;//指向内部类的域
        final String str3 = OuterClass.this.str;//指向外部类的域
    }

    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        InnerClass innerClass = outerClass.getInner();
        System.out.println(innerClass.str);
        System.out.println(innerClass.str2);
        System.out.println(innerClass.str3);
    }

}
控制台输出:

InnerClass
InnerClass
OuterClass
4.总结
组合    用法说明
this    指代当前对象的引用
类名.class    指向每个类对应的唯一类对象(类型为Class)
类名.this    内部(可以是匿名内部类)类调用外部类的对象时使用,即在内部类中使用时:外部类对象是外部类名.this,内部类对象则是this

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于 nacos 的 application.properties 配置文件,我可以为你提供以下详细解释: 1. server.mode:指定 Nacos 运行模式,支持 cluster、standalone、config 和 console 四种模式,默认是 standalone。 2. server.port:指定 Nacos 服务端口号,默认为 8848。 3. server.tomcat.max-threads:指定 Tomcat 最大线程数,默认为 200。 4. server.tomcat.accept-count:指定 Tomcat 接受的最大连接数,默认为 200。 5. spring.datasource.platform:数据源类型,支持 MySQL、Derby、H2 等。 6. spring.datasource.dynamic.datasource.master.url:主数据源 URL。 7. spring.datasource.dynamic.datasource.master.username:主数据源用户名。 8. spring.datasource.dynamic.datasource.master.password:主数据源密码。 9. spring.datasource.dynamic.datasource.master.driver-class-name:主数据源驱动类名。 10. spring.datasource.dynamic.datasource.slave.url:从数据源 URL。 11. spring.datasource.dynamic.datasource.slave.username:从数据源用户名。 12. spring.datasource.dynamic.datasource.slave.password:从数据源密码。 13. spring.datasource.dynamic.datasource.slave.driver-class-name:从数据源驱动类名。 14. logging.level.com.alibaba.nacos:指定 Nacos 日志级别。 15. spring.cloud.nacos.config.server-addr:指定 Nacos 配置中心地址。 16. spring.cloud.nacos.config.namespace:指定 Nacos 配置中心命名空间。 以上是 nacos 的 application.properties 配置文件详解,希望能够帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值