java_对象(构造函数和构造代码块)

对象:真实存在的唯一的事物。

类: 同一种类型的事物公共属性与公共行为的抽取。

java面向对象语言:

核心思想: 找适合的对象做适合的事情.

找对象的方式:

方式一: sun已经定义好了很多了类,我们只需要认识这些类即可创建对象使用。
方式二: 我们需要自定义类,通过自定义类创建对象。

在整理笔记的过程中对自己有疑问的概念使用代码验证或者推翻它。

自定义类三步骤:
1. 自定义一个类。
class 类{
事物 的公共属性使用成员 变量描述

        事物的公共行为使用函数描述。
      }
2. 可以通过类创建对象。
3. 访问(设置)对象的属性或者调用对象的方法。

成员变量与局部变量 的区别:
1. 自定义的位置区别:
1. 成员变量是定义在方法之外,类之内的变量。
2. 局部变量是声明在方法之内的变量。
2. 作用上的区别:
1. 成员变量的作用描述一类事物的属性。
2. 局部变量的作用是提供一个变量给方法内部使用的。
3. 生命周期的区别;
1. 成员变量随着对象的创建而存在,随着对象的消失而消失。
2. 局部变量是调用到了对应的方法执行 到了创建该变量的语句时存在,一旦出了自己的作用域马上从内存中消失。
4. 初始值的区别:
1. 成员变量是有默认的初始值的。
2. 局部变量是没有默认的初始值的,必须要先初始化才能使用。

匿名对象: 没有引用类型变量指向的对象就称作为匿名对象。

匿名对象要注意的细节:
1. 一般不会给匿名对象的属性赋值,因为永远都没法获取到。
2. 两个匿名对象永远都不可能是同一个对象。

匿名对象好处:简化书写。

匿名对象的应用场景:
1. 如果调用一个对象的方法一次时,然后这个对象就不再使用,那么这时候可以使用匿名对象。
2. 可以作为实参调用一个函数。

封装:

封装的步骤:
1. 使用private修饰需要被封装的属性.
2. 根据需要提供get或者set方法设置以及获取属性。

封装的好处:
1. 提高了数据的安全性。
2. 操作简单。
3. 隐藏了实现。

注意:一般实体类的属性我们都会封装起来。

java是 面向对象的语言: “万物皆对象”: 任何事物都可以使用类进行描述。

需求: 使用java类描述 一个婴儿.

在现实生活中有两种婴儿, 一种婴儿一出生就具备了名字(白户),还有一种婴儿就是 出生之后才有名字 的(黑户)。

构造函数:

构造函数的作用: 给对应的对象进行初始化。

构造函数的定义的格式:

修饰符  函数名(形式参数){
    函数体...
}

构造函数要注意的细节:
1. 构造函数 是没有返回值类型的。
2. 构造函数的函数名必须要与类名一致。
3. 构造函数并不是由我们手动调用的,而是在创建对应的对象时,jvm就会主动调用到对应的构造函数。
4. 如果一个类没有显式的写上一个构造方法时,那么java编译器会为该类添加一个无参的构造函数的。
5. 如果一个类已经显式的写上一个构造方法时,那么java编译器则 不会再为该类添加 一个无参 的构造方法。
6. 构造函数是 可以在一个类中以函数重载 的形式存在多个 的。

/*
构造代码块:

构造代码块的作用:给对象进行统一的初始化。

构造函数的作用: 给对应的对象进行初始化。

构造代码块的格式:

{
    构造代码块
}

注意: 构造代码块的大括号必须位于成员 位置上。

代码块的类别:
1. 构造代码块。
2. 局部代码块. 大括号位于方法之内。 作用:缩短局部 变量 的生命周期,节省一点点内存。
3. 静态代码块 static

构造 代码块要注意的事项:
1. java编译器编译一个java源文件的时候,会把成员变量的声明语句提前至一个类的最前端。
2. 成员变量的初始化工作其实都在在构造函数中执行的。
3. 一旦经过java编译器编译后,那么构造代码块的代码块就会被移动构造函数中执行,是在构造函数之前执行的,构造函数的中代码是最后执行 的。
4. 成员变量的显示初始化与构造代码块 的代码是按照当前代码的顺序执行的。

*/

class Baby{

    int id; //身份证

    String  name;  //名字

    //构造代码块...
    {
        //System.out.println("构造代码块的代码执行了......");

    }

    //带参构造函数
    public  Baby(int i , String n){
        id  = i;
        name = n;
    }

    //无参构造方法
    public Baby(){
    }

    public void cry(){
        System.out.println(name+"哇哇哭...");
    }   
}



class Demo4 
{
    public static void main(String[] args) 
    {
        Baby b1 = new Baby(110,"狗娃");  //  狗娃 狗剩 铁蛋
        System.out.println("编号:"+ b1.id + " 名字:"+b1.name);
        /*
        System.out.println("编号:"+ b1.id + " 名字:"+b1.name);

        new Baby(112,"狗剩");
        new Baby();
        */
        /*
        new Baby(110,"狗娃");
        new Baby(112,"狗剩");
        new Baby();
        */
    }
}

疑问:创建对象时,jvm就会调用到对应的构造方法,那么我们以前没有学构造方法,那么
以前创建对象时,jvm是否 也会调用构造方法呢?如果有?构造方法从何而来呢?

        会调用, java编译器在编译的 时候给加上去的。

jdk提供了一个java开发工具(javap.exe)给我们进行反编译的。

javap 反编译工具的使用格式:

    javap -c -l -private 类名

疑问: java编译器添加 的无参构造方法的权限修饰符是 什么?
与类的权限修饰是一致的。

构造函数与普通 函数的区别:
1. 返回值类型的区别:
1. 构造函数是没有返回值类型 的,
2. 普通函数是有返回值类型的,即使函数没有返回值,返回值类型也要写上void。
2. 函数名的区别:
1. 构造函数的函数名必须要与类名一致,
2. 普通函数的函数名只要符合标识符的命名规则即可。
3. 调用方式的区别:
1. 构造函数是 在创建对象的时候由jvm调用的。
2. 普通函数是由我们使用对象调用的,一个对象可以对象多次普通 的函数,
4. 作用上的区别:
1. 构造函数 的作用用于初始化一个对象。
2. 普通函数是用于描述一类事物的公共行为的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值