JAVA学习第八课(构造函数及其特点+构造代码块)
2014-09-08 20:35
316 查看
构造函数:
构造函数,就是在构建 创造对象 时所调用的函数,作用就是给对象进行初始化
特点:
1.函数名和类名相同
2.不需要定义返回值类型
3.没有具体的返回值
作用:给对象进行初始化
注意:
1.默认构造函数的特点
2.多个构造函数是以重载的形式存在的
代码演示:
PS:一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数
如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了
特别注意:如果定义了有参的构造函数,那么默认构造函数的形式也构造,编译器不再自动生成
实际上:默认的空参数函数是:man(){}
比如一个类:
class test
{
}
什么也没有,但是实际上里面有一个test(){},编译器编译时会先判断有没有写构造函数,没有自动添加,有就删除默认的构造函数
构造函数,是在一创建对象的同时被调用了
一般函数和构造函数的区别:
1.构造函数:对象创建时,就会调用与之对应的构造函数,并对该对象进行初始化
一般函数: 创建对象后,需要进行函数的调用的时候才会被调用
2.构造函数,对象创建时,只调用一次
一般函数:对象创建后,想调用几次就调用几次
什么时候使用构造函数?
在描述某一事物时,该事物存在一些内容,这些内容都定义在构造函数里。
如:对象一创建,就有一个默认的年龄、姓名
示例代码:
构造函数的重载:
PS:一个类中出现同名的函数名,必须要用的重载。
一个对象创建时如果没有调用构造函数,就意味着创建失败。
构造函数的内存分配图(如下图):对象要进堆,函数要进栈
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/31/cbaa6447b74756f74c2abcf2531bae6c)
构造函数细节:
构造函数,为了方便日后修改信息,所以要加set
构造函数的名前,不可加void等,加了之后就不是构造函数,而变成一般函数了(构造函数的特点2)
错误代码示例
这段代码的问题在于:
因为没有定义构造函数。
默认的构造函数是代码没有创建构造函数时自动添加,但是上述代码有构造函数了,但是没有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
构造函数,就是在构建 创造对象 时所调用的函数,作用就是给对象进行初始化
特点:
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
相关文章推荐
- Java学习笔记——静态代码块,构造代码块,构造函数间的执行顺序
- 7.17_java学习_构造函数_构造代码块
- Android(java)学习笔记188:关于构造代码块,构造函数的一道面试题(华为面试题)
- java——构造函数、构造代码块、Static关键字、main函数 & 继承:子父类中的变量、函数的特点、抽象类、接口等
- 黑马程序员_Java基础_面向对象(概述、类与对象关系、成员变量、封装private、构造函数和构造代码块、this关键字)
- 黑马程序员_java基础学习笔记之(构造函数&构造代码块&静态代码块)的区别
- 黑马程序员——java中静态代码块、构造代码块、构造函数的执行顺序以及作用
- java类中静态代码块、构造代码块、构造函数快速理解
- 【末世旅行之Java】构造函数与构造代码块
- 黑马程序员_java静态代码块、构造代码块和构造函数的执行时间分析
- Java中的构造函数、构造代码块、静态代码块
- 黑马程序员-java中构造函数、构造代码块、静态代码块及它们的初始化顺序
- 【26】静态代码块、构造代码块和构造函数的特点及加载顺序
- java 构造函数 和 构造代码块
- 黑马程序员——Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)
- JAVA学习第十六课(内部类及其特点)
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- 黑马程序员:Java之介绍对象、封装、构造函数、构造代码块及this关键字
- java中的静态代码块、构造代码块和构造函数
- 黑马程序员_Java基础_面向对象,封装,继承,单例设计模式,构造函数,构造代码块