黑马程序员---构造方法
2014-03-12 15:16
274 查看
------- android培训、java培训、期待与您交流!
----------
黑马程序员---构造方法
一、构造方法:
1.函数名与类名相同
2.不用定义返回值类型
3.不可以加return语句
class Person
{
Person()
{
System.out.println("hello");
}
}
class Demo
{
public static void main(String[] args)
Person p = new Person();
new Person();
} // 运行结果: hello
4.从以上表明,对象已建立就会调用与之对应的构造函数;构造函数的作用:可以用于给对象进行初始化。
5.当一个类中没有定义构造函数式,系统会默认给该类加入一个空参数构造方法;而当类中自定义了一个构造函数后,默认的构造方法就不存在了。
6.在什么时候定义构造方法?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
二、继承中的构造方法
1.子类的构造过程中必须调用基类的构造方法
2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法(this(argument_list)调用本类的另外构造方法)
3.如果子类构造方法中没有显式调用基类的构造方法,则默认调用基类的无参构造方法;当基类中定义了有参的构造方法,没有无参构造方法时编译出错。
简单代码说明:
class Person{
private String name;
private int age;
Person(){
System.out.println("执行了父类无参构造方法!");
}
Person(String name,int age){
this.name = name ;
this.age = age ;
System.out.println("执行了父类有参构造方法!");
}
}
class Student extends Person{
private int id;
Student(String name,int age,int id){
//super(name,age);
this.id = id ;
//super(name,age);
System.out.println("子类构造方法执行!");
}
}
public class Test2{
public static void main(String args[]){
Student t1 = new Student("wanghaohua",24,1234) ;
}
}
1.当两条super语句都注释掉的情况下,程序运行结果:
执行了父类无参构造方法!
子类构造方法执行!
2.但当父类中不存在:Person()这一无参构造方法时,程序将编译错误。
3.当第一条super存在时,自动将参数回传到有参父类构造方法,程序执行结果:
执行了父类有参构造方法!
子类构造方法执行!
4.当第二条super存在时,系统编译错误,调用父类构造方法必须为第一行。
三、静态代码块,构造代码块
静态代码块的格式
特点:随着类的加载而执行,只执行一次。
用于给类进行初始化的。
static
{
//执行语句
}
例如
class StaticDemo
{
static{
System.out.println("a");
}
}
构造代码块
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数区别:
构造代码块是给所有的对象初始化,
而构造函数式给对应的对象进行初始化。
class Test{
//构造代码块
{
Sytem.out.println("构造代码块");
}
Test(){
System.out.println();
}
}
下面一段代码是对静态代码块,构造代码块,构造方法,加载顺序的验证。
package com.wang.test;
public class Test6 {
public static void main(String[] args){
new StaticDemo();
StaticTest.show();
}
}
/*
* 通过 类StaticCode与StaticDemo的集成,来实际验证静态代码块、构造代码块、与构造方法的加载执行顺序。
*/
class StaticCode{
StaticCode(){
System.out.println("父类构造函数输出");
}
{
System.out.println("父类的构造代码块输出");
}
static{
System.out.println("父类静态代码块输出");
}
}
class StaticDemo extends StaticCode{
StaticDemo(){
System.out.println("子类构造函数输出");
}
static{
System.out.println("子类静态代码块输出");
}
{
System.out.println("子类的构造代码块输出");
}
}
//通过StaticTest说明构造代码块的加载时随着类的加载而执行的。
class StaticTest{
static{
System.out.println("StaticTest构造代码块");
}
public static void show(){
System.out.println("show()");
}
}
父类静态代码块输出
子类静态代码块输出
父类的构造代码块输出
父类构造函数输出
子类的构造代码块输出
子类构造函数输出
StaticTest构造代码块
show()
总结:通过此段代码可以了解,随着类的加载静态代码块最先执行,子类的静态代码块优先于父类的构造代码块。父类的构造方法要优先于子类的构造代码块,当父类的构造代码块和构造函数完全执行完,才会执行子类的构造代码块、构造函数。
------- android培训、java培训、期待与您交流!
----------
----------
黑马程序员---构造方法
一、构造方法:
1.函数名与类名相同
2.不用定义返回值类型
3.不可以加return语句
class Person
{
Person()
{
System.out.println("hello");
}
}
class Demo
{
public static void main(String[] args)
Person p = new Person();
new Person();
} // 运行结果: hello
4.从以上表明,对象已建立就会调用与之对应的构造函数;构造函数的作用:可以用于给对象进行初始化。
5.当一个类中没有定义构造函数式,系统会默认给该类加入一个空参数构造方法;而当类中自定义了一个构造函数后,默认的构造方法就不存在了。
6.在什么时候定义构造方法?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
二、继承中的构造方法
1.子类的构造过程中必须调用基类的构造方法
2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法(this(argument_list)调用本类的另外构造方法)
3.如果子类构造方法中没有显式调用基类的构造方法,则默认调用基类的无参构造方法;当基类中定义了有参的构造方法,没有无参构造方法时编译出错。
简单代码说明:
class Person{
private String name;
private int age;
Person(){
System.out.println("执行了父类无参构造方法!");
}
Person(String name,int age){
this.name = name ;
this.age = age ;
System.out.println("执行了父类有参构造方法!");
}
}
class Student extends Person{
private int id;
Student(String name,int age,int id){
//super(name,age);
this.id = id ;
//super(name,age);
System.out.println("子类构造方法执行!");
}
}
public class Test2{
public static void main(String args[]){
Student t1 = new Student("wanghaohua",24,1234) ;
}
}
1.当两条super语句都注释掉的情况下,程序运行结果:
执行了父类无参构造方法!
子类构造方法执行!
2.但当父类中不存在:Person()这一无参构造方法时,程序将编译错误。
3.当第一条super存在时,自动将参数回传到有参父类构造方法,程序执行结果:
执行了父类有参构造方法!
子类构造方法执行!
4.当第二条super存在时,系统编译错误,调用父类构造方法必须为第一行。
三、静态代码块,构造代码块
静态代码块的格式
特点:随着类的加载而执行,只执行一次。
用于给类进行初始化的。
static
{
//执行语句
}
例如
class StaticDemo
{
static{
System.out.println("a");
}
}
构造代码块
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数区别:
构造代码块是给所有的对象初始化,
而构造函数式给对应的对象进行初始化。
class Test{
//构造代码块
{
Sytem.out.println("构造代码块");
}
Test(){
System.out.println();
}
}
下面一段代码是对静态代码块,构造代码块,构造方法,加载顺序的验证。
package com.wang.test;
public class Test6 {
public static void main(String[] args){
new StaticDemo();
StaticTest.show();
}
}
/*
* 通过 类StaticCode与StaticDemo的集成,来实际验证静态代码块、构造代码块、与构造方法的加载执行顺序。
*/
class StaticCode{
StaticCode(){
System.out.println("父类构造函数输出");
}
{
System.out.println("父类的构造代码块输出");
}
static{
System.out.println("父类静态代码块输出");
}
}
class StaticDemo extends StaticCode{
StaticDemo(){
System.out.println("子类构造函数输出");
}
static{
System.out.println("子类静态代码块输出");
}
{
System.out.println("子类的构造代码块输出");
}
}
//通过StaticTest说明构造代码块的加载时随着类的加载而执行的。
class StaticTest{
static{
System.out.println("StaticTest构造代码块");
}
public static void show(){
System.out.println("show()");
}
}
父类静态代码块输出
子类静态代码块输出
父类的构造代码块输出
父类构造函数输出
子类的构造代码块输出
子类构造函数输出
StaticTest构造代码块
show()
总结:通过此段代码可以了解,随着类的加载静态代码块最先执行,子类的静态代码块优先于父类的构造代码块。父类的构造方法要优先于子类的构造代码块,当父类的构造代码块和构造函数完全执行完,才会执行子类的构造代码块、构造函数。
------- android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员——【OC】构造方法概述
- 黑马程序员--构造方法与继承
- 黑马程序员--OC自学笔记---05点语法、@property、@synthesize、动态类型、id类型、响应方法、构造方法
- 黑马程序员_OC构造方法和ID类型学习学习
- ——黑马程序员——OC中构造和重写构造方法
- 黑马程序员-IOS笔记-封装构造方法
- 黑马程序员--冒泡排序、方法、方法重载和构造方法中的知识点
- 黑马程序员:构造方法的重载
- 黑马程序员_JAVA的构造方法
- 黑马程序员——ios基础---Objective-C:构造方法、@property、MRC
- 黑马程序员_iOS开发之OC之面向对象之id语法、构造方法、@category分类、类本质、description方法和SEL数据类型
- 黑马程序员——JAVA继承中的构造方法
- 黑马程序员——OC核心语法2之构造方法
- [黑马程序员][OC]构造方法
- 黑马程序员07——杂项、构造方法、索引器
- 黑马程序员—Java面向对象(类和对象、封装、构造方法、this关键字、static关键字)
- 黑马程序员——高新技术---Java基础语法—面向对象_构造方法,static 关键字
- 黑马程序员——Java基础---面向对象(构造方法和static关键字)
- 黑马程序员-两种容易混淆的指针及构造方法的执行过程分析
- 黑马程序员----java中构造方法全解