【Java语言基础】5.4 Java面向对象基础

Java面向对象基础

1. 设计对象并使用

1.1 设计类,创建对象并使用

  • 类(设计图):是对象共同特征的描述。
  • 对象:是真实存在的具体实例。
  • 结论:在Java中,必须先设计类,才能创建对象并使用。
  • 如何设计类:
public class 类名{
	1、成员变量(代表属性,一般是名词)
	2、成员方法(代表行为,一般是动词)
	3、构造器
	4、代码块
	5、内部类
}
  • 如何得到类的对象:类名 对象名 = new 类名();
  • 如何使用对象 :
    • 访问属性:对象名.成员变量
    • 访问行为:对象名.方法名(...)
  • 创建一个汽车类Car.java
public class Car {
    /**
     * 成员变量
     */
    String name;
    double price;

    /**
     * 方法
     */
    public void start(){
        System.out.println(name + "启动了");
    }

    public void run(){
        System.out.println(name + "汽车" + "跑得很快,它的价格是" + price);
    }
}
  • 创建对象并使用。
/**
 * 目标:学会设计对象并使用
 */
public class Test1 {
    public static void main(String[] args) {
        // 创建汽车对象
        Car car = new Car();
        car.name = "奔驰";
        car.price = 42.0;
        System.out.println(car.name); // 奔驰
        System.out.println(car.price); // 42.0
        car.start(); // 奔驰启动了
        car.run(); // 奔驰汽车跑得很快,它的价格是42.0
    }
}

1.2 定义类的补充注意事项

  • 类名首字母建议大写,且有意义,满足“驼峰模式”。
  • 一个Java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。

2. 构造器

  • 构造器是定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。
  • 构造器的格式:
修饰符 类名(形参列表){
	...
}
  • 调用构造器得到对象的格式:类 变量名称 = new 构造器;
  • 构造器的分类和作用:
    • 无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。
    • 有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值。
  • 创建一个汽车类Car.java
public class Car {
    String name;
    double price;

    /**
     * 无参数构造器
     */
    public Car(){
        System.out.println("无参数构造器被调用");
    }

    /**
     * 有参数构造器
     */
    public Car(String n,double p){
        System.out.println("有参数构造器被调用");
        name = n;
        price = p;
    }
}
  • 创建对象并使用。
/**
 * 目标:认识构造器,明白两种类型构造器的作用
 */
public class Test {
    public static void main(String[] args) {
        Car c1 = new Car(); // 无参数构造器被调用
        System.out.println(c1.name); // null
        System.out.println(c1.price); // 0.0

        Car c2 = new Car("宝马",30.0); // 有参数构造器被调用
        System.out.println(c2.name); // 宝马
        System.out.println(c2.price); // 30.0
    }
}
  • 构造器的注意事项:
    • 任何类定义出来,默认就自带了无参数构造器,写不写都有。
    • 一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想用无参数构造器,此时就需要自己手写一个无参数构造器了。

3. this关键字

  • 可以出现在构造器、方法中。
  • 代表当前对象的地址。
  • this关键字的作用:
    • 可以用于指定访问当前对象的成员变量、成员方法。
  • 创建一个汽车类Car.java
public class Car {
    String name;
    double price;

    public Car(){
        System.out.println("无参数构造器中的this:" + this);
    }

    public Car(String name,double price){
        this.name = name;
        this.price = price;
    }

    public void run(){
        System.out.println("方法中的this:" + this);
    }

    public void start(){
        System.out.println(this.name + "汽车启动。");
    }
}
  • 使用this关键字
/**
 * 目标:理解this关键字的作用
 */
public class Test {
    public static void main(String[] args) {
        // 创建汽车对象
        Car car = new Car(); // 无参数构造器中的this:com.xusanmu.thisdemo.Car@
        car.run(); // 方法中的this:com.xusanmu.thisdemo.Car@

        System.out.println(car); // com.xusanmu.thisdemo.Car@

        System.out.println("============");

        Car car1 = new Car("宝马",32.5);
        System.out.println(car1.name); // 宝马
        System.out.println(car1.price); // 32.5
        car1.start(); // 宝马汽车启动。
    }
}

4. 封装

  • 面向对象的三大特征:封装、继承、多态
  • 封装:告诉我们,如何正确设计对象的属性和方法。
  • 封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
  • 一般建议对类的成员变量使用private(私有、隐藏)关键字修饰。(private修饰的成员只能在当前类中访问)
  • 为每个成员变量提供配套的public修饰的getter、setter方法暴露其取值和赋值。

5. JavaBean

  • 也可以称为实体类,其对象可以用于在程序中封装数据。
  • 标准JavaBean须满足如下书写要求:
    • 成员变量使用private修饰。
    • 提供成员变量对应的setter/getter方法
    • 必须提供一个无参构造器;有参构造器是可写可不写的
public class User {
    // 成员变量使用private修饰
    private String name;
    private double height;
    private double salary;

    // 必须提供一个无参构造器(默认提供);有参构造器是可写可不写的
    public User() {
    }

    public User(String name, double height, double salary) {
        this.name = name;
        this.height = height;
        this.salary = salary;
    }

    // 提供成员变量对应的setter/getter方法
    public String getName() {
        return name;
    }

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

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}
  • 成员变量和局部变量的区别
区别成员变量局部变量
类中位置不同类中,方法外常见于方法中
初始化值不同有默认值,无需初始化没有默认值,使用前需要完成赋值
内存位置不同堆内存栈内存
生命周期不同随着对象的创建而存在,随着对象的消失而消失随着方法的调用而存在,随着方法的运行结束而消失
作用域在所归属的大括号中
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐三木Mu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值