<Thinking in Java>书里的例子,我又稍微修改了下代码: class Real{ public Real(String index) { // TODO Auto-generated constructor stub System.out.println("Real()"+index); } } class Meal{ Real r= new Real("Meal"); Meal() { // TODO Auto-generated con…
父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺序 前言: 普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”静态代码块:在java中使用static关键字声明的代码块.静态块用于初始化类,为类的属性初始化.每个静态代码块只会执行一次.由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行.如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行".注意…
类被创建之后的成员的初始化顺序到底是怎么样的? 首先 不考虑继承 package com; public class DemoOne { /** * 关于类的初始化顺序 */ //不考虑继承结构的情况 private static int a=1; private String str="我被赋值了"; static{ //为什么static成员函数不能访问非static变量, 不能调用非static成员函数? //静态代码块独立于对象而存在 不依赖于对象存在 简单来说可以直接以类型名…
/** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = prt("Beetle.k initialized"); public Beetle() { prt("k = " + k); prt("j = " + j); } static int x2 = prt("static Beetle.x2 i…
一.变量与构造器的初始化顺序 我们知道一个类中具有类变量.类方法和构造器(方法中的局部变量不讨论,他们是在方法调用时才被初始化),当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行构造器方法.代码验证: public class Demo01 { public int a1 = 1; public String a2 = "initiaied!"; public Demo01() { System.out.println(a1); System.out.printl…
今晚是阿里巴巴 2013 校园招聘的杭州站笔试.下午匆忙看了两张历年试卷,去现场打了瓶酱油. 题目总体考察点偏基础,倒数第二题(Java 附加题)比较有趣,考察了 Java 初始化机制的细节,在此摘录出来. 题目 求如下 java 代码的输出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class T implements Cloneable{ public static…
在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { static String staticStr = "父类静态变量"; private String str = "父类成员变量"; static { System.out.println(staticStr); System.out.println("父类静态初始化…
一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构…
Java的基本思想之一是万事万物即对象,类也是一种对象.但是类是什么对象呢?Java中的类是java.lang.Class的实例化对象,这被成为类类型. //java.lang.Class类中的的主要方法如下 下面是Java1.8 API中java.lang.Class类中的方法: va.lang中Class Class <T>java.lang.Object继承的java.lang.Class<T>类型参数: T - 由此Class对象建模的类的类型. 例如,String.cla…
Java虚拟机类载入过程是把Class类文件载入到内存.并对Class文件里的数据进行校验.转换解析和初始化,终于形成能够被虚拟机直接使用的java类型的过程. 在载入阶段,java虚拟机须要完毕下面3件事: a.通过一个类的全限定名来获取定义此类的二进制字节流. b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的执行时数据结构. c.在java堆中生成一个代表该类的java.lang.Class对象,作为方法区数据的訪问入口. Java虚拟机的类载入是通过类载入器实现的, Java中…