qq_Anythingispo_0
2018-05-20 16:33
用static修饰的变量,和普通成员变量有什么区别,难道成员变量不是属于整个类的么,之前为什么说成员变量和局部变量的时候,说成员变量的作用范围是从类开始到结束。
你联系一下后面章节的静态初始化,一般用【new 类名 】来创建对象时,会执行一个初始化块,前面构造方法也说了,没有构造方法时系统自动创建构造方法对成员变量初始化,而带了static的会优先初始化。貌似还有节约内存的好处,具体不清楚。自己的理解,有错误欢迎指出。
static修饰的变量可以被所有方法访问,但是静态方法只能访问静态变量,不能访问普通成员变量。类的成员变量在整个类都有效,局部变量只在局部的方法中有效,你就看变量在哪个大括号范围就可以判断,比如:
public class HelloWorld
{
int a=10;
static int b=20;
public static void say1()
{
int c=30;
//System.out.println(a);//这里不能访问a,因为静态方法不能访问非静态变量a。
System.out.println(b);//这里可以访问b,静态方法可以访问静态变量b。
System.out.println(c);//这里可以访问c,变量c只在say1( )方法内有效
//say1( )是静态方法,只能访问静态变量,所有不能访问静态变量b,但是可以访问非静态变量c,因为c是非静态方法say1( )的内部变量,也就是局部变量。
}
public void say2()
{
System.out.println(a);//可以访问a,变量a在整个HelloWorld类中有效,是成员变量也叫全局变量。System.out.println(b);//可以访问a,变量b在整个HelloWorld类中有效,是成员变量也叫全局变量。
//System.out.println(c);//这里不能访问c,因为c是局部变量,只在say1( )有效
//say2( )是非静态方法所有可以访问所有变量,但是不能访问变量c,因为c只能在say1( )内才有效
}
public static void main(String[] args)
{
HelloWorld poj1=new HelloWorld();
poj1.say1();
poj1.say2();
}
}
static修饰的变量可以被所有方法访问,但是静态方法只能访问静态变量,不能访问普通成员变量。类的成员变量在整个类都有效,局部变量只在局部的方法中有效,你就看变量在哪个大括号范围就可以判断,比如:
public class HelloWorld
{
int a=10;
static int b=20;
public static void say1()
{
int c=30;
//System.out.println(a);//这里不能访问a,因为静态方法不能访问非静态变量a。
System.out.println(b);//这里可以访问吧,静态方法可以访问静态变量b。
System.out.println(c);//这里可以访问c,变量c只在say1( )方法内有效
}
public void say2()
{
System.out.println(a);//可以访问a,变量a在整个HelloWorld类中有效,是成员变量也叫全局变量。
System.out.println(b);//可以访问a,变量a在整个HelloWorld类中有效,是成员变量也叫全局变量。
//System.out.println(c);//这里不能访问c,因为c是局部变量,只在say1( )有效
//非静态方法可以访问所有变量
}
public static void main(String[] args)
{
HelloWorld poj1=new HelloWorld();
poj1.say1();
poj.say2();
}
}
Java入门第二季 升级版
530560 学习 · 6091 问题
相似问题