Java中类成员变量初始化顺序】的更多相关文章

一. 定义处默认初始化vs构造函数中初始化 java中类成员变量支持在声明处初始化,也可以在构造函数中初始化,那么这两者有什么区别呢?看下面例子 public class FieldsInit { public static void main(String[] args) { Test test = new Test(); } } class Print { public Print(String s) { System.out.println(s); } } class Test { pri…
Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究.   1  无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } class Test { static Samp…
由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2: " << n2 <<endl; } }; int main() { A a; a.Print(); return 1; } 这时,那个…
java中成员变量的初始化,如果是普通成员变量可以赋初值,如果没赋初值,则系统会自动赋初值.而对于局部变量必须手动赋初值. package MyText2; public class MyText1 { int str1; public static void main (String []args) { MyText1 mytext = new MyText1(); System.out.println(mytext.str1); } } 输出结果: 0 也可以声明时直接赋初始值. packa…
1. 静态方法: 成员变量分为实例变量和静态变量.其中实例变量属于某一个具体的实例,必须在类实例化后才真正存在,不同的对象拥有不同的实例变量.而静态变量被该类所有的对象公有(相当于全局变量),不需要实例化就已经存在. 方法也可分为实例方法和静态方法.其中,实例方法必须在类实例化之后通过对象来调用,而静态方法可以在类实例化之前就使用.与成员变量不同的是:无论哪种方法,在内存中只有一份——无论该类有多少个实例,都共用同一个方法. 实例方法的调用: ClassA a = new ClassA();  …
大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果.这实际上是在考查我们对于继承情况下类的初始化顺序的了解.  我们大家都知道,对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点:  Java代码…
对于方法里面的成员变量,Java要求程序员强制提供一个初始化的值.比如下面这个方法就会出错: public class Breakyizhan{ public void Z(){ int z; z++; } public static void main(String[] args) { Breakyizhan B = new Breakyizhan(); B.Z(); } } /* (www.breakyizhan.com) 输出结果是: 编译会出错,方法变量没有初始化 */ 而对于类的数据,…
[Java笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构造方法. Java程序的初始化一般遵循以下三个原则(以下三原则优先级依次递减): ① 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次: ② 父类优先于子类进行初始化: ③ 按照成员变量定义顺序进行初始化,即使变量定义散布于方法…
引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: class TestClass1 { public: TestClass1() { cout << "TestClass1()" << endl; } TestClass1(const TestClass1&) { cout << "TestClass1(const TestClass1&)" << endl; }…
Java的变量初始化顺序,对这里一直似懂非懂,面试的时候也经常被问到,但答的一直不好,现在整理记录一下,以后忘记了可以来看看. 程序分为两个部分,第一个部分不考虑继承,第二个部分考虑继承: (1)不考虑继承的情况 代码如下: public class JavaTest { public JavaTest() { System.out.println("执行JavaTest构造方法1"); } public JavaTest(String param) { System.out.prin…
类被创建之后的成员的初始化顺序到底是怎么样的? 首先 不考虑继承 package com; public class DemoOne { /** * 关于类的初始化顺序 */ //不考虑继承结构的情况 private static int a=1; private String str="我被赋值了"; static{ //为什么static成员函数不能访问非static变量, 不能调用非static成员函数? //静态代码块独立于对象而存在 不依赖于对象存在 简单来说可以直接以类型名…
1.虚拟机在首次加载Java类时,会对静态初始化块.静态成员变量.静态方法进行一次初始化 2.只有在调用new方法时才会创建类的实例 3.类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法:再执行本类继承的子类的初始化块,最后是子类的构造方法 4.类实例销毁时候,首先销毁子类部分,再销毁父类部分 public class Parent { public static int t = parentStaticMethod2(); { System.out.…
java尽力保证:所有变量在使用前都能得到恰当的初始化 ①函数/方法局部变量的初始化 在C/C++中,变量的初始化还是得依赖于程序员的自觉性.对于函数局部变量,编译器不会为基本类型赋予默认初始值,新手经常会使用未初始化的指针访问内存,导致程序崩溃.对于类对象,编译器将使用类的默认构造函数对对象进行初始化.而在java中,对于方法的局部变量,java以编译时错误来保证变量在使用前都能得到恰当的初始化. void f(){ int i ; i ++ ; //Error- - i not initia…
看到了C++11,看到了XE7的64位,想实现下面方便的类成员初始化,失望. 一.64位用法 clang3,64位编译器,不支持中文变量名,编写代码提示没有32位快,风格简单不用写单独的赋值语句函数,一步到位,c#,java都支持的写法. class TTableNames64 { public: String TB1 = "TB1"; String TB2 = "TB2"; // String 变量a; // error 汉字变量不识别 } TableNames6…
Java基础-成员变量与局部变量 1.什么是成员变量与局部变量? public class Student {   String name;   int high;   public void study(){       int j=0;       System.out.println("学习");   }   public void play(){       System.out.println("打游戏");       int j=0;   }} 例如在…
// wrap the LaunchDir variable in a function to work around static/global initialization order static FString& GetWrappedLaunchDir() { static FString LaunchDir; return LaunchDir; } 在ue4中看到这么一段代码,注释有点意思 不同cpp文件里的全局static变量初始化顺序是不可控的 FString显然会依赖很多内存分配…
最近在学习c++,不同类型的c++成员变量在初始化的时候也有很有的区别,查了一些资料之后再此记录一下: #include<iostream> using namespace std; //c++ 类成员变量初始化总结 class Test { private: int var1;//普通变量 int &var2;//引用类型 const int var3;//常成员 static int var4;//静态成员 static const int var5;//静态常成员 有资料说可以在…
谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类:…
转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量,静态变量的辨析 Java中的变量大致分为 成员变量 和 局部变量 两大类. 成员变量:在类体里面定义的变量称为成员变量: 如果该成员变量有 static 关键字修饰,则该成员变量称为静态变量或类变量: 如果该成员变量没有 static 关键字修饰,则该成员变量被称为非静态变量或实例变量. 局部变量:形参.方…
结论:执行的大致顺序如下, (1) 在一个不存在继承的类中:初始化static变量,执行static初始化块-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法 (2)在一个存在继承的类中:初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普…
一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: 先按照静态成员变量的定义顺序在类内部声明成员变量. 再按照原java类中对成员变量的初始化顺序进行初始化. 一个java类和编译后的class对应的转换如下: 源文件: public class Person{ public static String name="张三"; public…
首先根据下面的这个一段代码:引入关于java初始化顺序的问题public class InitationTest extends Person { public InitationTest() { System.out.println("InitationTest constructor"); } static int j = 10; static { System.out.println("j="+j); System.out.println("Init…
1.当一个类被第一次使用时,它需要被类加载器加载,而加载过程涉及以下两点: (1)在加载一个类时,如果它的父类还未被加载,那么其父类必须先被加载: (2)当类加载到内存之后,按照在代码中的出现顺序执行它的静态变量和静态块(如果有的话). 2.调用一个类的构造函数时,调用过程涉及以下三点: (1)调用父类的构造函数: (2)按照在代码中出现顺序初始化实例数据域和实行实例块: (3)执行其构造函数体. 总结: JAVA类首次装入时(包括类点静态方法和点静态变量或者new一个对象点实例方法和点实例变量…
参考C++11FAQ https://www.chenlq.net/cpp11-faq-chs 11以后可以直接在类里面初始化成员变量,类似这样 class A { int a=1; const int b=a; double c=1.1; const double d=2.2; }; static 仍然不行,因为不能进行多次赋值吧. 而里面成员变量的赋值顺序则是按照声明的顺序a,b,c,d…
第一次实例化一个类时,初始化优先顺序为: 1.父类中的静态成员变量和静态代码块初始化 2.本类中的静态成员变量和静态代码块初始化 3.父类中的实例成员初始化 4.父类中的构造方法 5.本类中的实例成员初始化 6.本类中的构造方法 成员变量和示例变量初始化的区别: 成员变量:每次新建对象的时候都会初始化: 实例变量:只在第一次调用(包括实例化或通过类访问)的时候一次性初始化全部的静态变量 实例变量示例: class Tag { Tag(int marker) { System.out.printl…
1.java虚拟机执行程序,首先须要装载类,安装现装载父类,初始化父类的静态代码块和静态成员变量 再load子类. 初始化子类静态代码块和成员变量 2.load完成父类与子类后,从main函数入口运行程序.先输出,接着new实例化Beetle类,则先实例化父类Insect,实例化父类时.先初始化非静态成员变量和非静态代码块,接着运行父类构造方法 再实例化子类,实例化子类时,先初始化非静态成员变量和非静态代码块,接着运行子类构造方法. package it.xiangnan.test; publi…
一.变量与构造器的初始化顺序 我们知道一个类中具有类变量.类方法和构造器(方法中的局部变量不讨论,他们是在方法调用时才被初始化),当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行构造器方法.代码验证: public class Demo01 { public int a1 = 1; public String a2 = "initiaied!"; public Demo01() { System.out.println(a1); System.out.printl…
程序中成员变量赋值的执行顺序…
先上例子代码 public class F { int age = 5; public F() { print(); } public void print() { System.out.println(age); } } 然后让S继承F类,覆盖父类的age属性和print方法 public class S extends F { int age = 10; public S() { print(); } public void print() { System.out.println(age)…
Java程序在启动和运行时,需要首先完成初始化的工作.在涉及到继承.static成员变量等因素时,初始化的顺序就复杂起来.下面以一个例子说明继承时的Java初始化顺序. 例子: class Insect{ private int i = 9; protected int j; Insect(){ System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = print…