成员变量和局部变量
局部变量:
定义:在方法内定义的变量称为局部变量
作用域:从变量定义开始到方法结束
注意;
1、局部变量只能在当前方法中使用,其他地方都不能使用
2、局部变量如果没有使用,只是定义的话,不会报错,但是如果有引用,那么必须
先进行初始化才能使用
3、局部变量没有默认值,所以在使用之前必须先进行初始化
成员变量(全局变量)
定义:在类内,方法之外定义的变量称为成员变量
作用域:整个类体都可以访问
注意:成员变量有默认值,系统会根据变量的数据类型给默认值
int —>0 boolean —>false String—>null
public class VarDemo {
//属性(成员变量)
int age = 18;
String name;
//定义一个方法
public void able(){
//局部变量
String name = "孙悟空";
System.out.println(name);
//可以在方法中打印出类中定义的成员变量
System.out.println(age);
}
public void test(){
System.out.println(age);
age = 20;
System.out.println(age);
//注意这里的int age = 25;为局部变量;上面的两个age是成员变量
int age = 25;
System.out.println(age);
}
public static void main(String[] args){
//创建对象
VarDemo var = new VarDemo();
var.able();
//无法从静态上下文中引用非静态的变量age
//System.out.println(age);错误
System.out.println(var.age);
var.test();
System.out.println(var.age);
}
}
区别 | 成员变量 | 局部变量 |
位置不同 | 再类中方法外 | 方法内或者方法声明上 |
内存中位置不同 | 在堆内存 | 在栈内存 |
作用域不同 | 整个类体都可以访问 | 从变量的定义开始到此方法结束 |
生命周期不同 | 随着对象存在而存在,随着对象消失而消失 | 随着方法的调用而存在,随着方法调用完毕而消失 |
初始化值不同 | 有默认的初始化值:根据数据类型的默认值默认的给初始化值 (int默认值为0,boolean默认值为false,String(引用类型)默认值为null) | 没有默认的初始化值,必须先定义、赋值 才能够使用 |
构造方法:
在创建对象的时候默认的会调用构造方法,在堆中进行存储,主要目的是为了对成员变量进行初始化操作
语法:
修饰符:有4个(public、protected、[default]、private)
返回值:构造方法没有返回值
方法名:构造方法的的名称必须和类名保持一致
参数列表:和普通方法一样
方法体:主要是为成员变量进行初始化操作
注意:
1、当程序中没有显示的声明一个构造方法的时候,系统会给你一个默认的不带任何参数的
空构造方法来供你创建对象使用
2、当你在程序中显示的声明了一个非空的构造方法,那么java编译器就不会再给你那个空参
的构造方法了,但是这时候你又想用空参的构造方法,那么只有再定义一个构造方法了
3、一个类中可以有多个构造方法
重载(overload):在一个类中可以有多个同名的方法,但是要求方法的参数列表不同
三方面的不同:
1、参数个数不同
2、参数类型不同
3、参数顺序不同
注意:
一般都需要使用构造方法的重载,因为成员变量可能会有很多个,但是我们只需要对部分成员变量进行初始化操作