目录

  • 面向对象
  • 面向对象和面向过程
  • 类的定义:
  • 对象
  • 对象的使用
  • 局部变量和成员变量
  • 封装
  • private
  • this
  • 构造方法
  • 构造方法注意事项
  • 最后


面向对象

面向对象和面向过程

例如:我们拿洗衣服作为一个例子

面向过程:

将洗衣机打开,把衣服丢进去加上洗衣粉洗衣液,接着关上洗衣机,最后启动洗衣机。

面向对象:

拿到洗衣机这个对象,然后洗衣机有洗衣服这个功能,直接调用洗衣功能,结束。

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

类包括属性和行为

属性:例如人的属性有年龄,姓名,家庭住址等

行为:例如人有学习,工作,睡觉等行为

类是对象的描述,对象是类的实体。

类的定义:

public class 类名{
//成员变量
数据类型 变量名;

//成员方法
...

}

对象

对象就是我们现实生活中能看得见摸得着真实存在的。

对象的使用

创建对象:

类名 对象名 = new 类名();

使用对象:

对象名.成员变量

对象名.成员方法

public class Student {
    String name;
    int age;
    public void study(){
        System.out.println("学习中");
    }
}
public static void main(String[] args) {
        Student s = new Student();
        String name = s.name;
        System.out.println(name);
        s.study();
    }

局部变量和成员变量

局部变量:

在方法中的变量

成员变量:

在类中方法外的变量

区别

成员变量

局部变量

类中位置不同

类中方法外

方法中

内存中位置不同

堆中

栈中

生命周期不同

随对象的存在而存在,随类的消失而消失

随方法的调用而存在,随方法调用完毕而消失

初始化不同

有默认初始值

没有默认初始值,必须先定义、赋值再使用

封装

封装:隐藏实现细节,仅对外暴露公共的访问方式

private

private是访问修饰符

可以用来修饰成员变量和成员方法

被private修饰的成员只能在本类中访问

public class Student {
    String name;
    int age;
    public void study(){
        System.out.println("学习中");
    }
}
public static void main(String[] args) {
        Student s = new Student();
        s.age = -31;
        System.out.println(s.age);
    }

在这个Student类中我们可以对age进行赋值,并成功运行。

但是我们仔细一想,这个一个学生类,age是他的年龄,人的年龄不可能为负数啊,但是确赋值成功了这很不合理,所以我们不能让人随意改变我们的成员变量,所以我们为age加上private

Java面向对象举例代码 java面向对象例子_Java面向对象举例代码

我们继续进行分析:

我们将age加上private,所以只能在本类中访问,所以在其他类中想访问age就出现了报错,赋值-31报错是我们所希望的,但是将age赋值为18也报错了,这不是我们想要的结果。

我们需要对赋的值加上一个判断,符合我们的目标才让他赋值,不符合就拦截在外面,所以我们需要一个充当保镖的东西。

public void setAge(int a){
        if(age>=0 && age<=150){
            age = a;
        }
    }

我们如上定义了一个方法,并进行了判断,使得满足条件的参数能赋值成功。那么对应的我们也还需要一个取得私有成员的方法。

public int getAge(){
        return age;
    }

Java面向对象举例代码 java面向对象例子_开发语言_02


我们终于达到了自己的目的!

总结:private也是封装的一种,暴露出指定的出口,让用户按照我们指定的方法执行。

this

如果成员变量和局部变量名字重叠了,会采用就近原则。

Java面向对象举例代码 java面向对象例子_构造方法_03


因为采用的是就近原则,索引输出的应该是99

Java面向对象举例代码 java面向对象例子_Java面向对象举例代码_04


那我们是希望他能拿到成员变量的,那要怎么做才能正常拿到成员变量呢?

我们利用this关键字可以达到这个效果

this只需记住一句话:

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

回到之前的代码

public void setAge(int age){
        if(age>=0 && age<=150){
            age = age;
        }
    }

我们将a改为age,这时局部变量和成员变量重名了,age = age,导致给age本身赋值。

public void setAge(int age){
        if(age>=0 && age<=150){
            this.age = age;
        }
    }

加上this,到时候谁调用这个方法,那么this就代表哪个对象,然后将对象的age赋值。

构造方法

概述:构造方法就是构建、创建对象时执行的方法。

格式:
构造方法名要与类名相同,大小写一致

没有返回值类型,void也不行

没有具体的返回值

执行时机:

创建对象的时候调用,每创建一次对象,就会执行一次构造方法
不能手动调用构造方法

构造方法注意事项

构造方法的创建:

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

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

public class People {
    int age;
    String name;
}

比如这样一个类,我们并没有具体定义一个构造方法。但是系统会给出默认的无参构造方法,我们一起来看。

首先打开People的class文件

Java面向对象举例代码 java面向对象例子_构造方法_05


因为我们看不懂class文件,所以拖入到idea中,idea会为我们进行反编译

Java面向对象举例代码 java面向对象例子_构造方法_06


我们可以看到确实是有默认的无参构造方法。

构造方法的重载:

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

推荐的使用方式:

无论是否使用,都手动书写无参数构造方法,和带参数构造方法
标准:

public class People {
    private int age;
    private String name;
    public People() {
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public People(String name , int age) {
        this.name = name;
        this.age = age;
    }
}

Java面向对象举例代码 java面向对象例子_成员变量_07

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我基本都会认真查看。