Loading

[JavaⅠ]2.1面向对象——类、对象、成员变量、局部变量、static

类与对象

一、面向对象思想概述

  1. 概述

    ​ Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
    ​ 区别:
    面向过程:强调步骤。
    面向对象:强调对象。

  2. 特点

    ​ 面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。 面向对象的语言中,包含了三大基本特征,即封装、继承和多态

二、类和对象

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

    属性:就是该事物的状态信息。
    行为:就是该事物能够做什么。

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

  2. 对象

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

    举例:一只小猫。
    属性:tom、5 kg、2 years、yellow。
    行为:溜墙根走、蹦跶的跑、喵喵叫。

  3. 类与对象的关系

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

三、类的定义

  • 事物与类的对比

    现实世界的一类事物:
    属性:事物的状态信息。 行为:事物能够做什么。

    Java中用class描述事物也是如此:
    成员变量:对应事物的属性成员方法:对应事物的行为

  • 类的定义格式

    public class ClassName {
        //成员变量 
        //成员方法 
    }
    

四、对象的使用

  • 对象的使用格式

    创建对象:

    类名 对象名 = new 类名();
    
  • 使用对象访问类中的成员:

    对象名.成员变量;
    对象名.成员方法();
    

代码

public class Student {

    //成员变量
    String name;
    int age;

    //成员方法(不需要写static关键字)
    public void eat() {
        System.out.println("吃饭");
    }
    public void sleep() {
        System.out.println("睡觉");
    }
}
public class DemoClass {

    public static void main(String[] arges) {

        Student stu = new Student();

        stu.name = "masahiko";
        stu.age = 20;

        System.out.println("student name:" + stu.name);
        System.out.println("student age:" + stu.age);

        stu.eat();
        stu.sleep();
    }
}

五、 成员变量和局部变量

  • 成员变量和局部变量的区别
成员变量 局部变量
内存中的位置 堆内存 栈内存
在类中的位置 类中,方法外 方法中或者方法声明上(形式参数)
作用范围 类中 方法中
初始化值 有默认值 没有默认值
生命周期 随着对象的创建而存在
随着对象的消失而消失
随着方法的调用而存在
随着方法的调用完毕而消失
  • 成员变量的默认值
数据类型 默认值
基本类型 整数(byte,short,int,long) 0
浮点数(float,double) 0.0
字符(char) '\u0000'
布尔(boolean) false
引用类型 数组,类,接口 null

六、static关键字

​ 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的。也就是说,既然属于类,就可以不靠创建对象来调用

1. 定义和使用格式

类变量

​ 当 static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。

  • 定义格式:
static 数据类型 变量名; 

静态方法

​ 当 static 修饰成员方法时,该方法叫类方法 ,习惯称为静态方法

  • 定义格式

    修饰符 static 返回值类型 方法名 (参数列表){
        // 执行语句 
    }
    

    注意事项:

    1. 静态方法可以直接访问类变量和静态方法。
    2. 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。
    3. 静态方法中,不能使用this关键字。

静态方法只能访问静态成员。

  • 调用格式

    ​ 被static修饰的成员可以并且建议通过类名直接访问。虽然也可以通过对象名访问静态成员,原因即多个对象均属

    于一个类,共享使用同一个静态成员,但是不建议,会出现警告信息。

    // 访问类变量
    类名.类变量名;
    // 调用静态方法 
    类名.静态方法名(参数);
    

static 修饰的内容:

  1. 是随着类的加载而加载的,且只加载一次。
  2. 存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。
  3. 它优先于对象存在,所以,可以被所有对象共享。

2. 静态代码块

静态代码块:定义在成员位置,使用static修饰的代码块{ }。

  • 位置:类中方法外。

  • 执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。

  • 格式:

    public class ClassName{ 
        static { 
            // 执行语句 
        } 
    } 
    

​ static 关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况 下,去调用方法。

代码

public class Student {
    private String name;
    private int age;
    //学生的id
    private int sid;
    // 类变量,记录学生数量,分配学号
    public static int numberOfStudent = 0;

    public Student(String name, int age){
        this.name = name;
        this.age = age;
        // 通过 numberOfStudent 给学生分配学号
        this.sid = ++numberOfStudent;
    }
    // 打印属性值
    public void show() {
        System.out.println("Student : name=" + name + ", age=" + age + ", sid=" + sid );
    }
    public static void showNum() {
        System.out.println("num:" + numberOfStudent);
    }
}
public class Demo01 {
    public static void main(String[] args) {

        Student s1 = new Student("Masahiko", 23);
        s1.show();

        // 访问类变量
        System.out.println(Student.numberOfStudent);
        // 调用静态方法
        Student.showNum();
    }
}

参考资料:

​ 《Java核心技术 卷I 》Cay S. Horseman
​ 《Java教程零基础入门到精通IDEA版》黑马程序员

posted @ 2021-07-17 14:40  Masahiko  阅读(238)  评论(0)    收藏  举报