JAVA类和对象

一、实现类的抽象

在Java中,要实现类的抽象,首先需要创建一个抽象类,然后在抽象类中定义抽象方法。接下来,创建一个继承自抽象类的子类,并实现抽象方法。以下是一个简单的示例:

1、创建一个抽象类Animal,并定义一个抽象方法makeSound():
public abstract class Animal {
    public abstract void makeSound();
}
2、创建一个继承自Animal的子类Dog,并实现makeSound()方法:
public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}
3、  在主类中测试:
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // 输出:汪汪汪
    }
}

二、类和对象的关系

java 类和对象的关系是:类是对象的模板,对象是类的实例。

  • 1、类(Class):类是一种抽象的模板,用于描述具有相同属性(成员变量)和行为(成员方法)的对象的共同特点。类定义了对象的属性和方法,但不占用内存空间。

  • 2、对象(Object):对象是类的实例,是具体存在的一个个体。对象具有类所定义的属性和方法,占用内存空间。通过实例化类,可以创建多个具有相同属性和方法的对象。

例如,定义一个表示矩形的类 Rectangle:

public class Rectangle {
    // 成员变量
    private double width;
    private double height;

    // 构造方法
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    // 成员方法
    public double getArea() {
        return width * height;
    }

    public double getPerimeter() {
        return 2 * (width + height);
    }
}
通过 Rectangle 类可以创建多个矩形对象,如:
public class Main {
    public static void main(String[] args) {
        // 创建一个矩形对象
        Rectangle rect1 = new Rectangle(3, 4);
        System.out.println("矩形1的面积:" + rect1.getArea()); // 输出:矩形1的面积:12.0
        System.out.println("矩形1的周长:" + rect1.getPerimeter()); // 输出:矩形1的周长:14.0

        // 创建另一个矩形对象
        Rectangle rect2 = new Rectangle(5, 6);
        System.out.println("矩形2的面积:" + rect2.getArea()); // 输出:矩形2的面积:30.0
        System.out.println("矩形2的周长:" + rect2.getPerimeter()); // 输出:矩形2的周长:22.0
    }
}

三、如何创建类

在Java中,创建类的基本语法如下:

public class 类名 {
    // 类的属性和方法
}

例如,创建一个名为Person的类:

public class Person {
    // 类的属性
    private String name;
    private int age;

    // 类的构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 类的方法
    public void introduce() {
        System.out.println("我的名字是" + name + ",我今年" + age + "岁。");
    }
}

四、创建和使用对象

在Java中,创建和使用对象需要遵循以下步骤:

  • 1、定义类:首先,我们需要定义一个类,该类包含属性和方法。属性表示对象的状态,方法表示对象的行为。
public class MyClass {
    // 属性
    private String name;
    private int age;

    // 构造方法
    public MyClass(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法
    public void sayHello() {
        System.out.println("你好,我叫" + name + ",我" + age + "岁了。");
    }
}
  • 2、创建对象:使用new关键字创建一个类的实例(对象)。
MyClass obj = new MyClass("张三", 25);
  • 3、使用对象:通过对象调用其方法。
obj.sayHello(); // 输出:你好,我叫张三,我25岁了。

五、成员变量的默认值

Java 成员变量的默认值取决于其数据类型。以下是一些常见的数据类型及其默认值:

  • 1、byte、short、int、long、float、double 的默认值为 0 或 0.0。
  • 2、char 的默认值为 ‘\u0000’(空字符)。
  • 3、boolean 的默认值为 false。
  • 4、引用类型的默认值为 null。

六、属性作为对象间关系

在Java中,属性可以作为对象之间的关系。例如,一个类可以拥有另一个类的实例作为其属性。这样,两个类就可以通过这个属性来表示它们之间的关系。以下是一个简单的示例:

class Person {
    String name;
    int age;
    Car car; // 假设Car是一个已经定义好的类
}

class Car {
    String brand;
    String model;
    int year;
}

在这个例子中,Person类有一个Car类型的属性car。这意味着每个Person对象都有一个与之关联的Car对象。通过这种方式,我们可以表示对象之间的关系。

七、运行时数据区

Java运行时数据区,是Java虚拟机所管理的内存划分成若干个区域,这些区域都有各自的用途,以及创建和销毁的时间。有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java运行时数据区主要包括以下几个部分:

  • 1、程序计数器(Program Counter):用于存储当前执行的字节码指令的地址。
  • 2、栈(Stack):用于存储局部变量、操作数和返回地址等信息。
  • 3、本地方法栈(Local Method Stack):用于存储局部变量、操作数和返回地址等信息,主要用于实现Java中的native方法。
  • 4、堆(Heap):用于存储对象实例。
  • 5、方法区(Method Area):用于存储类信息、常量池、静态变量等。
  • 6、直接内存(Direct Memory):用于存储大对象或数组,如文件映射、网络缓冲区等。

八、引用数据类型

在Java编程语言中,数据类型主要分为基本数据类型和引用数据类型。基本数据类型包括byte、short、int、long、float、double、char、boolean等。然而,引用数据类型则更为复杂和多样,它包括类、接口、数组、枚举、注解以及字符串等。

对于引用数据类型,变量名不是直接指向具体的数值,而是存储了数据的内存地址的引用,也可以理解为存储了数据的hash值。例如,我们声明一个Date类型的对象d=new Date(),这里的d就是一个引用,它存储了新创建的对象在内存中的地址。

值得注意的是,创建引用数据类型的变量比基本数据类型稍微复杂一些。当创建一个引用类型的变量时,首先会在栈内存中分配一块空间,然后在堆内存中也会分配一块具体的空间用来存储数据的具体信息,即存储数据的内存地址。最后,栈中的引用将指向堆中的数据地址。

九、对象的赋值

在Java中,对象的赋值是通过引用传递的。当我们将一个对象赋值给另一个变量时,实际上是将原对象的引用赋值给了新变量。这意味着,如果修改了新变量所指向的对象,原对象也会受到影响。这是因为它们都指向同一个内存地址。

class Person {
    String name;
    int age;

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

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person("张三", 25);
        Person person2 = person1; // 将person1的引用赋值给person2

        System.out.println("person1的名字:" + person1.name + ",年龄:" + person1.age);
        System.out.println("person2的名字:" + person2.name + ",年龄:" + person2.age);

        person2.name = "李四"; // 修改person2的名字
        person2.age = 30; // 修改person2的年龄

        System.out.println("修改后的person1的名字:" + person1.name + ",年龄:" + person1.age);
        System.out.println("修改后的person2的名字:" + person2.name + ",年龄:" + person2.age);
    }
}

运行结果:

person1的名字:张三,年龄:25
person2的名字:张三,年龄:25
修改后的person1的名字:李四,年龄:30
修改后的person2的名字:李四,年龄:30

从输出结果可以看出,修改person2的属性后,person1的属性也发生了相应的变化。这说明在Java中,对象的赋值是通过引用传递的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一碗油泼面

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

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

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

打赏作者

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

抵扣说明:

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

余额充值