代码块的定义: 使用{}定义的一段代码
代码块可分为四种:1.普通代码块
2.构造快
3.静态块
4.同步代码块
1.普通代码块:
举例代码如下:
public class Test {
public static void main(String[] args){
{
int x = 50;
System.out.println("x = " + (x+=10));
}//直接用{}定义,表示普通代码块
int x = 100;
System.out.println("x = "+ (x+=10));
}
}
2.构造块:
举例代码如下 :
class Person{
{
System.out.println("Person 类的构造块");
}
public Person(){
System.out.println("Person 类的构造方法");
}
}
public class Test {
public static void main(String[] args){
new Person();
new Person();
}
}
对应结果如下:
从上图可知,构造块比构造方法先执行 ,产生新对象就会调用一次构造块.
3.静态代码块
特点:使用static定义
静态块的分类:1.在非主类中
2.在主类中
(1)定义在非主类的静态块
举例代码如下:
class Person{
{
System.out.println("Person 类的构造块");
}
public Person(){
System.out.println("Person 类的构造方法");
}
static {
System.out.println("Person 类的静态块");//定义在非主类的静态块
}
}
public class Test {
public static void main(String[] args){
System.out.println("-----start-----");
new Person();
new Person();
System.out.println("-----end-----");
}
}
对应结果如下:
由上图可知:静态块优先于构造块执行,且只执行一次.
(2)主类中的静态块:
举例代码如下:
public class Test {
{
System.out.println("Person 类的构造块");
}
public Test(){
System.out.println("Person 类的构造方法");
}
static {
System.out.println("Person 类的静态块");//定义在主类的静态块
}
public static void main(String[] args){
System.out.println("-----start-----");
new Test();
new Test();
System.out.println("-----end-----");
}
}
对应结果如下:
由上图可知:在主类中的静态块,优先于主方法(main())执行的.
对一道例题进行举例:
代码如下:
class HelloA{
public HelloA(){
System.out.println("Hello A!父类构造方法");
}
{
System.out.println("I am A class.父类非静态代码块");
}
static{
System.out.println("I am A class.父类静态代码块");
}
}
public class HelloB extends HelloA{
public HelloB(){
System.out.println("Hello B!子类构造方法");
}
{
System.out.println("I am B class.非静态代码块");
}
static{
System.out.println("I am B class 静态代码块");
}
public static void main(String[] args){
System.out.println("----start----");
new HelloB();
new HelloB();
System.out.println("----end----");
}
}
对应结果如下:
由上图可知,符合我们上面讲到的所有要求.