【Java 类】002-类、属性、方法、代码块
【Java 类】002-类、属性、方法、代码块
文章目录
一、类
1、类与对象
在面向对象编程中,类(Class)是一种用户定义的数据类型,用于描述对象的属性和方法。它是面向对象编程的基本概念之一,可以看做是一种模板或蓝图,用于创建对象。
类定义了对象的属性和方法,属性表示对象的特征或状态,方法表示对象的行为或功能。在 Java 中,类是一种引用类型,它定义了一组属性和方法,并且可以通过关键字 new
创建多个对象。
2、类的作用
Java 类是面向对象编程的基本单位,它的作用包括:
- 封装数据和行为:类可以将数据和行为封装在一起,形成一个独立的模块。封装可以隐藏对象的实现细节,提高代码的可维护性和安全性。
- 继承:类可以通过继承现有类的属性和方法来扩展自己的功能。继承可以减少代码的重复,提高代码的可复用性和可维护性。
- 多态:类可以通过多态来实现同一种行为具有不同的表现形式。多态可以提高代码的灵活性和扩展性。
- 对象的创建和销毁:类是创建对象的模板,通过类可以创建多个对象。同时,类也可以定义对象的销毁方式,通过垃圾回收机制自动回收不再使用的对象。
- 数据类型扩展:Java 提供了基本数据类型,但是有时候需要使用自定义的数据类型,类可以用来定义自定义数据类型,扩展 Java数据 类型的能力。
3、创建与使用类
类结构
public class ClassName {// 类的成员变量// 类的构造方法// 类的成员方法// ...
}
创建类
package main;public class Person {// 成员变量private String name;private int age;// 在有带参的构造方法时,一个无参的构造方法是必不可少的public Person() {}// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 成员方法public void sayHello() {System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");}
}
调用类
package main;/*** @author zibo* @date 2023/3/5 12:35* @slogan 真正的大师永远怀着一颗学徒的心。——易大师*/
public class Main {public static void main(String[] args) {// 调用带参构造,创建对象Person person = new Person("zibo", 26);// 通过对象调用方法person.sayHello();}
}
运行结果
Hello, my name is zibo, I'm 26 years old.
4、Java 类的执行过程
Java 类的执行过程主要包括以下几个阶段:
- 加载(Loading):通过类加载器(ClassLoader)将类的字节码文件(.class 文件)加载到 JVM 内存中,生成一个对应的 Class 对象。
- 验证(Verification):对字节码文件进行校验,以确保符合 JVM 规范,例如是否有不合法的指令或常量池中的常量引用不存在等。
- 准备(Preparation):为类的静态变量分配内存空间,并设置默认值(0、false、null 等)。
- 解析(Resolution):将类中的符号引用转化为直接引用,例如将方法调用转化为方法实际地址的映射。
- 初始化(Initialization):对类进行初始化,包括静态变量的显式初始化和静态代码块的执行等。在初始化过程中,如果发现该类有父类,则先执行父类的初始化。
- 使用(Usage):正式使用该类,例如创建对象、调用方法等。
需要注意的是,类的加载和初始化只会执行一次,即使创建多个对象也不会重新加载和初始化。而验证、准备和解析则可能会重复执行,例如在运行时通过反射机制获取某个类的信息时就会触发验证、准备和解析过程。在类加载过程中,还会根据一定的策略将类分为不同的类加载器(ClassLoader),以方便对不同类之间的依赖关系进行管理。
5、封装、继承、多态、抽象类、内部类、接口、枚举、记录、注解等
请查看本专栏内其他相关内容。
二、属性
1、概述
类的属性也被称为类的成员变量或字段,它们用于存储对象的状态信息。
2、类型
类的属性可以是以下类型之一:
- 基本数据类型:例如 int、double、boolean 等。
- 引用类型:例如字符串、数组、自定义类等。
- 特殊类型:例如枚举类型等。
3、定义属性
package main;/*** @author zibo* @date 2023/3/7 14:53* @slogan 真正的大师永远怀着一颗学徒的心。——易大师*/
public class Person {/*** 名字*/public String name;
}
4、修改与访问属性
package main;/*** @author zibo* @date 2023/3/5 12:55* @slogan 真正的大师永远怀着一颗学徒的心。——易大师*/
public class Main {public static void main(String[] args) {// 1. 创建一个Person对象Person person = new Person();// 2. 修改 Person 对象的 name 属性person.name = "zibo";// 3. 打印 Person 对象的 name 属性System.out.println(person.name);}
}
5、成员变量和局部变量的区别
- 定义位置不同:成员变量定义在类中,而局部变量定义在方法或语句块中。
- 生命周期不同:成员变量的生命周期和对象相同,即当对象创建时,成员变量也会被创建,在对象销毁时,成员变量也会被销毁;而局部变量的生命周期只存在于方法或语句块的执行过程中,执行完后就会被销毁。
- 初始化方式不同:成员变量可以在定义时初始化,也可以在构造方法中初始化;而局部变量必须在定义时初始化,否则无法使用。
- 访问方式不同:成员变量可以通过对象访问,也可以通过类名访问(静态变量);而局部变量只能在所在的方法或语句块中使用,无法从外部访问。
- 作用域不同:成员变量的作用域是整个类,而局部变量的作用域仅限于所在的方法或语句块。
6、静态属性
请查看本专栏内其他相关内容。
三、方法
1、概述
类的方法定义了可以对对象执行的操作。方法可以看作是类的行为或功能的具体实现。
2、方法的内容
Java 类的方法可以包括以下内容:
- 方法名:方法的名称,用于在程序中调用方法。
- 参数列表:方法接受的输入参数,可以是零个或多个。
- 返回类型:方法的返回值类型,可以是任何 Java 数据类型,包括基本数据类型、对象类型和数组类型。
- 访问修饰符:控制方法在哪些位置可以被访问,包括 public、protected、private 和默认。
- 方法体:方法的具体实现代码。
3、定义方法
public class Calculator {// 将两个数字相加并返回结果public int add(int num1, int num2) {return num1 + num2;}
}
4、调用方法
System.out.println(new Calculator().add(100, 100)); // 200
5、静态方法、方法重载、方法重写
请查看本专栏内其他相关内容。
四、代码块
1、概述
Java 类中的代码块是指在类中使用大括号 {}
括起来的一段代码,它们可以是静态的或非静态的,并且可以分为多个不同类型。
- 静态代码块(Static Blocks):用
static { }
来定义,只在类加载时执行一次,且只能访问静态成员变量和方法。 - 实例初始化块(Instance Initialization Blocks):用
{ }
来定义,每次创建新实例时都会执行,且在构造函数之前执行。 - 构造代码块(Constructor Blocks):用
{ }
来定义,与构造函数一起构成了对象的构造过程,每次创建新实例时都会执行,且在构造函数之前执行。
使用代码块的好处是可以将多个方法中共同的部分提取出来,统一进行处理,从而提高代码的重用性和可维护性。比如在静态代码块中可以对静态成员变量进行初始化,或者对数据库连接进行初始化;在实例初始化块中可以对非静态成员变量进行初始化,或者执行一些必要的预处理操作;在构造代码块中可以对所有构造函数中共同的初始化操作进行封装,以避免重复代码。
2、代码块顺序
类被加载时(调用静态变量或静态方法)执行静态代码块;
第一次创建对象时:执行静态代码块——执行普通代码块——执行构造函数;
第二次及之后再创建对象时:执行普通代码块——执行构造函数。