java怎么在静态方法中使用动态方法

java怎么在静态方法中使用动态方法,第1张

java在静态方法中使用动态方法的方法是new对象出来,然后用的方式调用方法:

举例如下:

定义Outerjava:

public class Outer {

  private static int size;

  public void dostuff() {

      size++;

      Systemoutprintln("hello,I am called");

  }

}

然后在另外的测试类Main中,调用:

public class Main {

public static void main(String[] args) {

Outer outer =new Outer();

outerdostuff();

}

}

运行结果:

Java动态程序设计 反射介绍 使用运行的类的信息使你的程序设计更加灵活反射授予了你的代码访问装载进JVM内的Java类的内部信息的权限 并且允许你编写在程序执行期间与所选择的类的一同工作的代码 而不是在源代码中 这种机制使得反射成为创建灵活的应用程序的强大工具 但是要小心的是 如果使用不恰当 反射会带来很大的副作用 在这篇文章中 软件咨询顾问Dennis Sosnoski 介绍了反射的使用 同时还介绍了一些使用反射所要付出的代价 在这里 你可以找到Java反射API是如何在运行时让你钩入对象的 在第一部分 我向你介绍了Java程序设计的类以及类的装载 那篇文章中描述了很多出现在Java二进制类格式中的信息 现在我来介绍在运行时使用反射API访问和使用这些信息的基础 为了使那些已经了解反射基础的开发人员对这些事情感兴趣 我还会介绍一些反射与直接访问的在性能方面的比较 使用反射与和metadata(描述其它数据的数据)一些工作的Java程序设计是不同的 通过Java语言反射来访问的元数据的特殊类型是在JVM内部的类和对象的描述 反射使你可以在运行时访问各种类信息 它甚至可以你让在运行时读写属性字段 调用所选择的类的方法 反射是一个强大的工具 它让你建立灵活能够在运行时组装的代码 而不需要连接组件间的源代码 反射的一些特征也带来一些问题 在这章中 我将会探究在应用程序中不打算使用反射的原因 以为什么使用它的原因 在你了解到这些利弊之后 你就会在好处大于缺点的时候做出决定 初识class 使用反射的起点总时一个java lang Class类的实例 如果你与一个预先确定的类一同工作 Java语言为直接获得Class类的实例提供了一个简单的快捷方式 例如 Class clas = MyClass class;当你使用这项技术的时候 所有与装载类有关的工作都发生在幕后 如果你需要在运行时从外部的资源中读取类名 使用上面这种方法是不会达到目的的 相反你需要使用类装载器来查找类的信息 方法如下所示 // name is the class name to loadClass clas = null;try {clas = Class forName(name);} catch (ClassNotFoundException ex) {// handle exception case}// use the loaded class如果类已经装载 你将会找到当前在在的类的信息 如果类还没有被装载 那么类装载器将会装载它 并且返回最近创建的类的实例 关于类的反射 Class对象给予你了所有的用于反射访问类的元数据的基本钩子 这些元数据包括有关类的自身信息 例如象类的包和子类 还有这个类所实现的接口 还包括这个类所定义的构造器 属性字段以及方法的详细信息 后面的这些项是我们在程序设计过种经常使用的 因此在这一节的后面我会给出一些用这些信息来工作的例子 对于类的构造中的每一种类型(构造器 属性字段 方法) java lang Class提供了四种独立的反射调用以不的方式来访问类的信息 下面列出了这四种调用的标准形式 它是一组用于查找构造器的调用 Constructor getConstructor(Class[] params)  使用指定的参数类型来获得公共的构造器 Constructor[] getConstructors()获得这个类的所有构造器 Constructor getDeclaredConstructor(Class[] params) 使用指定的参数类型来获得构造器(忽略访问的级别)Constructor[] getDeclaredConstructors() 获得这个类的所有的构造器(忽略访问的级别)上述的每一种方法都返回一或多个java lang reflect Constructor的实例 Constructor类定义了一个需要一个对象数据做为唯一参数的newInstance方法 然后返回一个最近创建的原始类的实例 对象数组是在构造器调用时所使用的参数值 例如 假设你有一个带有一对String 类型做为参数的构造器的TwoString类 代码如下所示 public class TwoString {private String m_s m_s ;public TwoString(String s String s ) {m_s = s ;m_s = s ;}}下面的代码显示如何获得TwoString类的构造器 并使用字符串 a 和 b 来创建一个实例 Class[] types = new Class[] { String class String class };Constructor cons = TwoString class getConstructor(types);Object[] args = new Object[] { a b };TwoString ts = cons newInstance(args);上面的代码忽略了几种可能的被不同的反射方法抛出的异常检查的类型 这些异常在Javadoc API中有详细的描述 因此为简便起见 我会在所有的代码中忽略它们 在我涉及到构造器这个主题时 Java语言也定义了一个特殊的没有参数的(或默认)构造器快捷方法 你能使用它来创建一个类的实例 这个快捷方法象下面的代码这样被嵌入到类的自定义中 Object newInstance() 使用默认的构造器创建新的实例 尽管这种方法只让你使用一个特殊的构造器 但是如果你需要的话 它是非常便利的快捷方式 这项技术在使用JavaBeans工作的时候尤其有用 因为JavaBeans需要定义一个公共的 没有参数的构造器 通过反射来查找属性字段 Class类反射调用访问属性字段信息与那些用于访问构造器的方法类似 在有数组类型的参数的使用属性字段名来替代 使用方法如下所示 Field getField(String name)  获得由name指定的具有public级别的属性字段Field getFields() 获得一个类的所有具有public级别的属性字段Field getDeclaredField(String name) 获得由name指定的被类声明的属性字段Field getDeclaredFields() 获得由类定义的所有的属性字段尽管与构造器的调用很相似 但是在提到属性字段的时候 有一个重要的差别 前两个方法返回能过类来访问的公共(public)属性字段的信息(包括那些来自于超类的属性字段) 后两个方法返回由类直接声明的所有的属性字段(忽略了属性字段的访问类型) Java lang reflect Field的实例通过调用定义好的getXXX和setXXX方法来返回所有的原始的数据类型 就像普通的与对象引用一起工作的get和set方法一样 尽管getXXX方法会自动地处理数据类型转换(例如使用getInt方法来获取一个byte类型的值) 但使用一个适当基于实际的属性字段类型的方法是应该优先考虑的 下面的代码显示了如何使用属性字段的反射方法 通过指定属性字段名 找到一个对象的int类型的属性字段 并给这个属性字段值加 public int incrementField(String name Object obj) throws {Field field = obj getClass() getDeclaredField(name);int value = field getInt(obj) + ;field setInt(obj value);return value;}这个方法开始展现一些使用反射所可能带来的灵活性 它优于与一个特定的类一同工作 incrementField方法把要查找的类信息的对象传递给getClass方法 然后直接在那个类中查找命名的属性字段 通过反射来查找方法 Class反射调用访问方法的信息与访问构造器和字段属性的方法非常相似 Method getMethod(String name Class[] params)  使用指定的参数类型获得由name参数指定的public类型的方法 Mehtod[] getMethods()获得一个类的所有的public类型的方法Mehtod getDeclaredMethod(String name Class[] params)使用指定的参数类型获得由name参数所指定的由这个类声明的方法 Method[] getDeclaredMethods() 获得这个类所声明的所有的方法与属性字段的调用一样 前两个方法返回通过这个类的实例可以访问的public类型的方法包括那些继承于超类的方法 后两个方法返回由这个类直接声明的方法的信息 而不管方法的访问类型 通过调用返回的Java lang reflect Mehtod实例定义了一个invoke方法 你可以使用它来调用定义类的有关实例 这个invoke方法需要两个参数 一个是提供这个方法的类的实例 一个是调用这个方法所需要的参数值的数组 下面给出了比属性字段的例子更加深入的例子 它显示了一个的方法反射的例子 这个方法使用get和set方法来给JavaBean定义的int类型的属性做增量 *** 作 例如 如果对象为一个整数类型count属性定义了getCount和setCount方法 那么为了给这个属性做增量运算 你就可以把 count 做为参数名传递给调用的这个方法中 示例代码如下 public int incrementProperty(String name Object obj) {String prop = Character toUpperCase(name charAt( )) +name substring( );String mname = get + prop;Class[] types = new Class[] {};Method method = obj getClass() getMethod(mname types);Object result = method invoke(obj new Object[ ]);int value = ((Integer)result) intValue() + ;mname = lishixinzhi/Article/program/Java/hx/201311/26154

