java类中构造函数中:数组怎样初始化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java类中构造函数中:数组怎样初始化相关的知识,希望对你有一定的参考价值。
请给一个小例子
谢谢
在构造函数中给array初始化,如全部复值2
matrix=new matrix[r][c];
2、这里是new int[][]; java中8个基本数据类型都是有默认值的,int默认值为0 ,
3、所以数组中默认都为0.
4、但是切记有默认值的变量必须是类的属性,方法中局部变量必须赋值才可以使用。 参考技术A 数组一般都是用FOR循环初始化较多吧,如:
for(int i =0;i<array.length;i++)
array[i]=2;
参考技术B public class A
int arr [];
public A(int arr[])
this.arr = arr;
class B
public void demo()
int arr[] = 2,2,2,2,2,2;
new A(arr );
参考技术C int arraySize = 10; // array size: 10 elements
int[] a = new int[arraySize ]; // declare and allocate memory
for(int i=0; i < arraySize; i++) // initialization
a[i] = 2; // set every element to integer 2
参考技术D 他们回答的差不多了
JAVA-初步认识-第九章-继承-子父类中的构造函数-子类的实例化过程
一.
子父类中构造函数的特点。
举例演示一下,
类中不写构造函数,它里面也是有的。只是写出来,可以看的更清楚一些。
DOS结果显示比较特别,在有Zi run的情况下,还有Fu run的存在。按道理说,子类创建的对象,应该就是子类的内容,这里突然出现一个父类的内容。而且里面运算的时候,只涉及对象的初始化。
现在讨论为什么子类创建对象构造函数初始化时,会有父类的构造函数也有初始化,而且位于子类之前。
由上面截图引发的思考,什么时候super()会出现?之前谈论的this,是为了区分本类和对象中重名的东西,super出现的原因是什么?
真实的情况如下,Zi()构造函数中,存在super();语句,可以对比之前的this(),this()是指用this关键字加个括号来代表本类中的构造函数(this()这个之前并没有讲解到)。相同的,用super关键字用来调用父类中的函数,super和this关键字很相似。居然子类的构造函数中,还先调用父类的构造函数。
正确的流程叙述一遍:main中先进行new zi(),在堆中开辟空间,分配地址值,默认初始化没有东西(因为没有成员变量)。接着进行构造初始化,就访问到Zi()了,这个Zi()进入内存后,里面就开始执行了。子类构造函数中有三句,super();System.out.println("zi run");和return;(return被影藏了)。→super();是隐式的,不写也存在。在这样的继承子类构造函数中,super是一定存在的(?)。return什么时候隐藏,或者应该在什么地方存在?
有super()的存在,就指向了父类,Fu()构造函数就进栈了,因此就先输出Fun run这句话。然后再输出zi run,和运行return。
这里为什么super调用的是空参数构造函数?原因在于,万一父类中没有书写构造函数,那么它就是默认的构造函数,它就是一个空参数列表的函数。(解释挺奇怪的)
谁说父类构造函数里面一定是空参,里面添加了其他东西。DOS结果显示出错。子类有super();默认就是有空参的构造函数,这时父类中没有空参构造函数,就会失败。
这时候又引出,谁说定义类的时候,一定要写空参的构造函数?想写什么参数就写什么参数,想怎么构造初始化,就怎么构造初始化。这可以用super直接指定。那就意味着,在有参数列表的构造函数时,空参数的构造函数就不存在了?那就是说子类中一定要调用父类的构造函数,只是默认的父类构造函数可以省略不写。
构造函数覆盖不?
为什么没有覆盖?子类中的构造函数和父类中的构造函数能相同么?不可能,函数名就不一样。
注意:子父类中构造函数不能不在。
就继承而言,子类可以继承父类的很多的东西,但是父类的构造函数是继承不了的。只能通过super()来调用父类的构造函数,这个就叫做子类的实例化过程。实例化过程必须要先经过父类的初始化。
子类的实例化就是创建对象。
这就是它的初始化过程。对于类的建立也需要初始化么?
现在又对子类中的构造函数进行了扩展,类中不止一个构造函数。这符合实际情况,不可能类中只有一个默认的构造函数。
结果是什么呢?DOS显示的结果为A,D。这里是在强调实例化的存在。一定要注意影藏语句的存在,在实际的开发中很多是没有书写super()的。
还有一点要强调的是,如果父类中没有空参数构造函数(没有话,需要自己自定义一个空参数构造函数),子类的实例化过程就进行不下去,DOS就会报错。→有其他构造函数存在时,默认的空参数构造函数就会消失,但是子类实例化时必须要空参数构造函数,这样一来,就必须在多个构造函数存在的情况下,自己构建一个空参数的构造函数。
空参数构造函数和默认构造函数。如果没有自定义空参数构造函数,那会不会有系统默认的构造函数存在,从而子类的实例化过程可以继续运行。
A
本例说明什么?当父类中定义了具有参数列表的构造参数时,空参数构造函数就不存在了。导致子类实例化的过程出错。
B
父类构造函数为空参数列表,和里面的执行语句不符合。
C
D
本例说明父类在没有定义构造函数时,是存在一个空参数的默认构造函数的。
注意:子类的实例化过程是否一定要进行?
实例化过程就是调用父类的空参数构造函数,这不一定的,但是由于继承的关系,调用父类构造函数是肯定的,但是可以调用空参数,也可以调用其他构造函数。这样一来,子类的实例化过程就不是必须的。
以上是关于java类中构造函数中:数组怎样初始化的主要内容,如果未能解决你的问题,请参考以下文章