类与对象的关系
在面向对象中类和对象是最基本、最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象。对象是表示一个个具体的东西。
例子:
设计汽车首先需要设计图,之后按照设计图来生产汽车。那么设计图就可以称为一个类,生产的汽车就是对象。所以先有类在有对象。
类的定义
类是由属性和方法组成的。属性中定义类需要一个个的具体信息,实际上一个属性就是一个变量,而方法是一些操作的行为。类的定义语法如下:
class 类名称 {
数据类型 属性;
........................
void 方法名称() {
...................
}
}
package qita;
public class Dog { // 创建类
String breed; // 声明属性
int age; // 声明属性
String color; // 声明属性
void barking() { // 方法
}
void sleeping() {
}
}
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
一个类可以拥有多个方法,在上面的例子中:barking()、sleeping()都是Dog类的方法。
对象的创建及使用
对象是根据类创建的。在Java中,使用
当创建好Dog类之后,使用这个类,则需要通过对象,下面给出了对象的语法格式:
类名 对象名称 = null; // 声明对象
对象名称 = new 类名(); // 实例化对象,只要关键字new就表示开辟新的堆内存空间
以上格式的对象产生分为声明对象与实例化对象两步。当然也可以直接通过以下的方式一步完成。
类名 对象名称 = new 类名();
package qita;
public class Dog { // 创建类
String breed; // 声明属性
int age; // 声明属性
String color; // 声明属性
public static void main(String[] args) {
Dog dog = new Dog(); // 创建并实例化对象
}
void barking() { // 方法
}
void sleeping() {
}
}
如果要使用对象访问类中的某个属性或方法可以使用如下的语法实现:
访问属性:对象名称.属性名
访问方法:对象名称.方法名()
package qita;
public class Dog { // 创建类
String breed; // 声明属性
int age; // 声明属性
String color; // 声明属性
public static void main(String[] args) {
Dog dog = new Dog(); // 创建并实例化对象
dog.age = 10;
dog.color = "blue";
dog.sleeping();
}
void barking() { // 方法
}
void sleeping() {
System.out.println("年龄:" + age + "颜色:" + color);
}
}
注意:对象使用前必须实例化。
创建多个对象
在开发中,每一个类都可以产生多个实例化对象,只要在实例化都西昂是使用了关键字NEW,那么就表示开辟新的堆内存空间,而每一个实例化对象都将会占据自减的堆、栈内存空间。
package qita;
public class ClassDemo {
public static void main(String[] args) {
Person per1 = new Person();
Person per2 = new Person();
per1.name = "张三";
per2.name = "李四";
per1.age = 25;
per2.age = 20;
per1.tell();
per2.tell();
}
}
class Person {
String name; // 声明姓名属性
int age; // 声明年龄属性
void tell() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
对象引用传递
package qita;
public class ClassDemo {
public static void main(String[] args) {
Person per1 = new Person();
// Person per2 = new Person();
Person per2 = per1;
per1.name = "张三";
per2.name = "李四";
per1.age = 25;
per2.age = 20;
per1.tell();
per2.tell();
}
}
class Person {
String name; // 声明姓名属性
int age; // 声明年龄属性
void tell() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}