java 基础 - 构造函数

来源:互联网 发布:应用搬家软件 编辑:程序博客网 时间:2024/05/21 08:46

构造函数(无参,有参) 反编译工具

需求 :用Java类来描述一个婴儿:一个孩子 出生的时候就有名字 (白户)

 出生的时候没名字  (黑户)

(黑户的解决方法:可以利用有参的构造方法)

 

构造函数: ( 类名 + 函数 )

 

修饰符  类名(){

 语句体......;

  }

 

构造函数作用,初始化类对象

 

构造函数要注意的【小细节】

   01.构造函数是没有返回值

  02.构造函数的函数名必须和类名一致

   03.如果在类当中没有去书写一个构造函数,那么java编译器就会帮助我们去添加一

个没有参数的构造函数,构造函数是创建对象必须用到的方法

   04.如果在类当中已经书写了一个构造函数,那么java编译器就不会帮助我们去添加

一个没有参数的构造函数

   05.在类当中可以实现多个函数的的重载,也就是说可以用不同的初始化条件给一个

对象进行初始化

  

构造函数和普通函数的【区别】

  01.返回值  :构造函数是没有返回值的

   普通函数必须有返回值,就算真的没有返回值内容,那么也要写上void

 

   02.函数名  :构造函数的函数名和类名相同

  普通函数只要符合命名规范就行(驼峰命名法,见名思意,标识符规则)

 

   03.调用方法:构造函数在调用的时候是JAVA虚拟机在创建对象的时候要调用的方法

   普通函数是只是对象去调用的函数

 

   04.作用上的:构造函数只做一件事情:创建对象

   普通函数就是我们思想在代码中的映射,想做什么做什么

  

 

  

 

 

 

【反编译命令】:

   java -c -l -private(-p) (class文件地址)

          c 反编译选的

          l 显示行号和变量

          p 显示所有成员和类

  

[发现] 在代码当中我们并没有书写任何一个构造方法,但是刚刚通过反编译工具发现,

      在给我们的.class多了一个一以  类名() ; 这样的格式出现的方法。

     这个方法是java编译器给我们提供的默认的构造方法,无参构造方法;

 

 class Baby{

int id;

private String name;

 

public Baby(){     //【无参构造方法】没有参数的构造方法,系统默认给出的

System.out.println("无参方法已被调用");

}

public Baby(int i, String n){     //【有参的构造方法】在使用时传入参数

id = i;

name = n;

System.out.println("有参方法已被调用");

}

public void cry(){

System.out.println("哇哇的哭~~~");

}

}

 

public class Demo0901 {

public static void main(String[] args) {

//出生的时候没有名字

//Baby yuge = new Baby();

Baby lunbu = new Baby(1, "比伦布" );

System.out.println("Name : " + lunbu.getName());

}

}

 

new Student().study();

//Student 后面不添加参数 调用的是无参数构造函数

//    后面添加有参数 调用的是 有参数构造函数

【代码块】

小孩出生会哭cry  自带被动

  [解决方案一 ]:很简单,把cry方法,放到构造函数里面

    [瓶颈] :万一有1000000个构造函数?

    [问题] :所有类对象

    [后期]

   Java 构造代码块

    格式:

    {

   执行代码 ;

   }

【对比】  

构造代码块 :对这个类的对象进行统一初始化

构造函数; 对单个对象进行初始化

   

      构造代码块的位置必须是在 构造函数之前

        

代码块分三大类:

1.构造代码块                                              

    2.局部代码块(基本没用,缩短局部变量的生存周期,解决内存)

    3.静态代码块 static                                      

 

class CutBaby{

int id = 5;           //成员变量在定义阶段进行赋值

          //只表示id 如果没有被修改的时候 默认值为5

          //注意  并不占用空间

String name;

 

{                

      id =7 ;          ======>>代码块

}                

public CutBaby(){

System.out.println("无参的构造函数");

}

public CutBaby(int i, String n){

id = i;

name = n;

System.out.println("有参的构造函数");

}

}

三种对于成员赋初值的操作   .                                     

1.定义时默认值                                               

2.构造代码块                                                 

3.构造函数                                                   

                                            .                

优先级第一的是构造函数 构造函数里面对成员变量的修改是最终值 

其次:1定义时默认值 2 构造代码块                          

谁在后谁确定最终值                                   

java 编译器在编译代码的时候,会把我们的代码进行重新排序     

会把成员变量定义                                         

 

 

【就近原则】

  在类当中存在同名的变量名 Java编译器就会认为最近的变量名是该语句所操作的变量名

 

this 关键字】 

  this代表的就是调用当前方法的对象

 就是一个对象的关键字,表示当前对象

 

this关键字的作用

  01如果在同一个函数当中发现有相同的变量名。就用this关键字来区分不同的变量  

this.变量名表示成员变量                                               

02this 关键字还能调用类当中的其他函数,这里包括成员函数和构造函数         

 

 

1.使用this调用构造函数的时候,使用的格式是 this(参数)

2.在一个构造函数A当中想要构造函数B,那么B函数必须在A函数的内的第一行

3.使用这种方式要尤为注意,稍不留神,就死循环了~~~

不同的构造函数相互调用的时候,要注意不能同时调用

0 0
原创粉丝点击