我注意到如果我将数组声明为:
CREATE OR REPLACE PACKAGE manager_faculty IS
PROCEDURE delete_stud (nr_matr student.nr_matricol%type);
END manager_faculty;
/
CREATE OR REPLACE PACKAGE BODY manager_faculty IS
PROCEDURE delete_stud (nr_matr student.nr_matricol%type) IS
BEGIN
DELETE from student
WHERE nr_matricol=nr_matr;
EXCEPTION
WHEN no_data_found THEN
SELECT COUNT(*) INTO counter FROM student WHERE nr_matricol=nr_matr;
IF counter = 0 THEN
raise_application_error (-20001, 'There is no student with the number' || nr_matr);
END IF;
END delete_stud;
END manager_faculty;
/
set serveroutput on;
BEGIN
manager_faculty.delete_stud(125);
END;
/
我可以直接使用int[] myarr = new int[10];
以便myarr[1] ++;
。这是否意味着在Java中,我们不需要初始化数组并通过以下方法将每个值设置为0?
myarr[1] = 1
我从一些评论中看到,该数组可能包含垃圾值。如果数组是整数数组,它是否包含0以外的任何垃圾?
答案 0 :(得分:11)
在Java中,所有数组元素都自动初始化为默认值。对于原始数字类型,0
或0.0
。对于布尔人来说,那是false
。对于对象,null
。
在其他语言(如C ++)中,未初始化数组中的值未定义。对于安全性,一些编译器可能会初始化为0 / null,依赖于此,这是非常糟糕的做法。但是,这种行为在Java中已经很好地定义了,因此创建一个原始数组并相信值为0是完全可以的。
答案 1 :(得分:5)
根据语言规范,新初始化的int[]
将填充零。
参考JLS §10.6 (Array Initializers):
创建一个具有指定长度的一维数组,并将数组的每个组件初始化为其默认值(§4.12.5)。
参考§4.12.5:
- 每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10.2):
- 对于type byte,默认值为零,即(byte)0。
的值- 对于short类型,默认值为零,即(short)0。
的值- 对于int类型,默认值为零,即0。
- 对于long类型,默认值为零,即0L。
- 对于float类型,默认值为正零,即0.0f。
- 对于double类型,默认值为正零,即0.0d。
- 对于char类型,默认值为空字符,即'\ u0000'。
- 对于类型boolean,默认值为false。
- 对于所有引用类型(第4.3节),默认值为null。
答案 2 :(得分:4)
不,所有java数组都填充了适当类型的默认值(0表示整数,0.0表示双精度数,null表示引用,...)
答案 3 :(得分:0)
您不能跳过数组初始化,但您不必初始化数组的每个元素。如果没有初始化数组中的元素,它的工作方式与初始化特定类型的成员变量的方式完全相同:Java将使用类型默认值初始化它,对于数字基元类型为0(int, booans为double,float ...), false ,对象为null(包括String)。
答案 4 :(得分:-3)
不,必须在java中初始化一个数组。当我编写程序时,我没有初始化我的数组,而我的编译器(jdk7)给了我一个错误:
ArrayOne.java:4:变量myArray可能尚未初始化。
因此我的编辑失败了。