文章目录
- 成员变量
- 局部变量
- 成员变量与局部变量的区别
- 方法
- 方法的作用
- 方法的声明
成员变量
Java中的成员变量是指
类中声明的变量
,也称为实例变量或属性。它们与方法一样属于类的成员,不同之处在于,它们存储在对象(堆)中而不是栈中,并且每个对象都有自己的一组值。
成员变量可以用来描述一个对象的状态,例如人的年龄、学生的姓名等。它们可以具有public、private、protected和默认(即没有修饰符)四种访问权限。
在Java中,如果没有显式地初始化成员变量,则它们将自动地初始化为其类型的默认值,如int类型变量默认值为0,引用类型变量默认值为null。
public class Person {
public String name; //public访问权限
private int age; //private访问权限
//构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//成员方法
public void sayHello() {
System.out.println("My name is " + name + ", I'm " + age + " years old.");
}
}
局部变量
Java中的局部变量是声明在
代码块
(比如方法、循环、分支语句等)内部的变量,它们只能在声明它们的代码块内使用。与成员变量不同的是,局部变量不属于对象,而是存储在栈中。
局部变量必须在使用之前进行初始化,否则编译器会报错。一般情况下,在代码块内部第一次赋值即可。
public void sayHello() {
String name = "Tom"; //局部变量,必须初始化
int age; //定义局部变量
System.out.println("My name is " + name);
if (someCondition) {
age = 20; //给局部变量赋值
} else {
age = 30; //给局部变量赋值
}
System.out.println("I'm " + age + " years old.");
}
成员变量与局部变量的区别
成员变量和局部变量都是用于存储数据的变量,但它们有一些关键的区别
-
作用域
:成员变量属于类,因此它们的作用域是整个类
。而局部变量只存在于方法
、循环
或代码块
中,并且只能在其声明的范围内访问。 -
生命周期
:成员变量的生命周期与对象的生命周期相同。也就是说,只要对象存在,成员变量就一直存在。而局部变量只在其声明的代码块内存在,在该代码块执行完毕后就会消失。 -
可见性
:成员变量可以有不同的可见性修饰符(public、protected、private等),这些修饰符控制着成员变量对其他类和对象的可见性。而局部变量只能在其所在的代码块内部访问。 -
默认值
:当声明成员变量时,如果没有显式地对其进行初始化,则会赋予默认值(例如,整数类型的成员变量默认值为0)。而声明局部变量时,必须显式地进行初始化,否则编译器会报错。 -
存储位置
:成员变量存储在堆内存中,而局部变量存储在栈内存中。
方法
方法(Method)是一种执行特定任务的
代码块
。它们是定义在类中的函数,可以被其他部分调用。Java中的方法包括两个主要组件:方法头
和方法体
。方法头指定了方法的名称、参数和返回值类型。方法体是一个代码块,包含了要执行的具体操作。
方法的作用
方法在Java中具有以下主要作用:
-
提高代码的可读性和复用性
方法可以将代码划分为更小、更具可读性的模块。这不仅使代码易于阅读和理解,也使代码易于维护和修改。此外,方法还可以被多次调用以完成相同或类似的任务,提高了代码的复用性。 -
封装和隐藏实现细节
方法可以将代码逻辑封装在一起,隐藏实现细节。这样,其他部分只需要知道如何调用该方法,而不需要关心方法内部的实现细节。 -
实现程序的模块化设计
Java中的方法可以根据功能进行划分,实现程序的模块化设计。每个方法可以专注于实现某个具体的功能,使整个程序结构清晰明了。 -
支持多态性
Java中的方法支持多态性,即相同的方法名可以被不同的类实现,并且能够根据运行时对象的类型自动选择正确的方法。这种特性是面向对象编程的重要特点之一。
方法的声明
Java中的方法声明主要包括以下部分:
-
访问修饰符
访问修饰符用于控制方法的可见性,包括public、private、protected和默认(不写任何访问修饰符)四种。 -
返回值类型
返回值类型指定了方法返回的数据类型。如果方法不返回任何值,则返回类型为void。 -
方法名
方法名是方法的标识符,用于在程序中调用该方法。 -
参数列表
参数列表指定了方法接受的参数类型和参数名称。如果方法不需要任何参数,则参数列表为空。 -
方法体
方法体是一段由花括号包裹的代码块,包含了要执行的具体操作。
Student类
package atuigu03.field_method;
public class Student {
// 定义学生类,包含姓名、年龄和成绩三个属性
private String name;
private int age;
private double score;
// 构造方法,初始化学生对象
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
// 获取学生姓名
public String getName() {
return name;
}
// 设置学生姓名
public void setName(String name) {
this.name = name;
}
// 获取学生年龄
public int getAge() {
return age;
}
// 设置学生年龄
public void setAge(int age) {
this.age = age;
}
// 获取学生成绩
public double getScore() {
return score;
}
// 设置学生成绩
public void setScore(double score) {
this.score = score;
}
// 打印学生信息
public void printInfo() {
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Score: " + score);
}
public void specialty(String name, String time, String Specialty) {
System.out.println("姓名:" + name);
System.out.println("练习时长:" + time);
System.out.println("特长:" + Specialty);
}
}
调用
package atuigu03.field_method;
public class StudentTest {
public static void main(String[] args) {
// 创建学生对象并初始化
Student s1 = new Student("蔡徐坤", 30, 99.0);
// 调用对象的方法
System.out.println("set前:");
s1.printInfo();
s1.setScore(66.0);
s1.setAge(35);
System.out.println("set后:");
s1.printInfo();
s1.specialty("蔡徐坤", "2.5年", "唱跳rap篮球");
}
}