黑马程序员技术交流社区
标题: 关于构造函数的问题 [打印本页]
作者: 探花 时间: 2014-4-1 20:14
标题: 关于构造函数的问题
构造函数也是一个函数,是不是没有返回值,函数名和类名一样那,什么情况下会设置构造函数,什么情况下不能设置构造函数,构造函数有什么作用,还有如果
在一个代码中怎么设置构造函数。请高手一 一 仔细解答,谢谢,有代码更好
作者: 闲人 时间: 2014-4-1 20:34
额,我只知道构造函数时用来创建实例对象的,可以让子类进行重载,其他就不清楚了,我是新来的,请多多关照
作者: Up↑Lee↗ 时间: 2014-4-1 20:36
对象一建立就会调用与之对应的构造函数。
构造函数的作用:可以用于给对象进行初始化。
构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。
当在类中自定义了构造函数后,默认的构造函数就没有了。
构造函数和一般函数在写法上有不同。
在运行上也有不同。
构造函数是在对象一建立就运行。给对象初始化。
而一般方法是对象调用才执行,给是对象添加对象具备的功能。
一般函数不能调用构造函数
一个对象建立,构造函数只运行一次。
而一般方法可以被该对象调用多次。
什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
作者: 探花 时间: 2014-4-1 21:18
嗯 谢谢
作者: ╰青青子佩ˊゝ 时间: 2014-4-1 21:33
建议看毕老师的基础视频!
作者: 探花 时间: 2014-4-1 21:39
看了,有些时候会想不透
作者: ╰青青子佩ˊゝ 时间: 2014-4-1 21:57
关于你的问题我总结了5点,希望能帮到你。
- //1.构造函数没有返回值,不能定义return语句
- class Person{
- private String name ;
- //2.与类名一样,可以被public 、private修饰
- //3.构造函数的作用是给对象初始化,也就是说创建对象时,就让对象具有一些属性。如,一生下孩子,就要有名字,那么设置名字的属性值就可以在构造函数中完成。
- public Person(String name){
- this.name = name ;
- }
- }
- //4.当你要让这个类只存在一个对象(单例设计模式)时,可以用private来修饰构造函数,让其不能被创建对象,而是靠类的静态方法去获取一个对象,如下面这段代码。
- class Single{
- private Single(){}
- private static Single s = new Single();
- public static Single getInstance(){
- return s ;
- }
- }
- //5.对于怎么设置构造函数,爱怎么设置就怎么设置。注意不能有返回值和return语句就行了。
复制代码
作者: 杨殿生 时间: 2014-4-1 22:40
/*
构造函数
对象一建立就会调用与之对应的构造函数
细节:
当一个类汇总没有定义构造函数时,那么系统会默认给该类加一个
空参数的构造函数
当在类中自定义了构造函数的时候,系统就不会给该类定义够造函数
特点:
1,函数名与类名相同
2,不用定义返回值类型
3,不可以写return语句
作用:
可以给于给对象进行初始化
构造函数和一般函数在写法上有不同
在运行上也不同
构造函数时在一个对象一建立就运行,给对象初始化
而一般方法是对象调用才执行,是给对象添加对象具备的功能
一个对象建立,构造方法只能运行一次
而一般方法可以被该对象调用多次
什么时候定义构造函数呢?
当分析事物时,该事物就具备一些特性或者行为,那么将这些内容
定义在构造函数中
*/
class Person
{
private String name;
private int age;
Person()
{
System.out.println("a:name="+name+" "+"age="+age);
cry();
}
Person(String n)
{
name=n;
System.out.println("b:name="+name+" "+"age="+age);
cry();
}
Person(String n,int a)
{
name=n;
age=a;
System.out.println("c:name="+name+" "+"age="+age);
cry();
}
public void setName(String n)
{
name=n;
}
public String getName()
{
return name;
}
public void cry()
{
System.out.println("cry");
}
}
class PersonDemo2
{
public static void main(String[] args)
{
// Person p1=new Person();
// p1.cry();
Person p2=new Person("lisi");
System.out.println(p2.getName());
p2.setName("libusi");
System.out.println(p2.getName());
//Person p3=new Person("wangwu",10);
}
}
作者: 刘先斌 时间: 2014-4-1 22:48
构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
特点:
1:该函数的名称和所在类的名称相同。
2:不需要定义返回值类型。
3:该函数没有具体的返回值。
记住:所有对象创建时,都需要初始化才可以使用。
注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。
一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。
构造函数和一般函数有什么区别呢?
1:两个函数定义格式不同。
2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。
一般函数,是对象创建后,需要调用才执行,可以被调用多次。
什么时候使用构造函数呢?
分析事物时,发现具体事物一出现,就具备了一些特征,那就将这些特征定义到构造函数内。
构造代码块和构造函数有什么区别?
构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。
构造函数:是给与之对应的对象进行初始化。它具有针对性。
Person p = new Person();
创建一个对象都在内存中做了什么事情?
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
作者: 孔丽阁 时间: 2014-4-1 23:14
给你一个个人的解释,应该会更形象点:构造函数就是专门用来构造一个对象实例的方法,所以返回值可以省略。现在假设有一个类
class Dog{
private String name;
private int age;
public Dog(){}
public Dog(String name,int age){
this.name = name;
this.age = age;
}
}
这里边有两个构造函数,第一个是无参构造函数,它的作用就是可以实例化一个无名无年龄的Dog对象。
第二个构造函数也可以实例化一个Dog对象,只不过有名字和年龄。当然,你还可以定义多个构造函数。
作者: 相见欢 时间: 2014-4-2 13:23
构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
特点:
1:该函数的名称和所在类的名称相同。
2:不需要定义返回值类型。
3:该函数没有具体的返回值。
记住:所有对象创建时,都需要初始化才可以使用。
注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。
一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。
构造函数和一般函数有什么区别呢?
1:两个函数定义格式不同。
2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。
一般函数,是对象创建后,需要调用才执行,可以被调用多次。
什么时候使用构造函数呢?
分析事物时,发现具体事物一出现,就具备了一些特征,那就将这些特征定义到构造函数内。
构造代码块和构造函数有什么区别?
构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。
构造函数:是给与之对应的对象进行初始化。它具有针对性。
Person p = new Person();
创建一个对象都在内存中做了什么事情?
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
作者: Peach2014 时间: 2014-4-2 16:02
本帖最后由 Peach2014 于 2014-4-2 16:03 编辑
你可以将类理解为生产手机的机器,
构造函数就是机器的电路板(构造函数作用),用来设定手机的制造规格,如果你不设定,它就按照默认的规格制造(默认构造函数);
没有返回值,可以理解为它设置之后不需要给其他机器汇报情况;
和类名一样可以理解为给手机贴商标(是我这个机器制造的)
作者: 黄泉 时间: 2014-4-2 17:29
“构造函数是一种很特殊的函数,因为他没有返回值。这和‘返回值为void’有极大的差别。返回void时,一般函数并不返回任何东西,但是一般的函数能够选择是否要返回些什么东西。构造函数则绝对不返回任何东西,而且你也没有任何选择。如果它有一个返回值,而且你有权利选择你自己的返回型别(return type),编译器势必得通过某种方式来知道如何处理那个返回值。”
构造方法对返回类型没有选择权,也就是说不加任何返回修饰符,以示与其他的方法的区别 ,而void类型表示函数可以控制不让返回值,
简单来说有return就代表着有选择权,即使是void,编译器调用构造函数只是确定它发生,如果有返回值的话编译器就不得不知道针对返回值该这么去做,还有程序员亦可以随意调构造函数了,这样会威胁到程序的安全
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |