Day09 类和对象、封装、构造方法

类和对象

类的定义

类的定义:类是现实生活中一类具有共同属性和行为的事物的抽象。

类的特点:

1.类是对象的数据类型

2.类是具有相同属性和行为的一组对象的集合。

类的定义步骤

1.定义类

2.编写类的成员变量

3.编写类的成员方法

public class 类名{

//成员变量

变量1的数据类型 变量1;

变量2的数据类型 变量2;

//成员方法

方法1;

方法2;

}

demo:

package JavaStudyDay10;

public class Phone {
    //定义成员变量
    String brand;
    int price;

    //定义成员方法
    public void call() {
        System.out.println("call");
    }

    public void messaeg() {
        System.out.println("sendMessage");
    }
}

对象的使用

1.创建对象 格式:类名 对象名 = new 类名(); 例: Phone p = new Phone();

2.使用对象

使用成员变量:

格式:对象名.变量名 例:p.brand

使用成员方法:

格式:对象名.方法名 例:p.call

package JavaStudyDay10;

public class PhoneTest {
    public static void main(String[] args) {
        //创建对象
        Phone p = new Phone();
        //使用成员变量
        System.out.println(p.brand); //null
        System.out.println(p.price); //0

        p.brand = "HUAWEI";
        p.price = 3000;

        System.out.println(p.brand); //HUAWEI
        System.out.println(p.price); //3000

        p.call(); //打电话
        p.messaeg(); //发短信
    }
}

类和对象的关系

类是对显示生活中一类具有共同属性的行为事物的抽象

对象是能够看得到摸得着的实体


类是对象的抽象,对象是类的实体。


对象内存图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bw4pSM7y-1606572736073)(D:\JAVA学习截图\多个对象指向相同的内存.jpg)]

当多个对象指向同一个堆内存空间时,任意一个对象使用成员变量改变时,另一个也会随之改变。

成员变量和局部变量

成员变量:类中方法外的变量

局部变量:类中方法中的变量

package JavaStudyDay10;

public class Phone {
    //定义成员变量
    String brand;
    int price;

    //定义成员方法
    public void call() {
        int i;  //局部变量
        System.out.println("call");
    }

    public void messaeg() {
        int j;  //局部变量
        System.out.println("sendMessage");
    }
}
成员变量和局部变量的区别

1.类中的位置不同。成员变量在类中方法外,局部变量在类中方法外。

2.内存中的位置不同。成员变量在堆内存,局部变量在栈内存。

3.生命周期不同。成员变量随着对象的存在而存在,随着对象的消失而消失。局部变量随着方法调用而存在,随着方法调用结束而消失。

4.初始值不同。成员变量在堆内存有初始值,局部变量在栈内存无初始值,必须先定义赋值才能使用。

封装

private 关键字

1.是一个权限修饰符

2.可以修饰成员(成员变量和成员方法)

3.作用是保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问。

若其他类需要使用,则提供相应操作。


get 变量名() 方法,用于获取成员变量的值,方法用public修饰

set 变量名(参数), 用于设置成员变量的值,方法用public修饰。


demo:

package JavaStudyDay10;

import com.sun.org.apache.bcel.internal.generic.RETURN;

public class Student {
    //定义成员变量
    int height;
    int weight;
    String hobby;
    private int age;
    public void setAge(int a){
        if(a<0 || a>120)  //判断年龄大小是否符合规则
            System.out.println("你给的年龄有误");
        }else {
            age = a;
        }
    }
    public int getAge() {
        return age;
    }

    //定义成员方法
    public void study() {
        System.out.println("学习!");
    }

    public void hobby() {
        System.out.println("打篮球篮球篮球!");
    }

    public void eat() {
        System.out.println("干饭");
    }
}
//若测试类需要使用成员变量,则直接调用相应get()、set()方法。

this关键字

this修饰的变量用于指代成员变量。

public void setAge(int age){

this.age = age;

}

如果形参与成员变量名字相同,带有this的变量指代的是成员变量,没带this的变量是方法的形参。


什么时候使用this呢?

在局部变量的名字与成员变量的名字相同时,为了解决局部变量隐藏成员变量的时候使用this关键字。


方法被哪个对象调用,this就代表哪个对象。

封装

封装是面向对象的三大特征之一。(封装、继承、多态)

封装原则

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏信息的操作和访问。

例如成员变量private,提供对应的set(变量)、get()方法。

封装的好处

通过方法来控制对成员变量的操作,提高了代码的安全性。

把代码通过方法来进行封装,提高了代码的复用性。

构造方法

作用:创建对象

格式

public class 类名{

修饰符 类名 参数(){ //修饰符一般用public

}

}

例如:

public class Student{

public Student(){

}

}

构造方法的注意事项

1.构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参构造方法

如果定义了构造方法,系统将不再提供默认的构造方法

2.构造方法的重载

如果自定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法

3.推荐使用方式

无论是否视同,都手工书写无参构造方法

标准类的制作要求


1.成员变量

使用private修饰

2.构造方法

提供一个无参构造方法

提供带多个参数的构造方法

3.成员方法

提供每一个成员变量对应的set和get方法

提供一个显示对象信息的show();

4.创建对象并给成员对象赋值,两种方式。

第一种方法:使用无参构造方法创建对象后使用set方法赋值

第二种方法:使用带参构造方法直接创建带有属性值的对象


Demo:

package JavaStudyDay10;

public class Parent {
    //定义成员变量
    private String name;
    private int age;

    //定义set()、get()方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        if (age < 0) {
            System.out.println("年龄输入有误奥:(");
        } else {
            this.age = age;
        }
    }

    public int getAge() {
        return age;
    }

    //定义构造方法
    public Parent(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //定义空构造方法
    public Parent() {
    }

    public void show() {
        System.out.println(name + "," + age);
    }

}
package JavaStudyDay10;

public class ParentTest {
    public static void main(String[] args) {
        //定义对象
        Parent p1 = new Parent();
        //使用get方法赋值
        p1.setName("李YM");
        p1.setAge(46);
        p1.show();
        System.out.println(p1.getName()+"- - -"+p1.getAge());
        //使用构造方法赋值
        Parent p2 = new Parent("李TL",50);
        p2.show();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值