面向对象(构造函数+构造代码块)-第10天
来源:互联网 发布:软件开发助理发展前景 编辑:程序博客网 时间:2024/06/06 13:58
面向对象(构造函数+构造代码块)
1、面向对象(构造函数)
构造函数特点:
函数名和类名称相同
不用定义返回值,也就没有return。
对象一建立就会调用与之对应的构造函数。
构造函数的作用:可以用于给对象进行初始化。
多个构造函数是以重载的形式存在的。
class Person
{
Person()
{
system.out.println("person run");
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person();//打印person run。注意没有调用也可以打印。。可以看出对象一建立就会调用与之对应的构造函数。
new Person();//打印person run
}
}
构造函数的小细节:
1,当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。
2,当在类中自定义了构造函数后,默认的构造函数就没有了。
class Person
{
//Person(){}。系统会自动添加一个空参数的构造函数Person(){}。
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person();
new Person();
}
}
class Person
{
private String name;//封装名字
private int age;//封装年龄
Person()//构造函数
{
system.out.println("A:name="+name+",,age="+age);
}
Person(String n)//利用函数重载,函数的参数不一样,功能却相似。
{
name=n;
system.out.println("B:name="+name+",,age="+age);
}
Person(String n,int a)//继续函数重载
{
name=n;
age=a;
system.out.println("C:name="+name+",,age="+age);
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p1=new Person(); //打印name=null,,age=0。调用构造函数Person(),由于name和age已经被封装起来,故调用时,初始化默认值,字符串””为null,int型为0.
Person p2=new Person("lisi"); //打印name=lisi,,age=0
Person p3=new Person("wangwu",10);//打印name=wangwu,,age=10
}
}
当定义了构造函数的函数重载,而没有手动定义说明构造函数时:
class Person
{
private String name;
private int age;
//系统不会自动定义空参数构造函数
Person(String n)//构造函数的重载
{
name=n;
system.out.println("B:name="+name+",,age="+age);
}
Person(String n,int a)
{
name=n;
age=a;
system.out.println("C:name="+name+",,age="+age);
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p1=new Person(); //打印错误。因为Person是已经自定义过的函数,系统则不会定义这个空参数的值。p1找不到值。
}
}
添加一个cry函数
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 cry()
{
system.out.println("cry......");
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p1=new Person(); //打印name=null,,age=0 cry......
Person p2=new Person("lisi"); //打印name=lisi,,age=0 cry......参考下图3。
}
}
构造函数和一般函数在写法上有不同。
在运行上也有不同。
构造函数是在对象一建立就运行。给对象初始化。
而一般方法是对象调用才执行,是给对象添加对象具备的功能。
一个对象的建立,构造函数只运行一次。!!!
而一般方法可以被该对象调用多次。
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();
}
public voidsetName(String n)//p2.setName调用的是这段程序。
{
name=n;
}
public String getName()
{
return name;
}
Person(String n,int a)
{
name=n;
age=a;
system.out.println("C:name="+name+",,age="+age);
cry();
}
public void cry()
{
system.out.println("cry......");
}
}
class PersonDemo
{
public static void main(string[] args)
{
//构造函数只能执行一次
Person p2=new Person("lisi"); //打印B:name=lisi,,age=0。Person("lisi")重载也是构造函数!!!
//一般函数可以执行多次
p2.setName("libusi");
system.out.println("p2.setName()");//打印libusi
p2.setName("HAISHILISI");
system.out.println("p2.setName()");//打印HAISHILISI
}
}
什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特征或者行为,那么将这些内容定义在构造函数中。
2、面向对象(构造代码块)
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
区别:
构造代码是给所以对象进行统一初始化。
而构造函数是给对应不同的对象分别进行初始化。
class Person
{
private String name;
private int age;
//下面这个括号里面的我们称之为构造代码块。
{
system.out.println("Person code run");
}
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 cry()
{
system.out.println("cry......");
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p1=new Person(); //打印Person code runA:name=null,,age=0
Person p1=new Person("lisi"); //打印Person code runA:name=lisi,,age=0。
}
}
于是cry可以放进构造代码块中,这是它们的共性,。
程序转变如下:
class Person
{
private String name;
private int age;
//构造代码块
{
system.out.println("Person code run");
cry();
}
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 cry()
{
system.out.println("cry......");
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p1=new Person(); //打印Person code run A:name=null,,age=0
Person p1=new Person("lisi"); //打印Person code run A:name=lisi,,age=0
}
}
构造代码块中定义的是不同对象共性的初始化内容。
- 面向对象(构造函数+构造代码块)-第10天
- 黑马程序员——第5天——(面向对象)构造函数,构造代码块,this关键字
- 黑马程序员-面向对象(构造函数、构造代码块、静态代码块)
- 面向对象一(类、对象、变量、构造函数、构造代码块、this、static)
- 黑马程序员------面向对象(No.2)(封装、构造函数、构造代码块、this)
- JAVA面向对象知识点总结(2)—封装、构造函数、构造代码块、this关键字
- Java基础--面向对象(封装、构造函数、构造代码块、this关键字)
- 面向对象及构造代码块、静态代码块、构造函数的区别
- Java 面向对象(封装、继承、多态+面向对象、构造函数、静态代码块)
- Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)
- java_对象(构造函数和构造代码块)
- 黑马程序员 JAVA初级-面向对象 匿名对象、封装、构造函数、构造代码块、this
- javaSE-面向对象-构造代码块
- Java面向对象 构造代码块
- JAVA概述(11) 面向对象(构造代码块)
- 第十七、Java面向对象之构造函数与构造代码块
- 【学习笔记04】java面向对象-构造函数、构造代码块
- 黑马程序员---java基础第5天(构造代码块、this关键字、构造函数)
- HDU 1260 Tickets
- iOS内存管理策略和实践
- ReactiveCocoa学习(二)
- selenium grid2 - node说明
- js_事件流
- 面向对象(构造函数+构造代码块)-第10天
- 配置struts出现404错误
- Android开发工具汇总
- 算法进军大道(二)
- Poj 3461 Oulipo
- BeagleBone Black使用无线网卡通过WIFI联网
- CocoaPods pod install/pod update更新慢的问题
- js代码触发onchange事件
- 移动基地SDK接入Cocos2dx手游笔记