干货 | Java中获取类名的3种方法!
获取类名的方法
Java 中获取类名的方式主要有以下三种。
- getName()
返回的是虚拟机里面的class的类名表现形式。
- getCanonicalName()
返回的是更容易理解的类名表示。
- getSimpleName()
返回的是类的简称。
都有什么区别?
通过一个实例来看下它们主要的区别。
public class TestClass {
public static void main(String[] args) {
// 外部普通类
System.out.println("方法名 类名");
System.out.println("getName " + TestClass.class.getName());
System.out.println("getCanonicalName " + TestClass.class.getCanonicalName());
System.out.println("getSimpleName " + TestClass.class.getSimpleName());
System.out.println();
// 内部类
System.out.println("getName " + TestInnerClass.class.getName());
System.out.println("getCanonicalName " + TestInnerClass.class.getCanonicalName());
System.out.println("getSimpleName " + TestInnerClass.class.getSimpleName());
System.out.println();
// 数组类
TestInnerClass[] testInnerClasses = new TestInnerClass[]{
new TestInnerClass(),
new TestInnerClass(),
new TestInnerClass()
};
System.out.println("getName " + testInnerClasses.getClass().getName());
System.out.println("getCanonicalName " + testInnerClasses.getClass().getCanonicalName());
System.out.println("getSimpleName " + testInnerClasses.getClass().getSimpleName());
System.out.println();
}
static class TestInnerClass {
}
}
程序输出以下结果。
方法名 类名
getName com.test.TestClass
getCanonicalName com.test.TestClass
getSimpleName TestClass
getName com.test.TestClass$TestInnerClass
getCanonicalName com.test.TestClass.TestInnerClass
getSimpleName TestInnerClass
getName [Lcom.test.TestClass$TestInnerClass;
getCanonicalName com.test.TestClass.TestInnerClass[]
getSimpleName TestInnerClass[]
[Lcom.test.TestClass$TestInnerClass;
值得说明一下。
这是一种对函数返回值和参数的编码,叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。
[
表示数组,一个代表一维数组,比如 [[
代表二维数组。之后 L
代表类描述符,最后;
表示类名结束。
结论
1、从以上结果可以看出 getName() 和 getCanonicalName() 在获取普通类名的时候没有区别,在获取内部类和数组类有区别的。
2、getSimpleName() 在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。
干货 | Java中获取类名的3种方法!的更多相关文章
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- PHP中获取星期的几种方法
PHP中获取星期的几种方法 PHP星期几获取代码: 1 date(l); 2 //data就可以获取英文的星期比如Sunday 3 date(w); 4 //这个可以获取数字星期比如123,注意0 ...
- Java中创建数组的几种方法
Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...
- 谈谈java中遍历Map的几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...
- Java中遍历map的四种方法 - 转载
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- Java 中 List 分片的 5 种方法!
前些天在实现 MyBatis 批量插入时遇到了一个问题,当批量插入的数据量比较大时,会导致程序执行报错,如下图所示: 原因是 MySQL 只能执行一定长度的 SQL 语句,但当插入的数据量较多时,会生 ...
- java中获取路径的几种基本的方法
package com.ygh.blog.realpath; import java.io.File; import java.io.IOException; import java.io.Input ...
- URL转Drawable之 Android中获取网络图片的三种方法
转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...
随机推荐
- ssh keygen命令实现免密码通信(git库获取操作权限:开发人员添加到git库中,获取操作权限)
先看两个机器实现免密码登陆通讯: 假设 A 为客户机器,B为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa 做法: 1.登录A机器 2.s ...
- Windows7安装Pygame软件
1. 工具包下载地址: Python下载地址: https://www.python.org/downloads/ pip下载地址:https://pypi.org/project/pip/#file ...
- Mysql创建索引
1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...
- Pascal's Triangle(杨辉三角)
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...
- JAVA程序员面试宝典
程序员面试之葵花宝典 面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...
- JDBC基本使用
J2EE技术规范(二)——JDBC 分类: java2012-12-03 14:25 1060人阅读 评论(8) 收藏 举报 一.了解JDBC (1) JDBC是以统一方式访问数据库的API (2) ...
- uwsgi 服务 invalid request block size: 4161 (max 4096)...skip问题的解决
问题报错: invalid request block size: 4161 (max 4096)...skip 问题原因:默认的uwsgi分配一个小的buffer(4k)来接收每个请求的头信息,如果 ...
- 关于JavaScript的那些话
1.初学者动手环境----推荐Chrome的控制台(F12调用)2.JS中两个非常重要的数据类型是对象和数组.3.JavaScript 程序是用Unicode字符集编写的.4.JavaScript是区 ...
- 自己用 Netty 实现一个简单的 RPC
目录: 需求 设计 实现 创建 maven 项目,导入 Netty 4.1.16. 项目目录结构 设计接口 提供者相关实现 消费者相关实现 测试结果 总结 源码地址:github 地址 前言 众所周知 ...
- 第三章 C++的三种基本控制结构
0x C++提供的三种基本控制结构 顺序结构:按照先后顺序依次执行程序中的语句 选择结构:按照给定条件有选择地执行程序中的语句 循环语句:按照给定规则重复地执行程序中的语句 1x 第一节 C++语句 ...