您的位置:首页 > 编程语言 > Java开发

JAVA学习第八课(构造函数及其特点+构造代码块)

2014-09-08 20:35 316 查看
构造函数:



构造函数,就是在构建 创造对象 时所调用的函数,作用就是给对象进行初始化

特点:

1.函数名和类名相同
2.不需要定义返回值类型
3.没有具体的返回值

作用:给对象进行初始化


注意:

1.默认构造函数的特点

2.多个构造函数是以重载的形式存在的



代码演示:



class man
{
private int age;
private String name;

man()//定义一个man类的构造函数
{
System.out.println("sun");
}
public void fun()
{
System.out.println(name+" "+age);
}
}
public class Main
{
public  static void  main(String[] args)
{
man jo = new man();
}
}

打印 sun、


PS:一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数



如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了


特别注意:如果定义了有参的构造函数,那么默认构造函数的形式也构造,编译器不再自动生成

实际上:默认的空参数函数是:man(){}



比如一个类:

class test

{

}

什么也没有,但是实际上里面有一个test(){},编译器编译时会先判断有没有写构造函数,没有自动添加,有就删除默认的构造函数

构造函数,是在一创建对象的同时被调用了

一般函数和构造函数的区别:

1.构造函数:对象创建时,就会调用与之对应的构造函数,并对该对象进行初始化

一般函数: 创建对象后,需要进行函数的调用的时候才会被调用

2.构造函数,对象创建时,只调用一次

一般函数:对象创建后,想调用几次就调用几次

什么时候使用构造函数?

在描述某一事物时,该事物存在一些内容,这些内容都定义在构造函数里。

如:对象一创建,就有一个默认的年龄、姓名


示例代码:



class man
{
private int age;
private String name;

man()//定义一个man类的构造函数
{
age = 20;
name = "john";
}
public void fun()
{
System.out.println(name+" "+age);
}
}

public class Main
{
public  static void  main(String[] args)
{
man jo = new man();
jo.fun();

}
}


构造函数的重载:



class man
{
private int age;
private String name;

man()//定义一个man类的构造函数--------------- |
{                                            |
age = 20;                            |
name = "john";                       |
}                                            |
//	对象在创建前就有年龄,名字             |
|
man (int a,String s)                         |-------->重载
{                                            |
age = a;                             |
name =s;                             |
}                                            |
man (String s)                               |
{                                            |
name =s;                             |
}                             ---------------|
public void fun()
{
System.out.println(name+" "+age);
}
}

public class Main
{
public  static void  main(String[] args)
{
man jo = new man();
jo.fun();
man jj  = new man(1,"BLF");
jj.fun();

man jjj  = new man("BLF2");
jj.fun();//打印BLF 0
}
}


PS:一个类中出现同名的函数名,必须要用的重载。

一个对象创建时如果没有调用构造函数,就意味着创建失败。

构造函数的内存分配图(如下图):对象要进堆,函数要进栈







构造函数细节:

构造函数,为了方便日后修改信息,所以要加set

构造函数的名前,不可加void等,加了之后就不是构造函数,而变成一般函数了(构造函数的特点2)

错误代码示例




class man
{
private int age;
private String name;

man(int a)
{
age = a;
}
//	对象在创建前就有年龄,名字

man (int a,String s)
{
age = a;
name =s;
fun();
}
public  void set(String s)
{
name = s;
}
public void fun()
{
System.out.println(name+" "+age);
}
}

public class Main
{
public  static void  main(String[] args)
{
man jo = new man();
jo.set("BLF2");
jo.fun();
}
}


这段代码的问题在于:

因为没有定义构造函数。

   默认的构造函数是代码没有创建构造函数时自动添加,但是上述代码有构造函数了,但是没有man(){}找一个类型的构造函数,所以报错


构造代码块:

构造代码块,与对象有关(与类无关),所有对象进行初始化,具备对象的通用性

(有几个对象,就执行几次)

构造函数,具备对象的针对性

面试题:用构造代码块,静态代码块,构造函数同时操作一个变量,问操作的顺序是什么?

静态代码块先执行,在看有无对象,如果有对象构造代码块先执行,然后是构造函数




class BLF
{
private static String name;

{
System.out.println("nni");
}
BLF(String name)
{
this.name = name;
System.out.println("哭");
}
BLF()
{
this.name = "MIMI";
System.out.println("哭");
}
public static void show()
{
System.out.println("name : "+name);

}
}
public class Main
{

public static void main (String[] args)
{
BLF jo = new BLF();
jo.show();
BLF jo2 = new BLF("你");
jo2.show();
}
}打印:
nini

nini

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