package chapter7; /** * 初始化及类的加载顺序:顺序如下 * 1.基类的static变量 * 2.导出类的static变量 * 3.基类的变量 * 4.基类的构造函数 * 5.导出类的变量 * 6.导出类的构造函数 */ class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ",j = " + j); j = 3…
复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须做更多的事情. 使用类而不破坏程序代码: 在新类中产生现有对象.由于新的类是由现有类的对象组成,所有这种方法称为组合. 按照现有类的类型来创建新类.无需改变现有类的形式,采用现有类的形式并在其中添加新代码.这种方法是继承. 7.1 组合语法 组合只需要将对象引用置于新类中就可以了. 但编译器并不是简单的为每一个引用都创建默认对象.如果想初始化这些引用,可以在代码中下列位置进行:…
类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性. 1.类加载机制 我们来了解一下虚拟机如何加载Class文件. 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被直接使用的java类型,这就是虚拟机的类加载机制. 类的生命周期包括加载(Loading).验证(Verification).准…
一.背景: 在面试中,在java基础方面,类的加载顺序经常被问及,很多时候我们是搞不清楚到底类的加载顺序是怎么样的,那么今天我们就来看看带有继承的类的加载顺序到底是怎么一回事?在此记下也方便以后复习巩固! 二.测试步骤: 1.父类代码 package com.hafiz.zhang; public class Fu { private int i = print("this is father common variable"); private static int j = prin…
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构. 加载.class文件的方式: 1.从本地系统中直接加载 2.通过网络下载.class文件 3.从zip,jar等归档文件中加载.class文件 4.从专有数据库中提取.class文件 5.将Java源文件动态编译为.class文件 类的加载的最终产品是位于堆区中…
related URL: http://www.cnblogs.com/guoyuqiangf8/archive/2012/10/31/2748909.html Parent Class: package com.test.testclass; public class Parent { public static int t = parentStaticMethod2(); { System.out.println("Parent non-static block"); } stat…
一.this关键字 1.代表当前类的对象 2.通过” . ”调用成员属性和成员方法 3.通过this可以区分成员属性和参数 参数名和属性名相同的情况,默认是参数名 二.非静态成员属性和静态成员属性的区别 非静态通过“对象.属性“的方式调用 静态通过“类名.属性“的方式调用 非静态属性每个对象各有一份,静态属性被对象之间共享,属于类 三.类的加载顺序 创建对象时: 1.首先加载静态资源 a) 静态代码块 b) 静态成员属性 静态资源只会加载一次,并且按照从上到下的顺序加载 2.加载普通代码块和成员…
前阵子看到阿里巴巴的一提面试题是关于java类的加载顺序 package com.mikey.demo.Test; class FatherVariable{ static { System.out.println("FatherVariable Static Constructor Code"); } { System.out.println("FatherVariable Constructor Code"); } public FatherVariable()…
PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化   虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了许多的细节问题自己并没有完全的掌握.既然是研磨,那么就应该更加的细致.   i.构造方法的重载.   首先说明一下,为什么构造方法需要重载.   需要重载的一个重要原因就是,因为我们的构造器只能有一个名字,也就是和类名相同.但是如果我们需要通过不同的方式去构造一个对象的时候我们该如何是好?那么这里就…
看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就没去尝试.也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whatever you do,you have to keep moving forward--M…
在许多传统语言中,程序是作为启动过程的一部分被加载的.然后是初始化,紧接着程序开始运行.这些语言的初始化过程必须小心控制,以确保定义为static的东西,其初始化顺序不会造成麻烦.例如C++期望一个static在另一个static在被初始化之前就能有效的使用它,那么就会出现问题. java不会出现这种问题,java采用了一种不同的加载方式.每个类的编译代码只有在初次使用时才加载.这通常是指加载发生在创建类的第一个对象之时,但是当访问static域或static方法时,也会发生加载. 初次使用之处…
说到反射,首先说类的加载器. 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载: 就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象. 连接: 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 初始化: 就是我们以前讲过的初始化步骤 类初始化时机: 创建类的实…
一.main函数中实例化对象 父类 package com.learn; public class Father { //静态变量 public static int num_1 = 1; //静态代码块 static { //判断静态变量和静态代码块的执行顺序 System.out.println("Father类的静态变量" + num_1); System.out.println("Father类的静态代码块"); } //普通变量 public int nu…
1,new一个对象时代码的执行顺序 (1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的) 1.为父类的静态属性分配空间并赋于初值 1.执行父类静态初始化块; (2)加载子类 2.为子类的静态属性分配空间并赋于初值 2.执行子类的静态的内容; (3)加载父类构造器 3.初始化父类的非静态属性并赋于初值 3.执行父类的非静态代码块; 4.执行父类的构造方法; (4)加载子类构造器 5.初始化子类的非静态属性并赋于初值 5.执行子类的非静态代码块; 6.执行子类的构造方法. 总之一句话…
在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是,载入顺序与它们在 web.xml 文件里的先后顺序无关. 即不会由于 filter 写在 listener 的前面而会先载入 filter. 终于得出的结论是:listener -> filter -> servlet 同一时候还存在着这样一种配置节:context-param,它用于向 Serv…
类的访问权限 Java中,访问权限修饰词用于确定库中哪些类对于该库的使用者是可用的. public class Foo{ } 注意点: 每个文件(编译单元)只能有一个public类. public类的名称必须完全和含有该编译单元的文件名相匹配,包括大小写. 编译单元内没有public类也是可行的(不常这么用),在这种情况下,可以随意对文件命名. 类既不可以是private的(除该类以外,任何类都不能访问它),也不可以是protected.(事实上,内部类可以是private或protected的…
import java.util.regex.Pattern; import java.io.File; import java.io.FilenameFilter; public class Test { public static void main(String[] args) { DirList.test(); DirList2.test(); DirList3.test(); } } //方案一:实现一个FilenameFilter接口的类 class DirFilter implem…
import java.io.File; public class Test { public static void main(String[] args) { MakeDirectories.test(); } } class MakeDirectories { //用于展示File对象各种信息 private static void fileData(File file) { StringBuilder sb = new StringBuilder(); sb.append("\nAbso…
public class Test { public static void main(String[] args) { // Parcell11.test(); // ClassInterface.Test.test(); TestBed.Tester.test(); } } /* 嵌套类和普通的内部类还有一个区别.普通的内部类的字段和方法,只能放在类的外部 层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类.但 是嵌套类可以包含这些东西 */ interfac…
import java.io.IOException; import java.util.*; import java.util.regex.Pattern; import java.io.File; import java.io.FilenameFilter; public class Test { public static void main(String[] args) { // DirectoryDemo.test(); ProcessFileTest.test(); ProcessF…
  静态变量在类加载时初始化,而非静态变量在创建对象时初始化.static关键字修饰的变量就是静态变量. 子类继承父类,子类在生成对象的时候,先初始化父类的成员变量,接着执行父类的构造器,完成父类的初始化,然后就过来初始化自身了.   参考链接:http://www.cnblogs.com/dolphin0520/p/3799052.html…
7.1组合语法 在一个类中引入多个对象,以提高代码的复用性与功能. 7.2继承语法 使用继承子类可以获得,导出类可以获得基类的成员(变量与方法). 注:这里注意权限控制,若基类中的成员为默认权限,只有在同一包下才能继承得到.protect修饰时,导出类可以获取.public修饰时,任何类都可以拿到.private修饰就属于基类自己的东西了. 为了解决导出类中调用父类同名方法出现递归问题,java提出了super关键字解决这个问题. 在继承体系中,初始化都是由内向外的,即由基类到导出类扩散的,即先…
复用代码是 Java 众多引人注目的功能之一. Java 可以通过创建类来复用代码,要在使用类的时候不破坏现有代码,有两种方式: 组合:在新的类中使用现有类的对象. 继承:按照现有类的类型来创建新类,无需改变现有类的形式,并为其添加新代码. 组合语法 使用组合技术只需要将对象引用置于新类中. 每个非基本类型的对象都有一个 toString() 方法,而且当编译器需要一个 String 而你传入一个对象时,toString() 会被调用. 类中的对象引用会被默认初始化为 null,如果你对其调用任…
第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法   只需将对象引用置于新类中即可. class A{} class B{ A a = new A(); }   如果想初始化这些引用,可在下列位置进行: 在定义对象的地方. 在类的构造器中. 在真正使用这些对象之前,惰性初始化. 使用实例初始化. 7.2 继承语法 当创建一个类时,总是在继承.   在继承过程中,需要先声明"新类与旧类相似&…
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfInitialization.java // Demonstrates initialization order. // When the constructor is called, to create a // Tag object, you'll see a message: class Tag { Tag(in…
在java中一切都被视为对象.尽管一切都是对象,但是操纵的标识符实际上是对象的一个引用,可以将引用想象成是遥控器(引用)来操纵电视机(对象).没有电视机,遥控器也可以单独存在,即引用可以独立存在,并不需要有一个对象与之关联,如下:   String s; 上面只是创建s这个引用,并不是对象. *基本类型      一般类型可以通过new将对象存储在"堆"里,但是用new创建一个对象-特别是小的,简单的变量,往往不是有效的.故Java采与C和C++一样的方法,不用new来创建这些变量,而…
七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为每一个引用都创建默认对象,如果想初始化这些引用,可以在代码中的下列位置进行: 1.在定义对象的地方.这意味着它们总是能够在构造器被调用之前被初始化. 2.在类的构造器中. 3.就在正要使用这些对象之前,这种方式称为惰性初始化. 4.使用实例初始化. 2.继承语法 当创建一个类时,总是在继承,因此,除…
一.对象导论 1:多态的可互换对象 面向对象程序设计语言使用了后期绑定的概念. 当向对象发送消息时,被调用的代码直到运行时才能确定.也叫动态绑定. 2:单根继承结构 所有的类最终都继承自单一的基类,这个终极基类的名字就是Object 3:对象的创建和生命期 对象的数据处于作用域,Java完全采用了动态内存分配方式(基本类型只是一种特例) 二.一切都是对象 1:基本类型 基本类型是一个并非是引用的“自动”变量.这个变量直接存储“值”,并置于堆栈中 2:Java中的数组 Java确保数组会被初始化.…
目录 01 对象导论 02 一切都是对象 03 操作符 04 控制执行流程 05 初始化与清理 06 访问权限控制 07 复用类(继承) 08 多态 09 接口 10 内部类 11 持有对象 12 通过异常处理错误 13 字符串 14 类型信息 15 泛型 16 数组 17 容器深入研究 18 Java I/O系统 19 枚举类型 20 注解 21 并发 01 对象导论 抽象过程:对象既有状态(属性),又有行为(方法),通常与具体实现的因此成为封装 每个对象都有一个接口(interface),决…