【转】继承中,父类与子类都有静态代码块和构造函数的时执行顺序

Posted by & filed under Uncategorized.

当父类与子类都有静态代码块和构造函数的时候,执行顺序如下: 父类静态代码块 > 子类静态代码块 java虚拟机加载类时,就会执行该块代码。 父类构造函数 > 子类构造函数 (先有父亲,后有孩子) 如果是多级继承关系的话,高层的父类首先执行,然后依次递减。 总结:静态优先执行,父类优先于子类执行。 静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次   [java] view plaincopy public class ExtendsDemo {     public static void main(String[] args) {         demofather fa = new demoson();         fa = new demoson();     } } class demofather {     static {         System.out.print(1);     }     public demofather() {         System.out.print(2);     } } class demoson extends demofather {     static {         System.out.print(“a”);     }     public demoson() {         System.out.print(“b”);     } } 运行结果为:1a2b2b   几大原则 一、静态成员变量(Static) 1、静态成员变量为类变量,所有对象共享同一内存空间 2、静态成员变量的声明和定义仅在首次加载类时执行一次 3、首次加载类时首先对所有静态成员变量根据类型默认赋初值,然后再对有右值的附右值 二、静态初始块 1、静态初始化块仅在首次加载类时执行一次 ······多个静态成员变量与静态始化快参照出现顺序先后执行······ 三、动态成员变量 1、动态成员变量定义在每次实例化对象时在构造函数之前执行 四、动态初始化块 1、动态初始化块在每次实例化对象时在构造函数之前执行 ······多个动态成员变量与动态初始化块参照出现顺序先后执行······ 总结:总的来说,在不涉及继承的前提下,当首次加载类时,按照如下顺序执行 1、按照出现顺序先后执行静态成员变量定义与静态初始化块 2、按照出现顺序先后执行动态成员变量定义与动态初始化块 3、执行构造函数 再次实例化对象时只执行第2、3步即可 ············成员变量与定义与初始化块先于构造函数执行········· 五、当涉及到继承时,按照如下顺序执行 1、执行父类的静态成员变量定义与静态初始化块,执行子类的静态成员变量定义与静态初始化块 2、执行父类的非静态成员变量定义与动态初始化块,执行父类构造方法 3、执行子类的非静态成员变量定义与动态初始化块,执行子类构造方法 另:父类构造方法中用到的方法如果已被子类重写,那么在构造子类对象时在调用父类构造函数中使用子类重写的方法 Read more […]

Java Web中常见的乱码与解决。

Posted by & filed under Uncategorized.

编码也就是计算机能识别的数据与人类友好的数据的翻译过程。计算机的基本存储单位是byte,人类友好语言(汉语英语等各种语言)用char存储吧。那么编码其实就可以理解为char-byte、byte-char这样的过程。这样char-byte之间的翻译就需要一个标准了,可惜的是每个国家根据自己国家的母语设计出了不同的翻译标准,这边导致不同标准之间的翻译过程出现不统一,自然乱码问题就出现了。 常见的编码标准有很多,常用的能用识别中文的有GB2312、GBK、UTF-8、UTF-16。其中,GB2312与GBK类似,但是GBK范围更大,所以GB2312、GBK之间应该选用GBK;UTF-16每个字符都用2个字节编码,对于ASCII字符浪费空间,另外如果编码过程中有一个字节损坏则会影响后边的所有,但是编码效率相对高;UTF-8最大的特点是变长编码,1-4个字节来表示一个符号,节省空间,并且解决了UTF-16的安全问题。因此,utf-8适合网络传输(安全),utf-16适合本地磁盘和内存之间。 Java Read more […]

【转】Java中equals和==的区别

Posted by & filed under Uncategorized.

java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。 以下部分是一些关于字符串缓冲池的解释,也放在这里好了 大家先来看看一段奇怪的程序: public Read more […]

[转] Java 单例模式探讨

Posted by & filed under Uncategorized.

