初始化顺序:父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父类的非静态变量(父类的非静态代码块)-->父类的构造函数-->子类的非静态变量(子类的非静态代码块)-->子类的构造函数 值得注意的是:父类的非静态变量(父类的非静态代码块)是同一级的,看哪个部分写在类的最前面谁就先被执行,子类的非静态变量(子类的非静态代码块)也是一样. 验证代码: package com.hts.test; public class Test {…
有的时候,java的初始化会对我的工作照成很大影响,所以简单介绍一下, 首先介绍简单的变量的初始化:在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它也会先于构造器和方法初始化. public class Test{ public static void main(String[] args){ Test2 test2 = new Test2(); test2.f(); }}class Test1{ public T…
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父类中查找. class A { public void fun() { System.out.println("父类的fun()"); } } class B extends A { public void test() { this.fun(); } public void fun()…
一. 定义处默认初始化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…
结论:对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器. public class Test4 { @Test public void test(){ child child = new child(); } } class parent{ public static String parentStaticField = "父类静态变量"; public String parentNormalF…
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan { protected int a=4; //构造函数1 Jisuan() { System.out.println("父类的无参数构造函数"); } //构造函数2 Jisuan(int a) { System.out.println("父类的有参数构造函数");…
今天来研究一下含继承.静态成员.非静态成员时Java程序的执行顺序: 一.不含继承,含有静态变量.静态代码块 创建一个子类,该类包含静态变量.静态代码块.静态方法.构造方法 /** * @createtime 2017年3月17日 下午5:17:02 * @description 创建一个子类 */ public class Son{ public static String name = "子类name"; public static long date = new Date().g…
先上例子代码 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)…
做个简单笔录,就当是重温下基础知识. 1.先看代码: package com.test; public class Test { public static void main(String[] args) { Son s = new Son(); } } class Parent{ int parent = 10; { System.out.println("parent中的初始化块"); } static{ System.out.println("parent中stati…
让我们先来看两个类:Base和Derived类.注意其中的whenAmISet成员变量,和方法preProcess(). 情景1:(子类无构造方法) class Base { Base() { preProcess(); } void preProcess() { } } class Derived extends Base { public String whenAmISet = "set when declared"; void preProcess() { whenAmISet…
1.首先列出代码 Base.java public class Base { Base() { preProcess(); } void preProcess() {} } Derived.java public class Derived extends Base { public String whenAmISet = "set when declared"; @Override void preProcess() { whenAmISet = "set in prePr…
子类继承了超类定义的所有实例变量和方法包括静态的变量和方法(马克-to-win见下例),并且为它自己增添了独特的元素.子类只能有一个超类.Java不支持多超类的继承. 子类拥有超类的所有成员,但它不能直接访问超类中被声明成private的成员.马克-to-win:儿子能拿父亲保险箱中的东西吗?为什么要放保险箱? 例1.1- class A1Mark { static int si=5;//静态的属性和方法一样属于子类,用子类或父类类名都可以调用静态变量或方法 int i; // 同一…
合集目录 Java语法专题2: 类变量的初始化顺序 问题 这也是Java面试中出镜率很高的基础概念问题 描述一下多级继承中字段初始化顺序 描述一下多级继承中类变量初始化顺序 写出运行以下代码时的控制台输出 public class Base { public static int v1 = method(1); private static int v2 = method(2); private int v3; private int v4 = method(3); public Base()…