目 录
代码块:
1.就是被一对{}所括起来的代码
2.根据代码块定义的位置不同分为:局部代码块,构造代码块,静态代码块
局部代码块:
定义在方法中的代码块,限定变量生命周期,及早释放,提高内存利用率
public class MyTest {
public static void main(String[] args) {
//局部代码块
{
//在方法中出现
int num = 200;
System.out.println("局部代码块");
System.out.println(num); //输出200
}
//System.out.println(num); //出了代码块的范围,就不能再使用了!所以会报错!
}
}
构造代码块:
处于类中方法外.构造代码块由可称为实例代码块,可以为该类的所有对象的成员变量赋值.实际上是SUN公司给我们java程序员的一个特殊得到时刻/时机,叫做对象构建时机.
当我们创建对象时,如果构造代码块与构造方法同时存在时,那就先执行构造代码块,再执行构造方法,也就是说构造代码块优先于构造方法执行。每次创建对象,都会执行构造代码块和构造方法的!如果多个构造方法中存在相同的代码,就可以提取出来放到构造代码块中.减少了代码的复用.
public class Student {
static int num;
//构造代码块
{
System.out.println("构造代码块");
//构造代码块,可以为该类的所有对象的成员变量赋值。
num = 100;
}
//构造方法
public Student() {
System.out.println("构造方法");
}
public static void main(String[] args) { //进程入口
}
}
静态代码块:
代码块前有static关键字修饰, 随着类的加载而加载,优先于构造代码块执行。而且只执行一次。在静态代码块里面,只能访问静态修饰的。一般在静态代码块里面,做一些提前准备工作。比如我提前读取配置文件中数据等.
静态代码块这种语法机制实际上是SUN公司给我们java程序员的一个特殊得到时刻/时机,叫做类加载时机.
public class Student {
static {
System.out.println("静态代码块");
}
public static void main(String[] args) { //进程入口
}
}
而静态变量和静态代码块的执行顺序呢?
同为静态修饰,静态变量和静态代码块的执行顺序按照代码的自上而下的顺序来.谁在前面,谁就先执行!
各代码块的执行顺序:
最先执行静态代码块,然后是构造代码块,接着是构造方法,最后便是局部代码块.看个例子:
创建一个Student类:
class Student {
static {
System.out.println("Student 静态代码块");
}
{
System.out.println("Student 构造代码块");
}
public Student() {
System.out.println("Student 构造方法");
}
创建student测试类:
public class StudentTest {
static {
System.out.println("StudentTest的静态代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Student s1 = new Student();
Student s2 = new Student();
}
}
//输出结果:
/*
StudentTest的静态代码块
我是main方法
Student 静态代码块
Student 构造代码块
Student 构造方法
*/
继承关系中的代码块的执行顺序:
//测试类
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
}
}
//Fu类
class Fu {
static {
System.out.println("静态代码块Fu"); //1
}
{
System.out.println("构造代码块Fu"); //3
}
public Fu() {
System.out.println("构造方法Fu"); //4
}
}
//Zi类继承Fu类
class Zi extends Fu {
static {
System.out.println("静态代码块Zi");//2
}
{
System.out.println("构造代码块Zi"); //5
}
public Zi() {
super();
System.out.println("构造方法Zi"); //6
}
}
//执行结果:
/*
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
*/
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!