Java的线程调度 *** 作在运行时是与平台无关的 一个多任务系统需要在任务之间实现QoS(Quality of Service)管理时 如果CPU资源的分配基于Java线程的优先级 那么它在不同平台上运行时的效果是很难预测的 本文利用协调式多任务模型 提出一个与平台无关 并且能在任务间动态分配CPU资源的方案

现在 由于计算机系统已经从人机交互逐步向机机交互转化 计算机和计算机之间的业务对于时间的要求非常高 软件系统对于业务的支持已经不仅表现为对不同业务的逻辑和数据(算法+数据结构)支持 而且还表现为对同时处理不同任务的时效性 (任务响应速度)支持 一般 任务响应的速度可以通过算法优化及并行运算分担负载等手段来提高 但是 用户业务逻辑的复杂度决定了算法优化的发挥空间 硬件规模决定了所能够承担负载的大小 我们利用Java平台的特点 借鉴协调式多任务思想 使CPU资源能够在任务间动态分配 从而为时间要求强的任务分配更多的CPU运行资源 这也可以充分利用现有硬件 为用户业务提供最大的保障

用Java解决问题

本着软件系统结构和现实系统结构一致的思想 开发复杂业务服务的程序一般按照计算机任务和现实业务对应的思路 最终形成一个大规模的多任务系统 由于其跨平台性 Java系统可以随着业务的扩大 平滑地升级到各种硬件平台上 由于 Java自身的发展及其应用场合的不断扩大 用它实现多任务系统已经成为当前的应用方向 在J EE(Java Enterprise Edition)推出以后 Sun公司已经将Java的重心放在了服务器端(Server Side)系统的构造上 由于客户/服务器模型固有的多对一的关系 服务器端程序也必然是一个多任务系统

