数据库班级字段怎么定义名称_班级名称

数据库班级字段怎么定义名称

在Java中,每个类都有一个名称。 类位于包中,这使我们程序员可以一起工作,避免名称冲突。 我可以命名我的班级A ,也可以命名您的班级A ,只要它们位于不同的程序包中,它们可以很好地协同工作。

如果您查看Class的API,您肯定会注意到有三种不同的方法为您提供类的名称:

  • getSimpleName()为您提供不带包的类的名称。
  • getName()为您提供类的名称,其全包名称位于前面。
  • getCanonicalName()为您提供类的规范名称。

简单吗? 好吧,第一个很简单,第二个也很有意义,除非存在令人不安的规范名称。 这还不是很明显。 而且,如果您不知道规范名称是什么,那么您可能还会感到Java技能的力量受到干扰。 两者有什么区别?

如果您想进行准确的解释,请访问Java语言规范6.7章 。 在这里,我们进行一些更简单,更简单的理解,尽管不够全面。

让我们看一些例子:

package pakage.subpackage.evensubberpackage;
import org.junit.Assert;
import org.junit.Test;public class WhatIsMyName {@Testpublic void classHasName() {final Class<?> klass = WhatIsMyName.class;final String simpleNameExpected = "WhatIsMyName";Assert.assertEquals(simpleNameExpected, klass.getSimpleName());final String nameExpected = "pakage.subpackage.evensubberpackage.WhatIsMyName";Assert.assertEquals(nameExpected, klass.getName());Assert.assertEquals(nameExpected, klass.getCanonicalName());		}
...

这种“单元测试”运行得很好。 但是正如您所看到的,在这种情况下,名称和规范名称没有区别。 (请注意,程序包的名称是pakage而不是package 。要测试您的Java词汇技巧,请回答为什么?)

让我们看一下来自同一junit测试文件的下一个示例:

@Testpublic void arrayHasName() {final Class<?> klass = WhatIsMyName[].class;final String simpleNameExpected = "WhatIsMyName[]";Assert.assertEquals(simpleNameExpected, klass.getSimpleName());final String nameExpected = "[Lpakage.subpackage.evensubberpackage.WhatIsMyName;";Assert.assertEquals(nameExpected, klass.getName());final String canonicalNameExpected = "pakage.subpackage.evensubberpackage.WhatIsMyName[]";Assert.assertEquals(canonicalNameExpected, klass.getCanonicalName());		}

现在有区别。 当我们谈论数组时,简单的名称会发出信号,即在其后面加上了括号,就像在Java源代码中所做的那样。 “正常”名称看起来有点怪异。 它以L开头并附加分号。 这反映了JVM中类名的内部表示。 规范名称的更改与简单名称类似:对于以前的类,其类具有所有包名称作为前缀并附加了方括号。 似乎getName()更像是该类的JVM名称,而getCanonicalName()更像是Java源代码级别的完全限定名称。

让我们继续其他示例(我们仍在同一文件中):

class NestedClass{}@Testpublic void nestedClassHasName() {final Class<?> klass = NestedClass.class;final String simpleNameExpected = "NestedClass";Assert.assertEquals(simpleNameExpected, klass.getSimpleName());final String nameExpected = "pakage.subpackage.evensubberpackage.WhatIsMyName$NestedClass";Assert.assertEquals(nameExpected, klass.getName());final String canonicalNameExpected = "pakage.subpackage.evensubberpackage.WhatIsMyName.NestedClass";Assert.assertEquals(canonicalNameExpected, klass.getCanonicalName());		}

区别在于类名称中的美元符号。 同样,“名称”更多是JVM使用的名称,而规范名称是Java源代码之类的名称。 如果编译此代码,则Java编译器将生成以下文件:

  • WhatIsMyName.class
  • WhatIsMyName$NestedClass.class

即使该类被命名为嵌套类,它实际上也是一个内部类。 但是在命名上没有什么区别:另一个类中的静态或非静态类仅被命名为相同。 现在,让我们看一些更有趣的东西:

@Testpublic void methodClassHasName() {class MethodClass{};final Class<?> klass = MethodClass.class;final String simpleNameExpected = "MethodClass";Assert.assertEquals(simpleNameExpected, klass.getSimpleName());final String nameExpected = "pakage.subpackage.evensubberpackage.WhatIsMyName$1MethodClass";Assert.assertEquals(nameExpected, klass.getName());final String canonicalNameExpected = null;Assert.assertEquals(canonicalNameExpected, klass.getCanonicalName());}

这次我们在方法内部有一个类。 这不是通常的情况,但是从Java语言的角度来看是有效的。 类的简单名称就是这样:类的简单名称。 没什么奇怪的。

但是,“正常”名称很有趣。 Java编译器为该类生成一个JVM名称,并且该名称中包含一个数字。 为什么? 因为没有什么可以阻止我在测试类的另一个方法中拥有一个具有相同名称的类,并插入数字是防止JVM名称冲突的方法。 JVM不了解或不关心内部和嵌套类或方法内部定义的类。 一课就是一课。 如果编译代码,则可能会看到javac生成的文件WhatIsMyName$1MethodClass.class 。 我必须添加“可能”不是因为我计算出您可能会盲目,而是因为该名称实际上是Java编译器的内部问题。 它可能会选择其他避免名称冲突的策略,尽管我不知道有什么不同于上面的编译器。

规范名称是最有趣的。 它不存在! 它为空。 为什么? 因为您不能从定义它的方法之外访问此类。 它没有规范名称。 我们继续。

匿名类呢? 他们不应该有名字。 毕竟,这就是为什么它们被称为匿名的原因。

@Testpublic void anonymousClassHasName() {final Class<?> klass = new Object(){}.getClass();final String simpleNameExpected = "";Assert.assertEquals(simpleNameExpected, klass.getSimpleName());final String nameExpected = "pakage.subpackage.evensubberpackage.WhatIsMyName$1";Assert.assertEquals(nameExpected, klass.getName());final String canonicalNameExpected = null;Assert.assertEquals(canonicalNameExpected, klass.getCanonicalName());}

实际上,它们没有简单的名称。 简单名称是空字符串。 它们确实具有名称,但由编译器组成。 较差的javac没有其他选择。 它甚至必须为未命名的类组成一些名称。 它必须为JVM生成代码,并且必须将其保存到某个文件中。 规范名称再次为null。

我们已经准备好示例了吗? 否。最后我们有一些简单的东西(又称原始)。 Java基元。

@Testpublic void intClassHasName() {final Class<?> klass = int.class;final String intNameExpected = "int";Assert.assertEquals(intNameExpected, klass.getSimpleName());Assert.assertEquals(intNameExpected, klass.getName());Assert.assertEquals(intNameExpected, klass.getCanonicalName());}

如果该类表示一个原语,例如int (什么比int还要简单?),则简单名称,“ the”名称和规范名称全都是int该原语的名称。

就像原始数组一样非常简单吗?

@Testpublic void intArrayClassHasName() {final Class<?> klass = int[].class;final String simpleNameExpected = "int[]";Assert.assertEquals(simpleNameExpected, klass.getSimpleName());final String nameExpected = "[I";Assert.assertEquals(nameExpected, klass.getName());final String canonicalNameExpected = "int[]";Assert.assertEquals(canonicalNameExpected, klass.getCanonicalName());}

好吧,这并不简单。 名称为[I ,这有点神秘,除非您阅读JVM规范的相应章节 。 也许我再说一次。

结论

类的简单名称很简单。 对于JVM级别的事情, getName()返回的“名称”是一个有趣的东西。 getCanonicalName()是最像Java源代码的那个。

  • 您可以从GitHub的g789 e789d700d3c9abc6afa0获得上述示例的完整源代码。

翻译自: https://www.javacodegeeks.com/2014/09/name-of-the-class.html

数据库班级字段怎么定义名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机指令取决,不同的计算机,其指令不同,这主要取决于什么?

不同的计算机&#xff0c;其指令系统也不同&#xff0c;这主要取决于所用的CPU。1、CPU指中央处理器&#xff0c;是一块超大规模的集成电路&#xff0c;是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。2、程…

python内存管理方法_Python 内存管理大揭秘

前言语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理&#xff0c;还是Java的垃圾回收&#xff0c;都成为语言最重要的特征。这里以Python语言为例子&#xff0c;说明一门动态类型的、面向对象的语言的内存管理方式。对象的内存使用…

Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序

在之前的一系列博客中&#xff0c;我们在Kubernetes集群上启动了一个Ignite集群。 在本教程中&#xff0c;我们将使用先前在Spring Boot Application上创建的Ignite集群。 让我们使用Spring Boot创建我们的项目。 Spring Boot应用程序将连接到Ignite集群。 让我们添加依赖项…

计算机VB整除,【原创】VB中的整除运算和转换函数

前言&#xff1a;【关于四舍五入】——实际上是相对小数部分<0.5 舍&#xff1b;0.5 看整数部分&#xff0c;若为奇数则进&#xff0c;若为偶数则舍&#xff1b;>0.5 进整除运算“\”作用&#xff1a;用于对两个数进行除法运算并返回一个整数例如&#xff1a;18\53 …

栈空间_Linux中的进程栈和线程栈

1. 进程栈进程栈是属于用户态栈&#xff0c;和进程虚拟地址空间 (Virtual Address Space) 密切相关。那我们先了解下什么是虚拟地址空间&#xff1a;在 32 位机器下&#xff0c;虚拟地址空间大小为 4G。这些虚拟地址通过页表 (Page Table) 映射到物理内存&#xff0c;页表由操作…

mockito_Mockito 101

mockitoMockito是一个模拟框架&#xff0c;可让您使用简洁的API编写漂亮的测试。 它偏向于最小的规格&#xff0c;使不同的行为看起来有所不同&#xff0c;并显示清晰的错误消息。 创造嘲弄 要使用Mockito创建模拟&#xff0c;只需使用Mock注释模拟&#xff0c;然后调用Mockit…

csgo显示服务器失败,csgo服务器失败

csgo服务器失败 内容精选换一换您可以通过“应用管理”页面的应用列表&#xff0c;快速查看应用状态&#xff0c;及相关异常信息&#xff0c;如图1所示。包括&#xff1a;应用状态&#xff1a;即图1中的①应用异常信息&#xff1a;即图1中的②云服务器异常信息&#xff1a;即图…

mysql多表成绩查询_MySQL多表数据记录查询(一)

1&#xff0e;交叉连接SQL语句的语法结构如下&#xff1a;select * from表1 cross join 表2;或Select * from表1&#xff0c;表2;2.内连接SQL语句有两种表示形式&#xff1a;使用inner join 语法结构如下&#xff1a;Select表达式1&#xff0c;表达式2&#xff0c;...&#xff…

DMN中的函数式编程:感觉就像再次重读我的大学课程一样

在本文中&#xff0c;我想分享有关DMN中的递归支持的有趣见解&#xff0c;并重点介绍FEEL语言的特定属性如何使功能编程结构能够在DMN中建模。 我们将从一个基本的示例开始&#xff0c;以演示FEEL语言和DMN构造的“商业友好”性质如何使我们能够解决一个通常不愉快的问题&…

手游极品飞车无限狂飙链接服务器失败,极品飞车无极限无法联网是什么原因 联网失败原因分析及解决方法...

有些玩家对于极品飞车无极限游戏中无法联网的问题而困扰&#xff0c;应该怎么解决呢&#xff1f;下面42824小小编就把方法分享给大家&#xff01;一、极品飞车无极限游戏无法联网原因及解决方法1、网络连接不稳定推荐在wifi的情况下进行游戏&#xff0c;如果是3G网的话很容易会…

mysql索引命名规范_mysql使用规范-索引规范

(1)单张表中索引数量不超过5个。(2)单个索引中的字段数不超过5个。(3)索引名必须全部使用小写。(4)非唯一索引按照“idx_字段名称[_字段名称]”进用行命名。例如idx_age_name。(5)唯一索引按照“uniq_字段名称[_字段名称]”进用行命名。例如uniq_age_name。(6)组合索引建议包含…

junit规则_jUnit:规则

junit规则规则在测试&#xff0c;测试用例或测试套件周围增加了特殊处理。 他们可以对该类中的所有测试执行通用的其他验证&#xff0c;并发运行多个测试实例&#xff0c;在每个测试或测试用例之前设置资源&#xff0c;然后在之后拆除它们。 该规则可以完全控制将要应用到的测…

mysql中创建唯一索引的关键字_mysql中唯一索引的关键字是什么

mysql中唯一索引的关键字是unique index。创建唯一索引可以避免数据出现重复。唯一索引可以有多个&#xff0c;但索引列的值必须唯一&#xff0c;索引列的值允许有空值。创建唯一索引可以使用关键字UNIQUE随表一同创建。mysql中唯一索引的关键字是unique index。(推荐教程&…

奇迹觉醒qq服务器比微信少,十年内最大的奇迹!功能比QQ还少的微信为什么能成功?...

今天&#xff0c;微信迎来了自己2021年的第一次「翻车」——2021年1月18日下午2点前后&#xff0c;「由于系统抖动原因」部分微信用户无法及时收取微信消息。截止下午3点19分&#xff0c;故障已被修复。其实微信曾面临过几次信息服务中断的事故&#xff1a;2013年&#xff0c;微…

从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存

问题&#xff1a; 启用了Spring且将范围设置为Request的缓存需要由不在请求范围内的singleton bean访问。 解&#xff1a; Spring使您能够创建缓存&#xff0c;该缓存为请求范围保留数据。 例如 import org.springframework.cache.concurrent.ConcurrentMapCache; import org…

linux终止mysql进程_Ubuntu Linux下定时监测MySQL进程终止时自动重启的方法

前言最近发现MySQL服务隔三差五就会挂掉&#xff0c;导致我的网站和爬虫都无法正常运作。自己的网站是基于MySQL&#xff0c;在做爬虫存取一些资料的时候也是基于MySQL&#xff0c;数据量一大了&#xff0c;MySQL它就有点受不了了&#xff0c;时不时会崩掉&#xff0c;虽然我自…

系统错误null是什么意思_为什么NULL是错误的?

系统错误null是什么意思Java中NULL用法的简单示例&#xff1a; public Employee getByName(String name) {int id database.find(name);if (id 0) {return null;}return new Employee(id); }这种方法有什么问题&#xff1f; 它可能返回NULL而不是对象-这是错误的。 在面向对…

mysql数据库版本不同_mysql数据库版本不同所引起的问题

1.sql_mode不同所引起的问题mysql5.7 ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column lhh.lhh.id which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode…

线性搜索或顺序搜索算法在Java中如何工作? 示例教程

大家好&#xff0c;我之前谈到了二进制搜索算法的工作原理&#xff0c;并分享了在Java中实现二进制搜索的代码。 在那篇文章中&#xff0c;有人问我是否还存在其他搜索算法&#xff1f; 如果数组中的元素未排序&#xff0c;又如何使用二进制搜索算法&#xff0c;该如何搜索呢&a…

junit规则_JUnit规则

junit规则介绍 在本文中&#xff0c;我想展示一个示例&#xff0c;说明如何使用JUnit Rule简化测试。 最近&#xff0c;我继承了一个相当复杂的系统&#xff0c;并未对所有内容进行测试。 甚至经过测试的代码也很复杂。 通常&#xff0c;我看到缺乏测试隔离。 &#xff08;我将…