JAVA动态性

1、反射

2、动态代理

Q:什么情况下用

A:

1、如果别人提供了一个class文件或jar包给你,你自己的代码已经写好了,但是同时又需要用别人提供的class文件中的方法,这个时候可以使用动态代理

2、spring的AOP,在执行一个方法之前或执行之后,需要调用其它方法

Q:执行流程

A:(类A实现接口B,类A动态生成代理C,客户端通过代理C访问A,其实也是应用了反射方法和技术)

3、经典实现

RMI是动态代理的经典实现之一,服务端生成动态代理类stub,stub代理客户端请求服务端,服务端返回结果

时间: 2024-10-20 10:51:36

JAVA动态性的相关文章

java 动态性之反射机制 详解 案例

1.反射机制 2.动态编译 3.动态执行javassript代码 4.动态字节码操作 动态语言 程序运行时,可以改变程序结构或变量类型.典型的语言: 1):Python.ruby.javascript等. 2):如下javascript代码: funtion test(){ var s ="var a=3;var b=5;alert(a+b);"; eval(s); } 3):C,C++,JAVA不是动态语言,JAVA可以称之为"准动态语言".但是JAVA有一定的动

Java动态性之反射机制(reflection)

说到反射机制,第一次接触的人可能会比较懵,反射?什么反射?怎么反射?反射是干嘛的?下面我将在这篇文章中讲讲Java的反射机制 不过在这之前,还有一个问题需要解决,标题名中的动态性,说起动态性,我先介绍介绍动态语言和静态语言 静态语言 静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型. 例如:C++.Java.Delphi.C#等. 动态语言 动态语言是在运行时确定数据类型的语言.变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型.

Java类加载器ClassLoader总结

JAVA类装载方式,有两种: 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中. 2.显式装载, 通过class.forname()等方法,显式加载需要的类 类加载的动态性体现: 一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是

深度分析Java的ClassLoader机制(源码级别)

写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoader的loadClass()方法来加载class的,loadClass使用双亲委派模式. 为了更好的理解类的加载机制,我们来深入研究一下ClassLoader和他的loadClass()方法. 源码分析 public abstract class ClassLoader ClassLoader类是

初识java反射机制

反射是动态性最大的体现 运行时才能改变编译期所确定的效果是编程语言的动态性. java动态性可以利用反射机制探究使用编译期未知的类 ,java反射计数是java程序的特征之一 它允许运行中的java程序对自身进行检查或者自审并能直接操作程序的内部属性 在一般的设计应用中使用步骤:一是获得要操作的类的class对象 二是探究class类中的信息(属性  构造  方法) 三是使用class对象中的信息如:使用构造产生对象的实例对象‘   使用属性的get/set方法   方法的调用等等 在反射机制里

Java进阶之reflection(反射机制)——反射概念与基础

反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见的JavaScript就是动态语言,除此之外Ruby,Python等也属于动态语言,而C.C++则不属于动态语言. 二.Java是动态语言吗? 从动态语言能在运行时改变程序结构结构或则变量类型上看,Java和C.C++一样都不属于动态语言. 但是JAVA却又一个非常突出的与动态相关的机制:反射机制.

weblogic与Java类加载器原理试验解析

通过试验,得出一个结论,假设在Weblogic的Server/lib下有一个类,与应用的Webapp/WEB-INF/classes 下的类名相同,方法名也相同,仅有在后台打印出来的字符的稍许差别,那在Weblogic启动后,无论个文 件夹中的类谁是新编译的(版本新或旧),应用系统均默认是使用server/lib下的类, 而不是引用Webapp/WEB-INF/classes下的类. 一.通过翻阅大量的资料了解到,java类加载的原理如下 JVM在运行时会产生三个ClassLoader: Boo

第五篇 java字节码操作

java动态性的两种常见的实现方式: ①字节码操作 ②反射 运行时操作字节码可以让我们实现如下功能: ①动态生成新的类 ②动态改变某个类的结构(添加.删除.修改  新的属性或方法) 优点: 比反射的开销小,性能高 Javassist性能高于反射,低于ASM BCEL(Byte Code Engineering Library): 是java classworking 广泛使用的一种框架,它可以让你深入JVM汇编语言进行类操作的细节.BCEL与Javassist有不同的处理字节码的方法,BCEL在

入门级 JAVA反射机制

1.什么是反射? Java中的反射机制是Java语言的一个很重要的特性,是Java “动态性” 的重要体现.Java反射机制让我们在程序运行状态中,对于任意一个类,都能知道这个类的所有属性和方法:对于任意一个对象,都能调用他的任意一个方法.这种动态获取属性以及动态调用对象方法的功能就是“Java的反射机制”. 2.反射机制的本质(A) 在使用一个类之前必须先加载它,而当虚拟机加载完一个类后,就会在方法区创建一个这个类对应的class对象(一个类只有一个class对象),这个对象包含了类完整的结构