您当前的位置:首页 > 互联网教程

java语言,什么是初始化啊初始化和实例化一样吗

发布时间:2025-05-22 00:24:30    发布人:远客网络

java语言,什么是初始化啊初始化和实例化一样吗

一、java语言,什么是初始化啊初始化和实例化一样吗

1、java中不管对象也好,还是基本数据类型也好,你声明它的时候,它们都称为变量,在你使用变量前给变量进行赋值,这就是变量的初始值,因此叫变量初始化。

2、实例化是指对象的创建,一般是指通过 new关键字(当然还有其他途径,比如反射),在堆中为对象分配内存,这就是实例化。举个非常简单的例子,你知道飞机会飞,但飞机在你脑海里只是个概念,当真的把飞机制造出来,变成实实在在的,存在于物质世界(java中称内存)的东西时,你才能用它来飞。如果在物质世界(内存)中根本就不存在,那就无法使用。因此,实例化可以说将概念(类),变成实际存在(内存中存在)的过程就称为实例化。

二、java隐式的初始化是指什么

Java对象在其被创建时初始化,在Java代码中,有两种行为可以引起对象的创建。其中比较直观的一种,也就是通常所说的显式对象创建,就是通过new关键字来调用一个类的构造函数,通过构造函数来创建一个对象,这种方式在java规范中被称为“由执行类实例创建表达式而引起的对象创建”。

当然,除了显式地创建对象,以下的几种行为也会引起对象的创建,但是并不是通过new关键字来完成的,因此被称作隐式对象创建,他们分别是:

●加载一个包含String字面量的类或者接口会引起一个新的String对象被创建,除非包含相同字面量的String对象已经存在与虚拟机内了(JVM会在内存中会为所有碰到String字面量维护一份列表,程序中使用的相同字面量都会指向同一个String对象)

●自动装箱机制可能会引起一个原子类型的包装类对象被创建;

●String连接符也可能会引起新的String或者StringBuilder对象被创建,同时还可能引起原子类型的包装对象被创建,比如(本人试了下,在mac ox下1.6.0_29版本的javac,对待下面的代码会通过StringBuilder来完成字符串的连接,并没有将i包装成Integer,因为StringBuilder的append方法有一个重载,其方法参数是int);

当一个对象被创建之后,虚拟机会为其分配内存,主要用来存放对象的实例变量及其从超类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值。

上面的代码中,Foo和Bar中都定义了变量i,在main方法中,我们用Foo引用一个Bar对象,如果实例变量与方法一样,允许被覆盖,那么打印的结果应该是1,但是实际的结果确是0。

但是如果我们在Bar的方法中直接使用i,那么用的会是Bar对象自己定义的实例变量i,这就是隐藏,Bar对象中的i把Foo对象中的i给隐藏了,这条规则对于静态变量同样适用。

在内存分配完成之后,java的虚拟机就会开始对新创建的对象执行初始化操作,因为java规范要求在一个对象的引用可见之前需要对其进行初始化。在Java中,三种执行对象初始化的结构,分别是实例初始化器、实例变量初始化器以及构造函数。

三、java里对象的初始化有什么作用,什么时候要用到

1、对象初始化的例子如:List<String> list;

2、 list=new ArrayList<String>();//这样就将其初始化了。然后你可以调用它的方法如:list.add("dsafs");//正确的调用方法。

3、如果没有上述的初始化,list.add("dsafs");//运行这句话时将要产生NullPointerException(空指针)异常。

4、基本类型数据用着全局变量,声明后如果不初始化的话,java虚拟机将自动对其初始化,比如你在类的成员变量中声明:int age;//这里没有初始化,将产生默认值0;其他基本类型数据都有其默认值。但如果是声明局部变量,比如说在某个方法中,就必须先初始化再调用,如: void add(){

5、 System.out.println(a);//这样编译时不能通过,必须要求你先初始化

6、如果你刚开始学习java的话,我建议你先看点java基础的书,还有就是多编程,java还是很有意思的,也挺好学的,希望我的回答对你有点帮助。