变量
变量分类
在程序中,根据变量的有效范围,将其分为成员变量和局部变量。
成员变量
在类体中定义的变量被称为成员变量,在整个类中都是有效的。类的成员变量又可以分为静态变量和实例变量(非静态变量)。
静态变量
使用static修饰的成员变量。例如:
static int a = 1;
注1:静态变量一定是成员变量,局部变量中没有静态变量,也就是说静态变量不能再方法中声明。
注2:在其他语言中的全局变量相当于成员变量,类变量就是静态变量。
实例变量(非静态变量)
没有使用static修饰的成员变量。
局部变量
在类的方法体中定义的变量被称为局部变量,只在当前的代码块中有效。包括循环变量,参数变量。
注:参数变量还包括形式参数和实际参数。
变量的生命周期
- 静态变量:在初次访问类的时候创建,在程序结束时销毁。
- 实例变量:在初始化对象的时候创建,在销毁对象时销毁。
- 局部变量:方法执行时创建,方法执行结束时销毁。
重点:变量的默认值
静态变量:类使用时具有默认值;
实例变量:类实例化对象时具有默认值;
局部变量:没有默认值,所以局部变量必须先声明后初始化,然后才能使用
定义了一个静态变量a,实例变量b,局部变量c。直接用System.out.println()方法输出,变量a、b没有问题,而变量c的输出语句会报错,这就是因为c是局部变量,没有默认值,必须初始化之后才能使用。
常量
常量在程序中只能赋值一次。在定义常量时需要使用的关键字是final。
当常量属于“成员变量”时,必须在声明的时候设定它的值,否则会编译错误。
当常量属于“局部变量”时,可以在声明的时候直接赋值,也可以不直接赋值,但之后赋值只能赋值一次。
为什么对于成员变量必须在声明的时候赋值,而局部变量可以先声明,然后在赋值?
因为成员变量是可以有默认值的,而局部变量是没有默认值,而常量是只能被赋值一次,为了避免final成员变量被固定为默认值,所以Java设计为成员变量被final修饰时必须被赋值。
方法
方法分类
和变量不同,类中只有成员方法,没有局部方法。
成员方法可分为静态方法和实例方法(非静态方法)。
成员方法
static修饰的方法,最常用的main方法就是静态方法。
实例方法(非静态方法)
没有用static修饰的方法。
常用的特殊方法
构造方法和main方法。
构造方法
特点:
- 构造方法名和类名一致,无返回类型。
- 如果类中没有自己定义的构造方法,那么使用默认的构造方法,即无参数的构造方法;但是只要你定义了构造方法,那么只能使用自己定义的构造方法。
作用:用于实例化产生类的对象。
main方法
作用:程序启动运行的入口方法。
main方法是静态方法。
输入main方法的方式:
1、建立类的时候勾选main方法的复选框。
2、输入main,按下alt + ?的快捷键生成。
3、直接输入
public static void main(String[] args) {
}
方法重载
在一个类中的方法名相同,但是参数(个数/类型)不同。下面都是方法重载。
void fun1(int a){
}
void fun1(String a){
//和上面方法变量类型不同
}
void fun1(int a, String b){
//和上面方法变量数目不同
}
void fun1(String a, int b){
//和上面方法变量数目和类型都相同,但顺序不同。
}
变量使用和方法调用
标准格式:
- 静态变量:类名.静态变量
- 静态方法:类名.静态方法()
- 实例变量:对象.实例变量
- 实例方法:对象.实例方法()
注:对于静态变量或者方法来说,对象.静态变量或者方法()也是可以正常执行的,编辑器只会给出警告,但是并不推荐这么写。对于实例变量或者方法来说,类名.实例变量或者方法()是错误的。
简化格式:前提条件是在同一个类中
- 在实例方法中使用同一个类的成员变量或者成员方法都可以省略“.”左边的,直接使用变量名或者方法名()。
- 在静态方法中使用静态变量或者静态方法,可以省略“.”左边的,直接使用变量名。
这里涉及了两个功能修饰符——final和static,这两个关键字会在类中详细讲。