一、变量二、类变量(静态变量)三、实例变量(成员变量)四、局部变量五、实例变量与局部变量的区别六、全局变量
小编一直分不清成员变量和全局变量,认为它们是一个东西,现在跟着小编来看一看,到底一样还是不一样呢?( *-)ρ(*╯^╰)
一、变量什么是变量?在执行程序的过程中,值可以发生变化的量。
定义变量格式:数据类型 变量名=变量值
变量的分类(在Java中):1.类变量 2.实例变量3. 局部变量
类变量就是静态变量:在方法外类之内,用static(静态的)修饰的变量实例变量就是成员变量:在方法外类之内,但没有用static修饰的变量局部变量:方法体中的变量,方法的参数列表中的变量也是局部变量。它随着所在方法的产生而产生,使用而使用,销毁而销毁。
重点来了,,,java中没有全局变量,在C和C++中有全局变量
全局变量的概念是在C和C++中的。
在C中全局变量指在函数外部定义的变量,可为本文件所有函数共用的变量,作用域是从定义变量的位置开始,到整个文件结束及有extern声明的其它源文件
变量的访问规则:就近原则
public class we {
public static void main(String[] args) {
int num=50;
getNum(num);
}
public static void getNum(int num1){
int num=100;
System.out.println(num);
}
}
输出结果为100.
public class we {
public static void main(String[] args) {
int num=50;
e e=new e();
e.getNum(num);
}
}
class e{
int num=100;
public void getNum(int num){
System.out.println(num);
}
}
输出结果为50.
public class we {
public static void main(String[] args) {
int num=50;
e e=new e();
e.getNum(num);
}
}
class e{
int num=100;
public void getNum(int num){
System.out.println(num);
System.out.println(this.num);
}
}
输出结果为50和100.
声明格式:访问修饰符[非访问修饰符] static 数据类型 变量名; 或者
访问修饰符[非访问修饰符] static 数据类型 变量名 = 变量值;
该变量用static修饰,即在成员变量前加static,则成员变量变静态变量
存在与方法之外类之内,存在于方法区
类变量(静态变量)初始化后(声明时赋值后),它的值是不变。
类变量在所在类被加载时优先于其他变量加载,且无论该类有多少个对象,类只拥有类变量的一份copy。
随着类的加载而加载,销毁而销毁
小编根据实例变量中的实例理解的是:因为此变量在类实例化对象时可以作为对象的属性,作为对象、成员的属性所以叫做实例变量或者成员变量。小编习惯上把实例变量叫做成员变量。
声明格式:访问修饰符[非访问修饰符] 数据类型 变量名; 或者
访问修饰符[非访问修饰符] 数据类型 变量名 = 变量值;
- 在初始化对象时,每一个对象都会有相同的属性,这些属性都是由实例变量变化而来的。当一个对象被实例化之后,每个实例变量的值就跟着确定存在与堆中实例变量存在于方法之外类之内(声明位置),不用static修饰的变量实例变量在对象实例化的时候创建,在对象销毁时销毁。实例变量在声明时可以不用赋值,有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定。
声明格式:数据类型 变量名 = 变量值; 或者
数据类型 变量名; 但此方式在使用该变量前,要给该变量赋值。
- 声明在方法,语句块中。方法的参数列表中的变量也为局部变量。局部变量在栈中分配,存在于栈中局部变量在声明时,必须赋一个初始值,才可以使用。随着所在方法 语句块的调用而调用,销毁而销毁。访问修饰符不能修饰局部变量
访问修饰符
| 同类 | 同包 | 子类(不同包) | 非子类(不同包) | |
|---|---|---|---|---|
| private | ✔ | |||
| defualt | ✔ | ✔ | ||
| protected | ✔ | ✔ | ✔ | |
| public | ✔ | ✔ | ✔ | ✔ |
- 实例变量在方法、语句块之外;局部变量在方法、语句块之内实例变量在声明时可以不用赋值,局部变量在声明时或者使用前要赋值实例变量在堆内存中,局部变量在栈中。实例变量可以用访问修饰符修饰,局部变量不能实例变量是跟随与类的,局部变量是跟随与方法、语句块的。
public class we {
String name;//name为实例变量,成员变量
static int m=9; //m为类变量
//构造器
public we(String name) {//name为局部变量
double h=1.23;//h为局部变量
this.name = name;
}
public we(){
double h=1.23;//h为局部变量
}
//代码块、语句块
{
double h=1.23;//h为局部变量
}
static{
double h=1.23;//h为局部变量
}
public static void main(String[] args) { //主方法中的args为局部变量
double h=1.23;//h为局部变量
}
public int getJie(int n){ //n为局部变量
return 0;
}
}
六、全局变量
(简单理解)
- Java中没有全局变量这一概念。在C语言中的变量,从作用域来说分为全局变量和局部变量在函数外部定义的变量,可为本文件所有函数共用的变量称作全局变量,也称外部变量作用域是从定义变量的位置开始,到整个文件结束停止,及有extern声明的其它源文件。
其实全局变量在理解上和实例变量是一样的,但是在Java中没有全局变量这一概念,这是C语言中的概念。



