一、实现类的抽象
在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中,对象的赋值是通过引用传递的。