变量在程序中使用的范围不同--作用域(Scope),也就是变量的有效范围,变量的作用域取决于变量的访问性。
根据变量定义的位置(或者说变量作用域的范围)可以分为两大类:
·局部变量
·全局变量
局部变量:定义在函数或者代码块(也称为复合语句:{})内的变量称为局部变量(Local Variable),它的作用域仅限于函数和代码块内,在外部是无效的,外部使用会报错。
特点:
1.没有修饰符
2.使用前必须初始化,没有默认值
3.作用域只限于对应的函数,一旦函数执行完毕,变量就消亡
4.同一个作用域的变量是唯一的,不允许重名。不同的作用域允许变量重名:它们属于不同的变量,分配不同的内存单元,互不干扰。
注意:形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
package com.lemon.java6.day4.section1;
public class Var {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*变量
*
* ·根据定义的位置不同(或者说变量作用域的范围)
* --全局变量
* --局部变量
*/
/*
* 局部变量特点:
* 没有修饰符
* 使用前必须初始化
* 作用域只限于对应的函数,一旦函数执行完,变量就消亡
* 同一个作用域范围的局部变量是唯一的,不能重名
*/
Var.sumFun(2, 2); //执行函数
//--2、代码块:{}作用域从定义到代码块结束
{
int b =23;
System.out.println("代码块的变量:b="+b);
}
// System.out.println(b);//外部访问不到
Var.paraFun(3, 4); //执行函数
}
//--3、方法的形式参数:定义方法时定义的变量,作用域是整个方法内,无需显示初始化
static int paraFun(int a,int b) {
int sum = 0;
sum = a+b;
return sum;
}
//--1、方法内:作用域是定义处到结束处
static void sumFun(int a ,int b) {
System.out.println("方法内:sum="+(a+b));
}
}
全局变量:在类范围内定义的变量(在所有函数外部定义的变量)(Global Variable),它的作用域默认为是真个程序,也就是整个源程序,它的作用域是从声明开始吗,到程序结束。
特点:
1.可以添加修饰符:public、protected、private、static、final等
2.可以不进行初始化,因为全局变量有默认值,也就是缺省值。
3.全局变量必须定义在所有函数之外。
4.在同一源文件中,允许全局和局部变量重名,在局部变量的作用域内,同名的全局变量不起作用。
package com.lemon.java6.day4.section1;
public class GlobalVar {
/**
* 全局变量:在类范围内定义的变量
* 特点:
* 可以有修饰符:public、private、protected、final、static
* 可以不用初始化,会有缺省值
* 定义在函数外部
* 同作用范围内,变量不能重名
* 不同的作用域,变量能重名(为了提高代码的可读性,尽量不要重名)
*/
/**
* 变量命名规范:
* 小写字母开头,驼峰方式
* 不能与关键字、标志符重名
* 以
*/
static int age;//全局变量
static String name;//全局变量
static int[] a;//全局变量
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(age);
System.out.println(name);
System.out.println(a[0]);//会出现空指针异常,因为没有指向
}
public static void myFun() {
}
public void myFun2() {
System.out.println(age);
System.out.println(name);
}
}
注意:
public class Fun {
public static void main(String[] args) {
int aInt = 20;
int bInt = 30;
//创建一个方法,需要两个参数(整型),返回值为两个数的和
int sum = add(aInt, bInt);//此时的aInt和bInt都是实参,传参的过程其实也就是传值的过程
System.out.println(sum);
}
static int add(int aInt1,int bInt1) {//aInt1和bInt1都是形参
int sum1;
sum1 = aInt1 + bInt1;
return sum1;
//return (aInt1+bInt1);//匿名变量
}