动力节点——构造方法(九)

一,构造方法的引入

构造方法:

1,定义:

在类的代码中,如果没有编写构造方法,则编译过程中自动创建一个构造方法。

2,编译过程自动创建构造方法的特点:

使用默认的权限修饰符

没有返回值类型

方法名称和类名一致

没有方法体

没有形式参数

eg:

calss  Student{

        private  String  name;

        private  int  age;

        Student(){


        }

        public void setName(String  name){

                this.name=name;

        }

        public  String  getName(){

                return  name;

        }

        public  void  setAge(int  age){

                this.age=age;

        }  

        public  int  getAge(){

                return  age;

        }

}

public  class  ConstructorDemo{

        public  static  void  main(String[]  args){

                Student  s=new  Student();//new后面编写的是构造方法

                //st.Student();构造方法不是使用对象调用的。

        }

}


二,构造方法的特点:

1,手动编写构造方法

编写类就必须有构造方法,那么我们就不用使用自动创建,使用手动编写。

如果在代码编写过程中,手动创建了构造方法,则在编译器就不会再自动

创建一个默认的构造方法了。

2,手动编写构造方法的规则:

构造方法只能有权限修饰符(不能有其它修饰符)。

构造方法是没有返回值的(没有返回值        没有return)。

构造方法是可以抛出异常类型的(但是不常用)。

构造方法可以有形式参数(形式参数的值通常是给成员变量赋值的)。

构造方法是可以有方法体的。


注意:如果手动给某个类编写构造方法,必须先编写一个无参数、公开的、没有方法体的(是为了以后反射使用,后面课程会讲)。

3,构造方法的目的:

A,构造方法是和new配合来完成对象创建的。(重要)

构造方法是创建对象的最后一个步骤(会在创建的过程中被调用)。

B,构造方法的最终目的是为成员变量赋值(重要)。

到目前的知识点,有哪些方式可以给一个对象的成员变量赋值?

对象名称.成员变量            没有考虑封装性

setter                                必须在对象存在之后调用,可以被无数次调用

构造方法                            肯定是创建对象过程被调用,并且同一个对象,只能被调用一次

4,构造方法是可以调用普通成员方法的。

构造方法中是有this关键字的。

三,构造方法重载

1,名称都相同,都是类名称。

2,方法参数不同

3,构造方法中调用其它的构造方法

必须使用this(参数值);的方式调用其它的构造方法。

以上代码必须写在第一行。

4,为什么一个类在定义时需要多个构造方法?

在java语言中,往往针对一个问题提供了多种解决方式,需要根据情况而定。

在初步编写类时,可以只编写一个无参的构造方法;如果使用这个类时,有

需要在创建对象的时对某个属性赋值,则再针对性的编写其它构造方法。

eg:

class  Teacher{

        private  int  age=10;

        public  Teacher(){

                //this(20);

                System.out.println("Teacher类无参的构造方法");

                //在这个空参的构造方法中调用带参的构造方法

                //Teacher(20);

        }

        //体现和以上无参构造方法的重载,开始出现带参数的构造方法

        //这个参数写什么?这个参数通常是用于给某个属性赋值。

        public  Teacher(int  age){

                System.out.println("teacher类无参的构造方法");

                //以下代码是为成员变量age赋值

                this.age=age;

        }

        public  void  test(){

                System.out.println("age="+age);

        }

}

public  class  ConstructorDemo1{

        public  static  void  main(String[]  args){

                //给用Teacher类带参数的构造方法区创建对象

                Teacher  tt=new  Teacher(20);

                

                //验证带参数的构造方法为成员变量age赋值成功

                tt.test();

        }

}

四,构造方法的执行方式

加载时放在方法区

在执行时同样会在栈内存开辟空间(只不过它的调用是创建对象过程中被JVM自动调用的)。

在执行完时会立即释放栈内存空间。


和普遍方法的执行过程没有区别,只是调用时机不同。

五,对象的创建步骤:

加载

        在类第一次使用前,需要把class加载入内存

创建

        为对象创建空间

        为成员变量开辟空间并默认初始化

        为成员变量显示初始化

        为this开辟空间

        执行指定的构造方法(可能会有构造方法的嵌套使用)。

使用


注意:不是构造方法创建了对象,构造方法是创建对象的最后一个步骤(

它执行之前,实际对象已经创建完成)。

它是标识对象创建完成,可以开始使用。


六,带有构造方法的标准class编写

calss  T{

        private  String  name;

        private  int  age;

        //无参数的构造方法

        public  T(){

                

        }

        //带参数的构造方法

        public  T(String  name,  int  age){

                this.name=name;

                this.age=age;

        }

        //settre   getter方法

        public  String  getName(){

                return  name;

        }

        public  void  setNmae(String  name){

                this.name=name;

        }

        public  int  getAge(){

                return  age;

        }

        public  void  setAge(int  age){

                this.age=age;

        }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值