java运行期类型鉴定

运行期类型识别?RTTI?

假如我们有一个基类的引用,这个引用也可以作为子类的引用嘛,现在我们想知道这个引用的类型到底是啥?

当从子类到基类之后有很多的信息都会丢失掉,比如有一个人类的对象可以看成普遍意义上的一个对象,因此也可以往上变为对象,但是我们就不会知道这个对象是不是人了。

RTTI正是在运行期间,识别对象的类型。

遇到特殊的程序设计问题,需要知道引用的具体类型,才能解决问题。

类的对象的产生都需要Class对象,forName(arg0)可以获得对象的Class对象,进而产生这个类的实例。

java编译器不允许向下的自动转换,除非明确指定。

Circle c = (Circle)b;

关键字instanceof告诉我们一个对象是不是特定类的实例。

向下转换时可以用来做检查。

isInstanceof()则可以直接对对象实例使用

Class对象很重要,在这里

RTTI和反射机制

时间: 2024-10-16 20:17:40

java运行期类型鉴定的相关文章

深入分析Java的编译期与运行期

不知大家有没有思考过,当我们使用IDE写了一个Demo类,并执行main函数打印 hello world时都经历了哪些流程么? 想通过这篇文章来分析分析Java的执行流程,或者换句话说想聊聊Java的编译期与运行期的流程. 开门见山 编译期间都做了什么 运行期间都做了什么 1. 开门见山 public class MyApp { public static void main(String[] args) { System.out.println("hello world"); } }

深入了解JVM虚拟机8:Java的编译期优化与运行期优化

java编译期优化 微信公众号[Java技术江湖]一位阿里 Java 工程师的技术小站.作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux.网络.多线程,偶尔讲点Docker.ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”Java“即可领取 Java基础.进阶.项目和架构师等免费学习资料,更有数据库.分布式.微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南.

atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型运行期获得Dialect

#-----原理 Hibernate 运行期获得Dialect 2010-07-28 12:59:58|  分类: 软件开发 |举报 |字号 订阅 String dialect = ((SessionFactoryImpl) session.getSessionFactory()).getDialect() .getClass().getName(); //     //org.hibernate.dialect.MySQLDialect 如果是spring + hibernate则可以: St

Java编译期优化与运行期优化技术浅析

Java语言的“编译期”是一段不确定的过程,因为它可能指的是前端编译器把java文件转变成class字节码文件的过程,也可能指的是虚拟机后端运行期间编译器(JIT)把字节码转变成机器码的过程. 下面讨论的编译期优化指的是javac编译器将java文件转化为字节码的过程,而运行期间优化指的是JIT编译器所做的优化. 编译期优化 虚拟机设计团队把对性能的优化集中到了后端的即时编译器(JIT)中,这样可以让那些不是由javac编译器产生的class文件也同样能享受到编译器优化所带来的好处.但是java

Java中String类型的参数传递问题的解析

一.引入示例 public class StringAsParamOfMethodDemo { public static void main(String[] args) { StringAsParamOfMethodDemo sapm = new StringAsParamOfMethodDemo(); sapm.testA(); } private void testA() { String originalStr = "original"; System.out.println

Java 8 动态类型语言Lambda表达式实现原理分析

Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标. import java.util.function.Consumer; public class Lambda { public static void main(String[] args) { Consumer<String> c = s -> System.out.println(s); c.accept("hello lambd

Java 8的类型注解:工具和机会

在以前的Java版本中,开发者只能将注解(Annotation)写在声明中.对于Java 8,注解可以写在使用类型的任何地方,例如声明.泛型和强制类型转换等语句: @Encrypted String data;List strings;myGraph = (@Immutable Graph) tmpGraph; 乍一看,类型注解并不是Java新版本最炫的特性.事实上,注解只是语法!工具决定了注解的的语义(即,它们的含义和行为).本文介绍新的注解语法和实用工具,以提高生产力和构建更高质量的软件.

晚期(运行期)优化

晚期(运行期)优化 晚期运行期优化 Start HotSpot虚拟机内的即时编译器 几个问题 解释器与编译器 编译对象与触发条件 编译过程 Client Compiler Server Compiler 查看及分析即时编译结果 编译优化技术 公共子表达式消除 数组边界检查消除 方法内联 逃逸分析 Java与CC的编译器对比 ref Start "热点代码"(Hot Spot Code) – 运行特别频繁的方法或代码块:为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本

Java中泛型 类型擦除

转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类型在编译后都会被清除掉,看下面一个列子,代码如下: public class Foo { public void listMethod(List<String> stringList){ } public void listMethod(List<Integer> intList) {