Java类初始化
Java类初始化
成员变量的初始化和构造器
- 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值
- 对于 char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false)
- 对于引用类型的变量,会默认初始化为null
- 如果类内没有显示的定义构造器,则编译器会自动创建一个无参构造器,但是如果类内显示定义了构造器,则编译器不会再自动创建无参构造器
类初始化的顺序
- 当程序需要生成一个类对象时,Java执行引擎会先检查是否加载了这个类,如果没有加载,则先执行类的加载再生成对象,如果已经加载,则直接生成对象
- 在类的加载过程中,类的static成员变量会被初始化,如果类中有static语句块,则会执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person();
Person p2 = new Person();
}
}
class Person {
static{
System.out.println("Person");
}
public Person(){
System.out.println("It is a person");
}
}
//输出
Person
It is a person
It is a person
- 在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。即类中的变量会在任何方法(包括构造器)调用之前得到初始化
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p = new Person();
}
}
class Person {
private Pet p = new Pet();
public Person(){
System.out.println("It is a person");
}
}
class Pet {
public Pet(){
System.out.println("The person's pet");
}
}
//输出
The person's pet
It is a person
Java类初始化的更多相关文章
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...
- 【知识总结】Java类初始化顺序说明
微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...
- [读书笔记] java类初始化
以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导 ...
- Android(java)学习笔记136:Java类初始化顺序
Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论: 1 .继承体系的所有静态成员初始化( ...
- 转!!关于java类初始化顺序
原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...
- Android(java)学习笔记78:Java类初始化顺序
1. Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: (1)静态变量 (2)静态初始化块 (3)变量 (4)初始化块 (5)构造器 由此得出Java继承类初始化顺序结论: (1)继 ...
- Java类初始化执行流程
测试代码: package com.test.ClassLaoderTest; public class test1 { public static String s_variable = " ...
- java类初始化顺序
一.概述 了解类的初始化顺序,可以更灵活.方便的构造一个类. 二.类初始化顺序 2.1 示例 public class InitialOrderTest { public static void ma ...
- java类初始化,使用构造方法
public class test { /** * java类的初步学习: * 学会使用和类名相同的两种构造方法,对公共类方法的调用: */ public static void main(Str ...
随机推荐
- MIME(多用途互联网邮件扩展类型)
MIME对照表 百度百科 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.(百度百科).是设定某种扩展名的文件用一种应用程序来打开的方式 ...
- css确定元素水平居中和垂直居中
---恢复内容开始--- 首先,我们在了解如何通过css了解元素水平和垂直居中之前,先要了解下html都有哪些元素,这些元素与偶有哪些分类,因为不同类别的元素的水平垂直居中方法是完全不同的,究其根本当 ...
- Java读写文件的几种方法
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...
- 基于AT89C51单片机的贪吃蛇电子游戏(仿真)
有关贪吃蛇的历史发展可以看一下这个网址,贪吃蛇最初的设计和现在并不相同..http://www.techweb.com.cn/internet/2013-02-21/1278055.shtml 该项目 ...
- Python黑帽编程1.2 基于VS Code构建Python开发环境
Python黑帽编程1.2 基于VS Code构建Python开发环境 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...
- 《Entity Framework 6 Recipes》中文翻译系列 (30) ------ 第六章 继承与建模高级应用之多对多关联
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第六章 继承与建模高级应用 现在,你应该对实体框架中基本的建模有了一定的了解,本章 ...
- layout
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 薪资至少10K的一道题,你能拿下吗
我所了解的华为: 应届本科生8k+ 应届硕士生10k+ 应届博士生12k+ 看到后什么感想?有没有只恨生不逢时运不佳的感觉? 很多人做3年多甚至更久,才能达到这个薪资水平,还不如一个新生. 在我看来, ...
- Overview of OpenCascade Library
Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. 关键字Key Words:Ope ...
- [汇编与C语言关系]2. main函数与启动例程
为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在<x86汇编程序基础(AT&T语法)>一文中我们汇编和链接的步骤是: $ as hell ...