`

newInstance()方法和new关键字的区别

    博客分类:
  • java
阅读更多

 

* 它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

* 那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。

* 我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,

* 就必须保证:1、这个类已经加载;2、这个类已经连接了。

* newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 

* 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,

* 提供给了一种降耦(降低耦合度)的手段。

* 最后用最简单的描述来区分new关键字和newInstance()方法的区别:

*    newInstance: 弱类型。低效率。只能调用无参构造。

*    new: 强类型。相对高效。能调用任何public构造。

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Field;

public class testInvoke {
	public void work(){
		System.out.println("-----------");
	} 
	public  testInvoke work(String a,Integer b){
		System.out.println(a + b);
		return this;
	}
	public void work(Integer b, int c ){
		System.out.println(b + c);
	}
	
	public static void main(String[] args) throws SecurityException, NoSuchMethodException, InstantiationException, 		IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		Class<?> clazz = testInvoke.class;
		//Class<?> clazz = Class.forName("invoke.testInvoke");
		//testInvoke tinvoke = new testInvoke(); Class<?> clazz = tinvoke.getClass(); 
		System.out.println(clazz);
		//如果源类的方法没有参数,则要用new Class[]{}
		Method method1 = clazz.getMethod("work", new Class[]{});
		Method method2 = clazz.getMethod("work", new Class[]{String.class, Integer.class}); 
		Method method3 = clazz.getMethod("work", new Class[]{Integer.class, int.class});
		Object invokeTest = clazz.newInstance();
		/*
		 *  Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,<br/>
		 *  如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,<br/>
		 *  如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回<br/>
		 */
		//invoke方法的第一个参数是源类的实例,第二个参数是实例的值
		Object result1 = method1.invoke(invokeTest, new Object[]{});
		Object result2 = method2.invoke(invokeTest, new Object[]{"aaaa",new Integer(10)});
		Object result3 = method3.invoke(invokeTest, new Object[]{3,new Integer(4)});
		System.out.println(result1);
		System.out.println(result2);
		System.out.println(result3);

		Method[] methods = clazz.getMethods();
		for(Method method : methods){
			System.out.println(method.getName());
		}
		
		Field[] fileds = clazz.getFields();
		for(Field filed: fileds){
			System.out.println(filed.getName());
		}
	}
}

 控制台信息:

class invoke.testInvoke

-----------

aaaa10

7

null

invoke.testInvoke@de6ced

null

work

[Ljava.lang.Class;@c17164

work

[Ljava.lang.Class;@1fb8ee3

work

[Ljava.lang.Class;@61de33

main

[Ljava.lang.Class;@14318bb

wait

[Ljava.lang.Class;@ca0b6

wait

[Ljava.lang.Class;@10b30a7

wait

[Ljava.lang.Class;@1a758cb

equals

[Ljava.lang.Class;@1b67f74

toString

[Ljava.lang.Class;@69b332

hashCode

[Ljava.lang.Class;@173a10f

getClass

[Ljava.lang.Class;@530daa

notify

[Ljava.lang.Class;@a62fc3

notifyAll

[Ljava.lang.Class;@89ae9e

3
3
分享到:
评论
3 楼 Clazz 2013-04-25  
Ericy0713 写道
tenderuser 写道
引用

它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

new 创建一个新类 是什么意思?
+1

+2
2 楼 Ericy0713 2013-04-23  
tenderuser 写道
引用

它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

new 创建一个新类 是什么意思?
+1
1 楼 tenderuser 2013-04-22  
引用

它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

new 创建一个新类 是什么意思?

相关推荐

    new关键字和newInstance() 的区分

    Java 中的 new 关键字和 newInstance() 方法都是用于创建对象的,但是它们之间有着本质的区别。理解这两者的区别对于 Java 编程尤其重要。 首先,new 关键字是 Java 的一个保留字,用于创建一个新的对象。例如,`A ...

    newInstance()方法和new关键字

    ### newInstance()方法与new关键字的区别 在Java编程语言中,创建对象是十分常见的操作,而`newInstance()`方法和`new`关键字则是实现这一目的的两种主要方式。它们之间的区别不仅在于一个是方法调用,另一个是语言...

    java 中newInstance()方法和new关键字的区别

    Java 中 newInstance() 方法和 new 关键字的区别 Java 中的对象创建方式有多种,newInstance() 方法和 new 关键字是其中两种常用的方式。但是,它们之间有着本质的区别。本文将详细介绍 newInstance() 方法和 new ...

    Java中new关键字和newInstance方法的区别分享

    在Java编程语言中,`new`关键字和`newInstance()`方法都是用来创建对象的,但它们在使用场景和工作原理上存在显著差异。了解这些差异对于编写高效、灵活的代码至关重要。 首先,`new`关键字是Java语法的一部分,...

    Class.forName()_newInstance()_New_三者区别

    在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...

    Java中new的用法[参考].pdf

    在 Java 中,有两种创建对象的方式:使用 new 关键字和使用 newInstance() 方法。 * 使用 new 关键字创建对象:例如 `String sName = new String();` * 使用 newInstance() 方法创建对象:例如 `factory = ...

    Java中new的用法.doc

    ### Java中new关键字的用法详解 ...同时,`newInstance()`方法提供了另一种创建对象的方式,在某些场景下更加灵活和强大。正确选择和使用这两种方式可以帮助开发者更好地管理Java应用程序中的对象创建过程。

    Java Class.forName()用法和newInstance()方法原理解析

    Java Class.forName()用法和newInstance()方法原理解析 Class.forName()方法是Java语言中的一种Class加载机制,它可以根据类名将对应的类加载到JVM中,同时也可以实例化该类。Class.forName()方法的主要功能是要求...

    Java中new的用法[文].pdf

    然而,`newInstance()`和`new`关键字有明显的区别。`new`是关键字,直接创建新对象,而`newInstance()`是方法,它需要先通过`Class.forName()`加载类,然后才能实例化。使用`newInstance()`时,类必须已经被加载并且...

    浅析Java中的 new 关键字

    Java中的`new`关键字是创建和初始化对象的关键操作,它在编程中扮演着至关重要的角色。当我们使用`new`关键字时,实际上是执行了以下几个步骤: 1. 分配内存:Java虚拟机(JVM)在堆内存中为新对象分配所需的空间。...

    Java中new的用法.pdf

    关于`new`与`newInstance()`的区别,`new`是Java的关键字,直接创建类的新实例,而`newInstance()`是`java.lang.reflect.Class`类的一个方法,它通过反射机制创建对象。反射允许程序在运行时动态地获取类的信息并...

    Java final关键字

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被用来声明一个变量、方法或类为不可变的。在这个学习demo中,我们将深入理解`final`关键字的各种用法及其背后的原理。 首先,`final`关键字用于变量...

    java反射之动态代理

    在Java中,`newInstance()`方法和`new`关键字是两种不同的对象创建方式。`new`关键字直接根据类名创建一个新的对象,而`newInstance()`是通过`Class`对象来创建对象,它需要先通过类加载机制将类加载到JVM中。`new...

    Java面向对象程序设计static关键字.pptx

    static修饰的变量和方法可以用类名直接调用,而不需要创建对象实例。static修饰的代码块只执行一次,优先级仅低于静态变量。 static关键字的作用 static关键字的作用可以分为以下几个方面: 1. 静态变量:static...

    Java关键字的用法

    `extends`关键字用于继承,允许一个类继承另一个类的属性和方法。 **示例:** ```java public class Animal { public void makeSound() {} } public class Dog extends Animal { @Override public void ...

    js代码-参考new关键字实现myNew函数

    在JavaScript中,`new`关键字是一个非常重要的构造函数调用模式,它用于创建并初始化一个对象实例。`new`操作符背后的工作原理是相当复杂的,包括了对象的创建、原型链的设定以及上下文的绑定等多个步骤。在这个主题...

    java创建对象的五种方法demo

    `Class`对象提供了`newInstance()`方法,它会调用类的无参构造器来创建对象。首先需要获取类的`Class`对象,然后调用`newInstance()`: ```java Class&lt;Person&gt; clazz = Person.class; Person person = clazz.new...

Global site tag (gtag.js) - Google Analytics