Java基础知识Day07--类与对象

Day07

1.1 类与对象

1.类:是一组相关属性行为**的集合,可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。

  • 属性:就是该事物的状态信息。

  • 行为:就是该事物能够做什么。

举例:小猫。

属性:名字、体重、年龄、颜色。 行为:走、跑、叫。

2.对象:是一类事物的具体体现。对象是类的一个实例**,必须具备该类事物的属性和行为。

举例:一只小猫。

属性:小花、5kg、2 岁、橘猫。 行为:踩奶、撒娇、喵喵叫。

3.类与对象的关系

  • 类是对一类事物的描述,是抽象的。
  • 对象是一类事物的实例,是具体的
  • 类是对象的模板,对象是类的实体

1.2 类的定义

1.类的组成

成员变量:对应事物的属性。

成员方法:对应事物的行为。

2.类的定义格式

public class Student {
    //成员变量
    //成员方法
}
  • 定义类:定义类的成员,包括成员变量和成员方法。
  • 成员变量:同变量的定义,只是位置在类中,方法外
  • 成员方法:同方法的定义,只是要把static去掉

例如:定义一个学生类

public class Student {
    /**成员变量
     * 姓名
     * 年龄*/
    String name;
    int age;
    /**成员方法
     * 吃饭 public void eat(){}
     * 睡觉 public void sleep(){}
     * 学习 public void study(){}*/
    public void eat() {
        System.out.println("吃饭饭");
    }
    public void sleep() {
        System.out.println("睡觉觉");
    }
    public void study() {
        System.out.println("学习");
    }

1.3对象的创建

1.导包:也就是指出需要使用的类在什么位置。

  • 格式:import 包名称.类名称;

    例如:import nuc.edu.ss.day06.demo01.Student

  • 对于和当前类属于同一个包的情况,可以省略导包语句不写。

2.创建对象:

  • 格式:类名称 对象名 = new 类名称();

    例如:Student stu = new Studenr();

3.使用对象:

  • 使用成员变量:对象名.成员变量名;

    注意:如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。

  • 使用成员方法:对象名.成员方法名(参数);

想用谁就用对象名点谁。

1.4对象内存图

1.一个对象的内存图:

在这里插入图片描述

2.两个对象使用同一个方法的内存图:

在这里插入图片描述

3.两个引用指向同一个对象的内存图:

在这里插入图片描述

1.5 使用对象类型作为方法的参数

  • 当一个对象作为参数,传递到方法当中时,实际传递进去的是对象的地址值。
    在这里插入图片描述

1.6使用对象类型作为方法的返回值

返回值其实就是对象的地址值。
在这里插入图片描述

1.7 局部变量和成员变量

public class Demo01Car {
    String color;//成员变量
    public void drive() {
        double speed;//局部变量
    }
}

1.定义的位置不一样

  • 局部变量:在方法的内部。
  • 成员变量:在方法的外部,直接写在类当中。

2.作用范围不一样

  • 局部变量:只有方法当中才可以使用,出了方法就不能再用。
  • 成员变量:整个类都可以通用。

3.默认值不一样

  • 局部变量:没有默认值,如果要想使用,必须手动进行赋值。
  • 成员变量:如果没有赋值,会有默认值,规则和数组一样。

4.内存的位置不一样

  • 局部变量:位于栈内存。
  • 成员变量:位于堆内存。

5.生命周期不一样

  • 局部变量:随着方法进栈而诞生,随着方法出栈而消失。
  • 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。

1.8面向对象的三大特征之封装性

1.封装

封装就是将一些细节信息隐藏起来,对于外界不可见。

  • 方法就是一种封装。

  • 关键字private也是一种封装。

2.封装的步骤

  • 使用 private 关键字来修饰成员变量。

  • 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。

3.封装的操作–private关键字

(1)含义

  • private是一个权限修饰符,代表最小权限。

  • 可以修饰成员变量和成员方法。

  • 被private修饰后的成员变量和成员方法,只在本类中才能访问

(2)格式

private 数据类型 变量名;

  • 使用private修饰成员变量,代码如下:
public class Person {
    private String name;
    private int age;
}
  • 提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:
public class Person {
    private String name;
    private int age;
    public void setName(String n) { //Setter方法
        name = n;
    }
    public String getName() {  //Getter方法
        return name;
    }
    public void setAge(int a) {
        age = a;
    }
    public int getAge() {
        return age;
    }
}

注意:对于Setter来说,不能有返回值,参数类型和成员变量对应;对于Getter来说,不能有参数,返回值类型与成员变量对应。

  • 对于基本类型中的boolean值,Getter方法要写成isXxx的形式,Setter方法不变。

4.封装的优化1–this关键字

当方法的局部变量和类的成员变量重名的时候,根据就近原则,优先使用局部变量,如果需要访问本类当中的成员变量,需要使用this关键字

(1)含义:方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

(2)格式this.成员变量名

示例代码如下:

public class Person {
    private String name;//成员变量
    private String age;
    public void sayHello(String name) { //局部变量
        System.out.println(name + "说:" + this.name + "你好!");
    }
  • Tips:方法中只有一个变量名时,默认也是使用 this 修饰,可以省略不写。

5.封装的优化2–构造方法

(1)作用:当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。

  • Tips:无论你是否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。

(2)格式

修饰符 构造方法名(参数列表){
	// 方法体
}
  • 构造方法的额方法名与它所在的类名相同,它没有返回值,不需要返回值类型,也不需要void,代码示例如下:
public class Person {
    private String name;
    private int age;
    /**无参构造方法*/
    public Person() {}
    /**有参构造方法*/
    public Person(String name,int age) {
        this.name = name;
        this.age = age;
    }
}

(3)注意

  • 如果你不提供构造方法,系统会给出无参数构造方法。

  • 如果你提供了构造方法,系统将不再提供无参数构造方法。

  • 构造方法是可以重载的,既可以定义参数,也可以不定义参数。

6.定义一个标准的类

要求:

  • 所以成员变量都要使用private关键字修饰。
  • 为每一个成员变量编写一对Setter方法和Getter方法。
  • 编写一个无参数的构造方法。
  • 编写一个有参数的构造方法。

这样标准的类也叫Java Bean.

定义一个标准的学生类,代码示例如下:

public class Student {
    //成员变量
    private String name;
    private int age;
	//无参构造方法
    public Student() {
    }
	//带参构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
	//成员方法(Getter方法和Setter方法)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

测试类,代码如下:

public class Demo03Student {
    public static void main(String[] args) {
        //无参构造使用
        Student stu1 = new Student();
        stu1.setName("张三");
        stu1.setAge(18);
        System.out.println("姓名:" + stu1.getName() + ",芳龄:" + stu1.getAge());
        System.out.println("==================");
        //带参构造使用
        Student stu2 = new Student("李四",18);
        System.out.println("姓名:" + stu2.getName() + ",芳龄:" + stu2.getAge());
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值