Java中代码块分为静态代码块和非静态代码块
首先来区分一下静态代码块和非静态代码块的区别(在起作用时间):
1、静态代码块类加载的时候执行;
package joon;
public class Test {
static{
System.out.println("静态代码块");
}
}
2、非静态代码块每次创建对象时执行,每创建一个对象就会执行一次;
package joon;
public class Test {
static{
System.out.println("静态代码块");
}
public static void main(String[] args) {
Test test=new Test();//因为创建的对象没有使用所以会出现警告
new Test();
}
}
public class Test {
{
System.out.println("非静态代码块");
}
static{
System.out.println("静态代码块");
}
public static void main(String[] args) {
new Test();
new Test();
}
}
运行结果是:静态代码块 非静态代码块 非静态代码块
全局变量和局部变量
全局变量(成员变量):直接在类中定义的变量。
全局变量定义后,其作用域是其所在的整个类,成员变量的定义没有先后顺序。
局部变量:局部变量定义在代码块 方法体 方法参数列表,局部变量没有默认值,所以使用之前需要赋值(初始化)。
局部变量的作用范围:从定义的位置开始到所在的语句块结束。
如果局部变量的名字与全局变量的名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。 如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量。
package joon;
public class Test {
int score;
int height;
char letter;
boolean flag;
double light;
static{
System.out.println("静态代码块");
}
{
System.out.println("非静态代码块");
System.out.println(height);
System.out.println(letter);
System.out.println(flag);
System.out.println(light);
}
{
if(true) {
int score1=100;
System.out.println(score1);
}
double score=90;
System.out.println(score);
System.out.println(this.score);
}
}
声明局部变量时,数据类型前除final外不允许有其他关键字,即其定义格式为: [final] 数据类型 变量名 = 初始值;
局部变量不能使用访问控制符修饰,因为局部变量的作用范围已经限定,局部变量不能用static修饰
this关键字不能用在静态代码块或者静态方法中,由于非静态方法只能用对象调用,而静态方法还可以用类名调用,类名不是对象,所以this不能用在静态方法中