学习Java的同学注意了!!!

学习进程中遇到甚么问题或想获得学习资源的话,欢迎加入Java学习交换群,群号码:183993990我们1起学Java!

昨天看了1本叫做《突破程序员基本功的16课》的书,个人感觉还可以,主要对Java的技能进行了1些深入的讲授,让我对类的初始化和对象的创建有了新的认识。

1、类的初始化

对类的初始化:类的初始化1般只初始化1次,类的初始化主要是初始化静态成员变量。

类的编译决定了类的初始化进程。

编译器生成的class文件主要对定义在源文件中的类进行了以下的更改:

1)       先依照静态成员变量的定义顺序在类内部声明成员变量。

2)       再依照原java类中对成员变量的初始化顺序进行初始化。

1个java类和编译后的class对应的转换以下:

源文件:

public class Person{  public static String name="张3";  public static int age;  static{ age=20;    System.out.println("初始化age");  }  public static String address;  static{    address="北京市";    age=34;  }  public static void main(String[] args) { System.out.println(name); System.out.println(age); System.out.println(address); }}

当java源代码转换成1个class文件后,其转换成类似下面的代码:

public class Person{  public static String name;  public static int age;  public static String address;  static{    name="张3";    age=20;    System.out.println("初始化age");    address="北京市";    age=34;  }  public static void main(String[] args) { System.out.println(name); System.out.println(age); System.out.println(address); }}

初始化顺序根据转换后对应的class类成员变量的初始化顺序顺次履行,所以所有的静态成员变量都是先声明,后履行赋值的,而且赋值的顺序也是依照源代码对静态成员变量初始化的顺序进行的,注意:定义1个成员变量并直接初始化与在静态代码块中进行初始化是等价的,都是根据它们在源代码中定义的顺序进行的。

2、对象的生成

对对象的生成其初始化进程与类的初始化进程类似,但会增加构造函数阶段,源代码以下:

1 public class Person{2   {3     name="李4";4     age=56;5     System.out.println("初始化age");6     address="上海";7   }8   public String name="张3";9   public int age=29;10   public String address="北京市";11   public Person(){12     name="赵6";13     age=23;14     address="上海市";15   }16 }

编译器转换成class文件后,会转换成类似下面的代码:

1 public class Person{2   public String name;3   public int age;4   public String address;5   public Person(){6     name="李4";7     age=56;8     System.out.println("初始化age");9     address="上海";10     name="张3";11     age=29;12     address="北京市";13     name="赵6";14     age=23;15     address="上海市";16   }17 }

可以看到,对类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中,并且是依照java源文件的初始化顺序顺次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后履行。本人之前1直对类初始化进程1直没有1个深入的理解,就是弄不清究竟是怎样初始化的,只能依照书上所说的记住了初始化顺序,但是过1段时间有给忘了,所以这次总算给弄清楚了,还是依照1个模型来解释初始化机制比较好啊,不用再背了,只有理解了才能不容易忘。

学习Java的同学注意了!!!

学习进程中遇到甚么问题或想获得学习资源的话,欢迎加入Java学习交换群,群号码:183993990我们1起学Java!

