Java语言-面向对象(上)

Java语言–面向对象

1. 什么是面向对象

拿洗衣服来举例, 传统方式注重的是洗衣服的过程,需要拿盆子->放水->放衣服->放洗衣粉->手搓->换水->手搓->拧干->晾衣服,少一个环节都不行,如果按照这种方式来写代码,将来扩展或者维护代码都比较麻烦,这种就是面向过程的编程.
现在洗衣服可以分成四个对象,人, 衣服, 洗衣机, 洗衣粉,洗衣服的过程就是人将衣服放入洗衣机, 倒入洗衣粉, 启动洗衣机, 洗衣机完成洗衣并甩干, 郑国过程就是人, 衣服, 洗衣机, 洗衣粉四个对象之间进行交互的,人不需要关注洗衣机是如何洗衣服的, 怎么甩干的,这种就是以面向对象的思想来处理问题, 在Java中借助面向对象思想来处理问题,首先就需要用类来描述对象.

2. 类和对象

什么是类, 对象呢?
类和对象就是对现实事物的抽象, 所谓抽象就是将具体的事物简单化, 所展示的信息量较少, 细节也较少. 需要根据实际的场景来决定, 提取哪些信息在代码中表示.

2.1 类和对象的区别

如果将对象比喻成一个一个具体的房子,那么类就是用来盖房子的图纸, 类就是用来构造对象的模板, 构造出来的对象彼此之间有一定的关联关系.
类是自定义类型(高配结构体); 对象就是自定义类型创建出来的变量

2.2 类定义的格式

一个 .java 文件中允许有多个类,其中只能有一个用 public 修饰的类,这个类名必须和文件名相同,但多数情况下一个文件中只有一个类
类里面包含属性和方法, 就相当于把现实事物中的 属性 和 行为 结合到一起了,一个类中包含那些属性和方法需要根据实际场景确定,对于一个对象的字段如果没有显式设置初始值,会被设置一个默认的初始值

package Java_0906;

//一个 .java文件中允许有多个类
//其中只能有一个用public修饰的类
//这个类名字必须和文件名相同
public class Person {
    // 属性/成员变量/字段
    // 直接写到类里面的变量就是"成员变量"
    // 写到方法里面的变量就是"局部变量"
    // public 也可以放到成员变量之前
    String name;
    int age;
    String gender;

    // 方法/成员函数
    public void eat(String  food){
        System.out.println(name + "正在吃" + food);
    }
}

每个属性可以有四种修饰方式: public, private, protected, default

3. 类的实例化

只有一个类还不够, 需要根据这个类创建出一些具体的对象来,这个操作称为"实例化", 对象等价于"实例"
实例化:

        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = new Person();

当创建好对象之后, 最核心的操作就是访问成员,可以使访问成员属性, 也可以是访问成员方法
相同名字的类不能存在于同一个包中,但是可以在不同的包中(包就相当于目录)
当文件名和public class 修饰的类名字不一样时会报错,如果要修改类名就用 shift + F6 (重构功能)将类名和文件名一起修改

4. 对象的初始化和构造方法

4.1 对象的初始化

写代码时,创建变量的时候最好进行初始化,Java中对于对象的初始化方式有很多种

  1. 默认值
    写一段代码验证一下各种类型的数据默认初始化的值是多少
public class DefaultValue {
    public int a;
    public long b;
    public double c;
    public boolean d;
    public char e;
    public String f;
    public int[] g;

}
 DefaultValue defaultValue = new DefaultValue();
        System.out.println(defaultValue.a);//0
        System.out.println(defaultValue.b);//0
        System.out.println(defaultValue.c);//0.0
        System.out.println(defaultValue.d);//false
        System.out.println(defaultValue.e);//
        System.out.println(defaultValue.f);//null
        System.out.println(defaultValue.g);//null

对于数字来说初始值都是0; 对于 boolean 来说初始值是 false ; 对于引用类型来说初始值是 null
2. 就地初始化

 public int a = 0;
    public long b = 1000;
    public double c = 10.0;
    public boolean d = true;
    public char e = 'a';
    public String f = "hello";
    public int[] g = {1, 2, 3, 4};

  1. 代码块初始化
//大括号就是代码块
    //大括号中的代码就会在 new 对象的时候自动执行
    {
        a = 1000;
        b = 2000;
    }
  1. 构造方法初始化
    构造方法是一种特殊的方法
  1. 构造方法的方法名是固定的, 必须和类名相同
  2. 构造方法不需要 return 语句,但是可以理解成返回了该对象的引用
  3. 构造方法不需要显式调用, 而是在 new 的时候自动被调用
  4. 构造方法也支持重载,重载规则和普通的方法一样
public class Cat {
    public String name;
    public String gender;
    public int age;
    public String breed;
    public String color;

    public Cat(){
        name = "一月";
        gender = "公猫";
        age = 1;
        breed = "中华田园猫";
        color = "橘色";
    }
}
  public Cat(String name){
        // 如果形参和成员变量名字相同
        // 就需要在成员变量前面加上this关键字
        // this 相当于"我"
        this.name = name;
    }

this的用法:

  1. this 指向当前对象的引用
  2. this 的类型就是当前这个类的类型
  3. this 这个引用的指向不能修改
  4. this也可以用来调用方法
  5. this 不能是 null
    利用构造方法重载, 可以根据自己的需求对成员变量进行初始化
        System.out.println("请输入猫咪的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        Cat cat = new Cat(name);
        System.out.println(cat.name);

构造方法和代码块谁先执行呢?
在构造方法前面加一个代码块试试

  public String color;

    {
        System.out.println("这是代码块");
        name = "二月";
    }

    public Cat(){
        System.out.println("这是构造方法");
        name = "一月";
        gender = "公猫";
        age = 1;
        breed = "中华田园猫";
        color = "橘色";
    }

最后让输出 cat 的名字, 输出结果是:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值