在Java多任务应用中 动态地将CPU资源在任务间分配有很重要的意义 比如一个 Internet服务商的系统往往有多种任务同时运行 有>

看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。

拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。

对比现实对象和软件对象,它们之间十分相似。

软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。

在软件开发中,方法 *** 作对象内部状态的改变,对象的相互调用也是通过方法来完成。

对象是类的一个具体实例。类相当于对象的模板。

在Java中,有句话叫“万物皆对象”。要掌握Java编程,必须正确理解对象的概念。

在我学Java的时候,老师告诉我,Java的对象不是找对象的那个对象。

上面的比喻也可以。下面是一段伪代码,模仿你说的情况:

girlFriend myGirlFriend = new girlFriend(女朋友的属性);//初始化对象

myGirlFriend表白(表白的属性);

不过,这个比喻不够确切:

比喻太片面,对象不一定是女朋友,也可以是其他东西

应先有女朋友再表白,否则JVM抛NullPointerException

不应该说系统给你对象,应该说JVM初始化对象,因为Java代码是运行在JVM中的,而且对象是用new关键字初始化来的

整个过程中不一定没有问题,比如现实生活中表白不一定成功

此外,Java中对象的英文是Object,翻译成中文有物体,目标等意思,供参考

不清楚的内容请自己求度娘

仅前面部分内容摘自cnblogs用户shaojian的文章,其余均为原创

Attention !!!

再过几天,

就到了恩爱秀满天的日子了!

七夕!中国情人节!

很多单身汪都在绞尽脑汁

买什么礼物给TA?

鲜花?包包?

还是请TA一起去看场**?

用什么方式告诉对方

内心最想对TA说的话

不能跟这个哥们一样

原本想对TA说

结果嘴巴一哆嗦

说成了

每当想起你这张丑脸,我就泛起了微笑……

结果可想而知?

一开始我以为这样的悲剧

只会发生在程序员身上

因为外界都认为

程序员不浪漫、木内

但我错了

程序员的表白方式更加的特别

NO1

把以下代码保存为html后缀文件在浏览器中打开,

Happy

结果就是这样的

喜欢吗?

NO2

某公司程序员对小编说

于是就有了

有没有暖到你的内心呢?

温馨告白

程序员,也许不善言辞

但总是默默地在行动

用行动去诠释他们对你的爱

值此七夕佳节

雅腾教育祝愿

每一个程序员

和即将成为程序员的朋友

七夕快乐!

永远幸福!

具体 *** 作步骤如下:

第一步:安装JDK。

要下载Oracle公司的JDK可以百度“JDK”进入Oracle公司的JDK下载页面,选择自己电脑系统的对应版本即可。

第二步:配置Windows上JDK的变量环境。

JAVA_HOME

先设置这个系统变量名称,变量值为JDK在电脑上的安装路径:C:ProgramFilesJavajdk180_20。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。

Path

PATH属性已存在,可直接编辑,在原来变量后追加:;%JAVA_HOME%in;%JAVA_HOME%jrein。

CLASSPATH

设置系统变量名为:CLASSPATH变量值为:;%JAVA_HOME%libdtjar;%JAVA_HOME%lib oolsjar。

注意变量值字符串前面有一个""表示当前目录,设置CLASSPATH的目的,在于告诉Java执行环境,在哪些目录下可以找到所要执行的Java程序所需要的类或者包。

第三步:下载安装Eclipse(已上传附件,电脑打开可下载)。

Eclipse为Java应用程序及Android开发的IDE(集成开发环境)。Eclipse不需要安装,下载后把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置工作目录即可。

第四步:下载安装AndroidSDK。

配置了JDK变量环境,安装好了Eclipse,这个时候如果只是开发普通的JAVA应用程序,那么Java的开发环境已经准备好了。要通过Eclipse来开发Android应用程序,那么需要下载AndroidSDK(SoftwareDevelopmentKit)和在Eclipse安装ADT插件,这个插件能让Eclipse和AndroidSDK关联起来。

第五步:为Eclipse安装ADT插件。

前面已经配置好了java的开发环境,安装了开发Android的IDE,下载安装了AndroidSDK,但是Eclipse还没有和AndroidSDK进行关联,也就是它们现在是互相独立的,就好比q和子d分开了。为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对EclipseIDE定制了一个插件:AndroidDevelopmentTools(ADT)。

以上就是关于java怎么在静态方法中使用动态方法全部的内容,包括:java怎么在静态方法中使用动态方法、Java动态程序设计——反射介绍、Java进阶 Java应用程序中动态分配CPU资源[1]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9755589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存