普通代码块、构造块、静态代码块、构造方法浅析

1、普通代码块:直接在一个方法中或语句中出现的{}被称为普通代码块。

相同类型的代码块执行顺序为,先定义先执行。

2、构造块:直接在类中定义的且没有加static关键字的代码块{}称为构造代码块。

构造块在创建对象时被执行,每次创建对象都会被执行,且构造块的执行顺序

优先于类构造函数。

3.静态代码块:在java类中使用static关键字声明的代码块称为静态代码块。静态

代码块主要用于初始化类,为类的静态属性初始化。有如下特定:

1)静态代码块不能存在任何方法体内

2)静态代码块不能直接访问实例变量和实例方法,需通过类的实例对象来访问。

这与静态方法是一样的

3)jvm在加载类时,先会执行静态代码块,所以静态代码块优先于主方法执行。

如果类中包含多个静态代码块,则先定义先执行。每个静态代码块只会执行一次。

4.无论是普通代码块,构造块,还是静态代码块内的语句,都可以定义变量、调用

其他方法,使用各种循环语句和控制语句等。

//==============下面示例==============

====类Code====

class  code{

{                                                     //1.构造块

system.out.println("code的构造块");

}

static {                                           //2.静态构造块

system.out.println("code的静态构造块");

}

public Code(){                               // 3.构造方法

system.out.println("code的构造方法");

}

}

====类Codeblock====

public class Codeblock{

{                                                     //1.构造块

system.out.println("Codeblock的构造块");

}

static {                                           //2.静态构造块

System.out.println("Codeblock的静态构造块");

}

public Codeblock(){                               // 3.构造方法

system.out.println("Codeblock的构造方法");

}

public satic void main(String args[]){

System.out.println("Codeblock的主方法");

new Code();

new Code();

new Codeblock();

new Codeblock();

}

}

========运行结果========

Codeblock的静态方法

Codeblock主方法

Code的静态方法

Code的构造块

Code的构造方法

Code的构造块

Code的构造方法

Codeblock的构造块

Codeblock的构造方法

Codeblock的构造块

Codeblock的构造方法

请按任意键继续 . . . .

时间: 2024-10-10 13:56:09

普通代码块、构造块、静态代码块、构造方法浅析的相关文章

Java子父类间静态代码块、非静态代码块、构造方法的执行顺序

子类A继承父类B,A a=new A(); 正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数 也就是说非静态初始化块的执行顺序要在构造函数之前. class FatherStaticTest { static { System.out.println("执行父类的静态代码块."); } FatherStaticTest() { System.out.println(&qu

静态代码块--》非静态代码块--》构造方法

class ccc1 { static { System.out.println("ccc1---1"); } public ccc1() { System.out.println("ccc1---2"); } { System.out.println("ccc1---3"); } }   public class ccc extends ccc1 {   static { System.out.println("ccc1")

java 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块

①java类的成员变量有俩种: 一种是被static关键字修饰的变量,叫类变量或者静态变量 另一种没有static修饰,为成员变量 ②通俗点说: 类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享.静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期. 而实例变量取决于类的实例.每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期. 注意点: 1.JAVA中初始化

static{}(静态代码块)与{}(非静态代码块)的异同点(转自 べ袽猓柯苡づ)

static{}(静态代码块)与{}(非静态代码块)的异同点 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个, 一般在代码块中对一些static变量进行赋值. 不同点:静态代码块在非静态代码块之前执行(静态代码块->非静态代码块->构造方法). 静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new 一次就执行一次.非静态代码块可在普通方法中定义(不过作用不大):而静态代码块不行. 例: //普通类 publicclass PuTong {   

Java静态代码块和非静态代码块、类加载、构造对象的机制

温故而知新,代码块这东西时间一长一些东西容易忘记,比如静态代码块.非静态代码款.静态成员变量初始化.动态成员变量初始化.构造方法调用.类加载等等的顺序机制是怎么样的? 话不多说了,一个例子足以说明一切: package com.collectiontest; import org.junit.Test; public class BasicTest { @Test public void testBlock() { System.out.println("m1:"); Mimi m1=

静态代码块、非静态代码块(普通代码块)和构造方法的执行顺序

Java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始化好的.结构如下: static { 静态语句代码块 } { 非静态语句代码块 }  相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋值. 不同点:静态代码块在非静态代码块之前执行(静态代码块-->非静态代码块-->构造函数). 1 public class Test_Static_Class { 2 //静态

静态代码块、非静态代码块、构造函数之间的执行顺序

1.执行顺序 静态代码块>非静态代码块>构造函数 public class staticCode { public staticCode() { System.err.println("构造函数"); } { System.err.println("非静态代码块"); } static{ System.err.println("静态代码块"); } public static void main(String[] args) { ne

静态代码块、非静态代码块、构造函数的输出顺序

情况一:没有继承父类时 1 class HelloA { 2 3 public HelloA() { 4 System.out.println("I'm A class"); 5 } 6 7 static { 8 System.out.println("static A"); 9 } 10 11 { 12 System.out.println("A"); 13 } 14 15 public static void main(String[] ar

静态代码块、非静态代码块、构造方法的执行顺序

java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始化好的.结构如下: static { 静态语句代码块 } { 非静态语句代码块 } 异同点 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋     值. 不同点:静态代码块在非静态代码块之前执行(静态代码块-->非静态代码块-->构造方法).     静态代码块只在第一次new执行一次,之后不在执行,而非静态

Java和Android中,代码块、static静态代码块的执行顺序

Java和Android中,代码块.static静态代码块的执行顺序有没有什么区别呢. Java 先来个简单的例子 Main.java: public class Main { static int a = 1; static { System.out.println(a); } static { a = 2; } public static void main(String[] args) { System.out.println("Hello World!"); System.ou