java中实例化对象和创建对象这两者有啥区别希望大神用代码举例说明便于理解,小弟谢谢了!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中实例化对象和创建对象这两者有啥区别希望大神用代码举例说明便于理解,小弟谢谢了!相关的知识,希望对你有一定的参考价值。
实例化对象应该理解为:为了实例化某类,创建对象。你指的两个概念实际上是一回事。描述一个类的时候,有行为(方法)和属性(成员变量),我们为了把这个类实例化,所以创建对象。 ”//实例化汽车类,即创建轿车对象” 这句是教材上的原话。
用代码来说,Car bus = new Car(); bus是一个引用变量,它只是创建了一个Car类型的引用变量。new Car()才表示创建了新的对象。bus中存放的是对象的地址。这是一个引用变量和对象的图解:
只有使用了new关键字,才是在创建对象,或者说是在实例化。你应该了解下创建对象的实际过程。
一般 new Object();就是创建对象,即为实例化对象 参考技术B JAVA中定义为类,一个类可以实例化成很多对象。
不知为啥要区分,实例化对象和创建对象应该是一个意思,区分没有实际意义,都是用new 的方式创建对象。
另外JAVA中还有一种直接赋值的方式,一般为基本类型赋值,如int a=1 ,该方式并不是创建一个对象,只是创建了一个基本的数据类型。请不要混淆本回答被提问者和网友采纳 参考技术C 都是一个意思~
就好像c语言里叫函数 java里叫方法一样
Class c=Class.forName("className");
Object obj=c.newInstance();
.这2行基本都是放一起用的 这个可以说是一个工厂模式可以动态的创建对象这2句完全等价于
Object obj = new Object;
至于Object obj = new Object;这句是干什么用的不需要我多说把~
Class c=Class.forName("className");这个是根据传入的类的全名来创建Class对象。
而Object obj=c.newInstance();这个是创建对象的实例
你是这么说的可以改成
Class c=Class.forName("className");这个是根据传入的类的全名来创建Class对象。
而Object obj=c.newInstance();这个是创建了Object对象
或者
Class c=Class.forName("className");这个是根据传入的类的全名来创建一个Class对象实例。
而Object obj=c.newInstance();这个是创建Object对象的实例
意思都是完全一样的
详细参考:http://zhidao.baidu.com/link?url=iedoPkY1mNsu78Am05G75zsGo0LC5N2am60GU5WCWyp2xcslC-gCM12foUovU0QdcSu-KVyRP41cvfmVk4kcOa
Java中newInstance()和new()区别
前言:
最近在看springIOC和AOP是看见代码中很实用newInstance来实例化一个对象,之前对newInstance和new实例化对象的区别很模糊,特意在这里记录一下
一、newInstance()和new()区别:
1、两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类:
2、newInstance创建类是这个类必须已经加载过且已经连接,new创建类是则不需要这个类加载过
3、newInstance: 弱类型(GC是回收对象的限制条件很低,容易被回收)、低效率、只能调用无参构造,new 强类型(GC不会自动回收,只有所有的指向对象的引用被移除是才会被回收,若对象生命周期已经结束,但引用没有被移除,经常会出现内存溢出)
二、伸缩、扩展性:
在开发中,我们经常可以看到一些接口的设计,实现接口的类加载一般都会采用newInstance而不会使用new,在这里就涉及到了两者在开发过程中的扩展性和伸缩性,来看一段代码:
定义一个BeanFactory接口,分别让类A、B实现接口:
package com.main; public interface BeanFactory { //核心方法getBean Object getBean(String name); }
public class B implements BeanFactory{ @Override public Object getBean(String name) { return null; } }
public class A implements BeanFactory{ @Override public Object getBean(String name) { return null; } }
测试结果:
public class Test { @SuppressWarnings("rawtypes") public static void main(String[] args) throws Exception { Class a1 = Class.forName("A"); BeanFactory a2 = (BeanFactory) a1.newInstance(); System.out.println(a2); Class b1 = Class.forName("B"); BeanFactory b2 = (BeanFactory) b1.newInstance(); System.out.println(b2); } }
通过上面实例我们可以很清楚的看到,如果在接口的设计中很多类实现了该接口,我们只需要使用Class中的forName方法加载一下类就可以了,可以将这一段代码提出来作为一个工具类方法,不管有多少类只要实现了该接口我们只要传入需要实例化的路径名就可以实例化,这样大大节省了我们的代码(注:newInstance实例化对象是只能调用无参构造方法,在A、B类中并没有构造方法,是因为每个创建的类都有一个默认的无参构造方法,如果你重写了一个带参构造方法,想要使用newInstance,则必须指定一个无参构造方法,否则会报初始化错误)
以上是关于java中实例化对象和创建对象这两者有啥区别希望大神用代码举例说明便于理解,小弟谢谢了!的主要内容,如果未能解决你的问题,请参考以下文章