以下是我再次研究单例(java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦。   总结一下我所知道的单例模式实现方式:   1.预先加载法   Java代码 class S1 {     private S1() {         System.out.println(“ok1”);     }     private static S1 instance = new S1();     public static S1 getInstance() {         return instance;     } } [java] view plaincopy class S1 {     private S1() {         System.out.println(“ok1”);     }     private static S1 instance = new S1();     public static S1 getInstance() {         return instance;     } }   优点: 1.线程安全的 2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。 缺点: 资源利用效率不高,可能getInstance永远不会执行到,但是执行了该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化了     2.initialization Read more […]

【转】 5.1 类、超类和子类

Posted by & filed under Uncategorized.

1、继承用关键字extends表示正在构造的新类派生于已存在的类,写法如下: public Manager extends Employee {     //添加域和方法 } 已存在的类被称为超类(superclass)、基类(baseclass)或父类(parentclass);新类被称为子类(subcalss)、派生类(derivedclass)或孩子类(childclass) 在Java中所有的继承都是公有继承(所谓的公有继承就是不改变超类成员在子类中的访问权限。即超类中的public成员,private成员或protect成员在子类中仍为原有访问权限) 2、在Manager类中增加一个存放奖金的域并且设置一个操作这个域的方法: class Manager extends Empolyee {     …     public void setBonus(double aBonuds) {         bonus = aBonuds;     }   Read more […]

【转】Java对象的强、软、弱和虚引用

Posted by & filed under Uncategorized.

今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混。后来在网上查资料,感觉收获颇多,现记录如下。 对象的强、软、弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。   ⑴强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。  ps:强引用其实也就是我们平时A Read more […]

【转】struts2中一个很实用的标签

Posted by & filed under Uncategorized.

<%@ page language=”java” import=”java.util.*” pageEncoding=”gb2312″%> <%@taglib prefix=”s” uri=”/struts-tags” %> <%@taglib prefix=”sd” uri=”/struts-dojo-tags” %> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”> <html> <head> <title>doubleselect</title></head> <body> <s:form name=”cityform”> <s:set name=”citys” value=”#{ ‘河南省’:{‘郑州市’,’濮阳市’,’开封市’}, ‘湖北省’:{‘武汉市’,’武昌市’,’汉口市’}, ‘山东省’:{‘济南市’,’淄博市’,’青岛市’}}”> </s:set> <s:doubleselect label=”选择你所在城市:” name=”province” list=”#citys.keySet()” doubleName=”city” doubleList=”#citys[top]” > </s:doubleselect> </s:form> Read more […]

[转]Web.XML 配置详解

Posted by & filed under Uncategorized.

每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定. web.xml定义: .站台的名称和说明 .针对环境参数(Context)做初始化工作 .Servlet的名称和映射 .Session的设定 .Tag library的对映 .JSP网页设定 .Mime Type处理 .错误处理 .利用JDNI取得站台资源 要了解web.xml的设定值,必须了解它的schema,从web.xml中知道它的schema是由Sum Microsystems公司定制的,如果你想更为详细的了解它, 可以到http://java.sun.com/xml/ns/j2ee/web-mapp_2_4.xsd网页,那里有更为详细的介绍。这里我介绍我们平常见得最都的. <?xml version=”1.0″ encoding=”ISO-8859-1″?> <web-app xmlns=”http://java.sun.com/xml/ns/j2ee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd” version=”2.4″> <web-app> 这是一般在写XML时所做的声明,定义了XML的版本,编码格式,还有重要的指明schema的来源,为http://java.sun.com/xml/ns/j2ee /web-app_2_4.xsd. <description>,<display-name>,<icon> ____________________________________________ <description>站台描述</discription> 对站台做出描述. <display-name>站台名称</display-name> 定义站台的名称. <icon> icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径. <small-icon>/路径/smallicon.gif</small-icon> small-icon元素应指向web站台中某个小图标的路径,大小为16 Read more […]

【转】ServletContext类和HttpSession类的区别

Posted by & filed under Uncategorized.

 

 

【转】集合框架(Collection Framework)介绍及常用方法

Posted by & filed under Uncategorized.

专门用来存储其它对象的类,一般被称为对象容器类,简称容器类。 这组类和接口的设计结构也被统称为集合框架类(Collection Framework) 数组虽然也可以存储对象,但长度是固定的,集合长度是可变的 数组中可以存储基本数据类型,集合只能存储对象。 Collection 有两个常见的子类接口 List 和 Set List接口下有 ArrayList 和 LinkedList和Vector三个常用类。 Set接口其中最为常用的三个类即HashSet、TreeSet和LinkedHashSet。 Set接口存放的元素是无序的且不包含重复元素。 List接口存放的元素有序且可以重复。 为什么会出现这么多的容器呢? 因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构。 Collection接口下常用方法: 以下面这段代码为例: [java] view Read more […]