java类成员变量初始化_Java类变量和成员变量初始化过程相关推荐

  1. java 成员变量的初始化_Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  2. Java千百问局部变量、类变量、实例变量有什么区别

    Java千百问局部变量.类变量.实例变量有什么区别 局部变量.类变量.实例变量有什么区别 在聊局部变量.类变量.实例变量有什么区别之前,我们需要了解一下Java变量. 1.Java变量是什么 在数学世 ...

  3. java 实例变量初始化_java学习之实例变量初始化

    实例变量的初始化方法 第一种:通过构造函数进行初始化. 第二种:通过声明实例字段初始化. 第三种:通过对象代码块初始化. 通过构造函数进行初始化方法 通过构造函数进行对象初始化,必须在类中声明一个带参 ...

  4. java类变量什么时候初始化_Java类变量的初始化时机

    先上代码 测试类public class MyNumber { public static MyNumber myNumber=new MyNumber(2.8); private static do ...

  5. java用一个方法对变量初始化_java中怎么给变量初始化?

    展开全部 不同的变量初始化32313133353236313431303231363533e4b893e5b19e31333337613764方法不同. 变量包括:类的属性,或者叫值域 方法里的局部变 ...

  6. java 成员变量(实例变量) 和类变量(静态变量)的区别

    本文参考菜鸟教程的中的笔记部分 由static修饰的变量称为静态变量,其实质上就是一个全局变量.如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰:没有被静态修饰的内容,其实是属于对象的特殊描 ...

  7. java类对象实验问题_Java类与对象实验答案

    Java类与对象实验答案Tag内容描述: 1.Java实验报告 计科.信工版2013-2014-2 实验报告 一.实验项目:类与对象 二.实验目的: 1. 学会使用类来封装对象的属性和功能 2. 掌握 ...

  8. java类与对象作用_Java类与对象

    ●类和对象的关系: 一:类是对同一类事物(对象)的抽象,对象实际存在的该类的各种实体. 二:面向对编程的核心:找合适的对象来做合适的事. 三:Java中找到对象: 1):sun自己定义好的类,必须知道 ...

  9. java类验证和装载顺序_java类加载机制,你会了吗?

    什么是类加载机制呢? java虚拟机将编译后的class文件加载到内存中,进行校验.转换.解析和初始化,到最终的使用.这就是java类加载机制: 下面就开始今天的内容: 1.类加载的生命周期:加载(L ...

  10. JAVA类和对象访问_Java类和对象

    一.类 类是封装对象的属性和行为的载体,在Java语言中对象的属性以成员变量的形式存在,而对象的方法以成员方法的形式存在. 1. 类的构造方法 构造方法是一个与类同名的方法,对象的创建就是通过构造方法 ...

最新文章

  1. jdk1.8和tomcat9.0、maven3.5.0配置教程
  2. stm32.cube介绍
  3. 各类操作系统的TTL字段值
  4. c++ override final关键字
  5. Java数据库——事务处理
  6. [云炬python3玩转机器学习笔记] 3-1 Jupyter Notebook
  7. 2019 Android 高级面试题总结 从java语言到AIDL使用与原理
  8. 使用MVC框架中要注意的问题(二):将Model和Controller单独用一个项目设计
  9. numpy库中的mat和array使用小结
  10. (第一章)数据库的类型
  11. 剑指offer面试题[19]-二叉树的镜像
  12. 蓝桥杯2021年第十二届C++省赛第九题-双向排序
  13. EditDistance,求两个字符串最小编辑距离,动态规划
  14. 破局疫后“她经济”,解读艺星整形逆势增长的“3级助推器”
  15. 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁
  16. 基于IM实现直播礼物效果
  17. Ontrack EasyRecovery15英文版数据恢复软件
  18. c语言万花筒,C/C++——元胞自动机万花筒
  19. 无人机油动发动机调试
  20. Irvue for Mac(苹果壁纸软件)

热门文章

  1. CFA一级学习笔记--衍生品(一)--概念以及定义
  2. javascript:html嵌入javascript代码的三种方式
  3. matlab求dfa指数,关于使用MF-DFA方法计算广义Hurst指数的MATLAB操作问题
  4. android toast 自定义view,分享Android中Toast的自定义使用
  5. 5G核心网中与用户数据相关的NF功能体UDM、AUSF、PCF、UDR
  6. 科斯定理(交易费用足够低,谁用的好就归谁)
  7. 2021-09-23 latex 实心圆编号
  8. YNUOJ-开学大作战之补番真开心(2018/8/29)
  9. 360众测考核简单记录
  10. 为什么宁愿工资低点,也不建议去外包公司?