Java中静态代码块、构造代码块的区别

来源:https://liuyanzhao.com/5303.html

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

构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行

注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。

静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 > 构造代码块  > 构造函数

下面我们来举几个例子说明一切

demo1:构造方法

  1. public class Test {
  2. static {
  3. System.out.println("静态块");
  4. }
  5. {
  6. System.out.println("构造块,在类中定义");
  7. }
  8. public Test() {
  9. System.out.println("构造方法执行");
  10. }
  11. public static void main(String[] args) {
  12. new Test();
  13. new Test();
  14. }
  15. }
  16. /*
  17. 静态块
  18. 构造块,在类中定义
  19. 构造方法执行
  20. 构造块,在类中定义
  21. 构造方法执行
  22. */

demo2:普通代码块

  1. /*普通代码块:在方法或语句中出现的{}就称为普通代码块。
  2. 普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”*/
  3. public class Test {
  4. public static void main(String[] args) {
  5. {
  6. int x = 3;
  7. System.out.println("1,普通代码块内的变量x=" + x);
  8. }
  9. int x = 1;
  10. System.out.println("主方法内的变量x=" + x);
  11. {
  12. int y = 7;
  13. System.out.println("2,普通代码块内的变量y=" + y);
  14. }
  15. }
  16. }
  17. /*
  18. 1,普通代码块内的变量x=3
  19. 主方法内的变量x=1
  20. 2,普通代码块内的变量y=7
  21. */

demo3:构造代码块

  1. /*构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
  2. 构造代码块在创建对象时被调用,每次创建对象都会被调用,
  3. 并且构造代码块的执行次序优先于类构造函数。*/
  4. public class Test {
  5. {
  6. System.out.println("第一代码块");
  7. }
  8. public Test() {
  9. System.out.println("构造方法");
  10. }
  11. {
  12. System.out.println("第二构造块");
  13. }
  14. public static void main(String[] args) {
  15. new Test();
  16. new Test();
  17. new Test();
  18. }
  19. }
  20. /*
  21. 第一代码块
  22. 第二构造块
  23. 构造方法
  24. 第一代码块
  25. 第二构造块
  26. 构造方法
  27. 第一代码块
  28. 第二构造块
  29. 构造方法
  30. */

demo4:静态代码块

  1. /*静态代码块:在java中使用static关键字声明的代码块。
  2. 静态块用于初始化类,为类的属性初始化。
  3. 每个静态代码块只会执行一次。
  4. 由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
  5. 如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
  6. 注意:1 静态代码块不能存在于任何方法体内。
  7. 2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。*/
  8. class Code {
  9. {
  10. System.out.println("Code的构造块");
  11. }
  12. static {
  13. System.out.println("Code的静态代码块");
  14. }
  15. public Code() {
  16. System.out.println("Code的构造方法");
  17. }
  18. }
  19. public class Test {
  20. {
  21. System.out.println("Test的构造块");
  22. }
  23. static {
  24. System.out.println("Test的静态代码块");
  25. }
  26. public Test() {
  27. System.out.println("Test的构造方法");
  28. }
  29. public static void main(String[] args) {
  30. System.out.println("Test的主方法");
  31. new Code();
  32. new Code();
  33. new Test();
  34. new Test();
  35. }
  36. }
  37. /*
  38. Test的静态代码块
  39. Test的主方法
  40. Code的静态代码块
  41. Code的构造块
  42. Code的构造方法
  43. Code的构造块
  44. Code的构造方法
  45. Test的构造块
  46. Test的构造方法
  47. Test的构造块
  48. Test的构造方法
  49. */
时间: 2024-08-03 09:43:15

Java中静态代码块、构造代码块的区别的相关文章

Java中静态代码块、构造代码块、构造函数、普通代码块(转载)

转载自:http://www.cnblogs.com/ysocean/p/8194428.html 目录 1.静态代码块 ①.格式 ②.执行时机 ③.静态代码块的作用 ④.静态代码块不能存在任何方法体中 ⑤.静态代码块不能访问普通变量 2.构造代码块 ①.格式 ②.执行时机 ③.构造代码块的作用 3.构造函数 4.普通代码块 5.执行顺序 6.父类和子类执行顺序 在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序

java中静态代码块、构造代码块、构造方法、main函数的执行顺序?

静态代码块:在类被加载的时候就运行了,且只运行一次.static{} 构造代码块:在创建对象时被调用,每次创建对象都会调用一次.比静态代码块少了static.{} 构造方法:用于创建对象时定义初始化的状态.构造函数不能直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法是在程序执行到它的时候被调用. 先不创建对象,如下: public class Test { // 静态代码块 static { System.out.println("静态代码块"); } // 构造代码块

Java 代码块,普通代码块,构造代码块,静态代码块

学习Java中… 刚刚学到了Java的代码块,虽然很简单 还是记下吧! 左音 2016-03-16 ----------------- // 执行优先级:静态代码块 > mian方法 > 构造代码块 > 构造方法 // 静态代码块不论是否实例化都会执行一次,不会重复执行 // 构造代码块实例化时执行 1.普通代码块 // 普通代码块在方法或语句中 1 public class CodeBlock { 2 3 public static void main (String[] args)

java中静态代码块的用法 static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的.静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是

JAVA中EXLS导出功能实现 - 代码

JAVA中EXLS导出功能实现  - 代码: 基于SSH框架下的exls导出 public void exportExl() throws Exception{ String text = (String) super.getRequest().getParameter("text"); String flowid="051021";//(String)super.getRequest().getParameter("flowid"); Resu

JAVA中EXLS导入功能实现 - 代码

JAVA中EXLS导入功能实现 - 代码: 基于SSH框架下导入的流程及解析: private File file; public synchronized File getFile() { return file; } public synchronized void setFile(File file) { this.file = file; } /** * 导入exls 并解析 * @throws Exception */ public void inputfile() throws Ex

java中静态属性和和静态方法的继承问题 以及多态的实质

首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继承机制就可以调用如果子类里面定义了静态方法和属性,那么这时候父类的静态方法 或属性称之为“隐藏”,你如果想要调用父类的静态方法和属性,直接通过父类名.方法名或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是 跟实例方法和属性不太一样,存在“隐藏”的这种情况. 多态之所以能够实现是依赖于 继承 接口和 重写 .重

谈谈java中静态变量与静态方法继承的问题

谈谈java中静态变量与静态方法继承的问题 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量的继承和静态方法继承问题的测试. 首先我先建一个父类: 这样我在建一个子类: 这些都准备好以后,我对子类创建对象,然后用  类名.静态变量/静态方法  和  对象名.静态方法/静态变量  对他们输出的结果进行测试. 这样输出种类有: 这样我输出的结果是: 这样来总结一下: 1. 通过类名来调用子类中的静态变量和静态方法,当父类与子类相同时是,子类会隐藏父类

关于Java中this和super的用法介绍和区别

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可