摘要:转自:http://www.webasp.net/article/18/17482.htmAbstract:本文深入分析了Java程序设计中Java编译器对java源文件和JVM对class类文件的编码/解码过程,通过此过程的解析透视出了Java编程中中文问题产生的根本原因,最后给出了建议的最优化的解决Java中文问题的方法。 1、中文问题的来源 计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和.
阅读全文
摘要:1. String --> InputStreamInputStream String2InputStream(String str){ ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes()); return stream;}2.InputStream --> StringString inputStream2String(InputStream is){ BufferedReader in = new BufferedReader(new InputStreamReader(is)); St..
阅读全文
摘要:Map<K, V>表示映射关系,是将Value映射至Key上。已经实现该接口的类有HashMap<K, V>。与HashSet相类似,HashMap也是与hashCode()方法的实现有关.同HashSet相类似,HashMap放进去的元素的顺序仍然是无序的,如下例:package cn.edu.bupt.array;import java.util.HashMap;import java.util.Map;public class MapTest1{ public static void main(String[] args) { Map<String, Str
阅读全文
摘要:想Set当中加入元素比较简单,使用add(),remove(),isEmpty(),size()等方法即可.但是通过Set,将其中的内容取出来就不是像List那样,可以通过下标一个个的取出,而是通过Iterator(迭代器取出).Iterator是一个接口,有如下三个方法:其中第一个方法和第二个方法经常是配合使用,用于将Set中的元素一一取出.Iterator方法的工作原理如下图:使用迭代器的步骤:每一个Collection类都提供一个iterator()方法,这样每一个Set或者List都可以使用Iterator接口提供的方式遍历其中的每一个元素.因此步骤如下:1> 通过调用集合类的i
阅读全文
摘要:Object类的equals()方法特点: 四十五讲1> 自反性: x.equals(x)应该返回true.2> 对称性: x.equals(y)为true,那么y.equals(x)也为true;反之亦然.3> 传递性: x.equals(y)为true,并且y.equals(z)为true,那么x.equals(z)也应该为true;反之亦然.4> 一致性: x.equals(y)的第一次调用为true,那么x.equals(y)的第二次,第三次,第n次调用也应该为true,前提条件是在比较过程中没有修改x和y;反之亦然.5> 对于非空引用x, x.equal
阅读全文
摘要:利用LinkedList自定义实现队列和栈:class Queue<T>{ private LinkedList<T> list = new LinkedList<T>(); public void put(T data) { this.list.addLast(data); } public T get() { return this.list.removeFirst(); } public boolean isEmpty() { return this.list.isEm...
阅读全文
摘要:集合中接口的关系框架:12345ArrayList:一些方法使用示例:package cn.edu.bupt.collection;import java.util.ArrayList;import java.util.List;public class ArrayListTest1{ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("hello"); list.add("world");
阅读全文
摘要:1、数组(Array):相同类型数据的集合就叫做数组.2、如何定义一个数组: 1>package cn.edu.bupt.array;public class ArrayStart{ public static void main(String[] args) { int[] a = new int[4]; //定义数组的格式 }}从new可以看书,数组是一种对象类型.type[] var = new type[len]; 2>package cn.edu.bupt.array;public class ArrayStart{ public sta...
阅读全文
摘要:1、包装类(Wrapper Class)。针对原生数据类型,将其包装成为对象放在程序中进行处理。 原生数据类型: 1> byte 2> short 3> int 4> long 5> float 6> double 7> char 8> boolean与之对应,相应的包装类也有八个: 1> Byte 2> Short 3> Integer 4> Long 5> Float 6> Double 7> Character 8> Boolean他们均位于java.lang包下public class In
阅读全文
摘要:Java 中的字符是Unicode编码的,是双字节的(即:1char = 2bytes)。而InputStream与OutputStream是用来处理字节或字节数组的,在处理字符文本的时候时不太方便,需要编写额外的程序代码。Java为字符文本的输入输出专门提供了一套单独的类,Reader、Writer两个抽象类与InputStream、OutputStream两个抽象类相对应,他们都有很多的子类,对具体的I/O设备进行字符输入输出,如:FileReader就是用来读取文件流中的字符的。Reader、Writer与InputStream、OutputStream用法相类似,唯一区别是前者处理字符
阅读全文
摘要:Java与C++不同,原生不支持默认参数,如C++public: void output(int i = 10) { cout << i << endl; }如果Java这样写方法,会出现编译错误,但是Java可以使用成员方法重载实现该功能:package cn.edu.bupt;public class DefaultParamTest{ public static void main(String[] args) { Test.output(); Test.output(20); }}class Test{ ...
阅读全文
摘要:java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成instance都有多种方式。所以只有弄清其中的原理,才可以深入理解。首先要生成Class对象,然后再生成Instance。那Class对象的生成方式有哪些呢,以及其中是如何秘密生成的呢?Class对象的生成方式如下: 1.Class.forName("类名字符串"); 2.类名.class; 3.实例对象.getClass();通过一段小程序,来观察一下Class对象的生成的原理。package cn.edu.bupt.reflectexample;public class TestClass
阅读全文
摘要:1、相等性的比较: 1> 对于原生数据类型来说,比较的是左右两边的值是否相等,例如boolean, int, char; 2> 对于引用类型数据来说,比较的是左右两边的引用是否指向同一个对象,或者说左右两边的引用地址值是否相同;例:public class InstanceTest{ public static void main(String[] args) { People p = new Man(); Man m = (Man)p; System.out.println(p == m); //print true }}...
阅读全文
摘要:1、访问修饰符(access modifier) public(公共的):被public所修饰的属性和方法可以被外界任何类直接访问。 protected(受保护的):被protected所修饰的属性和方法 可以在1类内部、2相同包、以及3该类的子孙类可以访问。例:C类:package cn.edu.bupt.common;public class C { protected int year = 2010;}D类:package cn.edu.bupt;import cn.edu.bupt.common.C;public class D extends C { publ...
阅读全文
摘要:1、包(package):用于将完成不同功能的类(.class文件)分门别类,放在不同的目录(包)下。包的命名规则:将公司域名反转作为包名。例如:域名:www.google.com.hk,因此包名可以是:hk.com.google,其右侧仍然可以加入子包名。2、包反应在硬盘上对应于目录结构,其目录结构是针对.class文件而言的,而非.java文件,即通过javac编译之后的.class文件要在硬盘上复合包所定义的目录结构,但是对于源文件.java,是没有这种约定的,可以放在任何目录上进行编译,但在执行.class的时候,需要“包名.类名”。对于包名,每个字母都需要小写(约定)。例如:hk.c
阅读全文
摘要:设计模式为我们的问题提供了一种更好的解决问题的方法。任何面向对象的语言都可以实现设计模式,这是通用的。设计模式大量的依靠多态实现。经典的设计模式有23个。单例模式(singleton):表示一个类只会生成唯一的一个对象。第一种实现方式(推荐,适应多线程环境):package cn.edu.bupt.designpattern;public class SingletonTest { public static void main(String[] args) { Singleton st1 = Singleton.getInstance(); Singleto...
阅读全文
摘要:1、static关键字:可以用于修饰属性,也可以用于修饰方法,还可用于修饰类。 a>static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量,即静态成员变量是属于类的,而不是某一个特定的对象的。一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。 如果一个成员变量是static的,那么我们可以“类名.成员变量名”的方式来使用它(Java推荐使用这种方式访问静态成员)。 b>static修饰方法:static修饰方法叫做静态方法,对于静态方法来说,可以使用“类名.成员方法名”进行访问。2、静态方法(static met
阅读全文
摘要:1、多态:父类型的引用可以指向子类型的实例对象,即子类就是父类;2、Parent p = new Child();p.sing();当使用多态的方式调用方法时,通过p引用调用其中成员时是面向Parent父类中的成员进行调用,即首先检查父类中是否有sing()方法,如果没有sing()方法,调用时将会发生编译错误;如果有,再去调用子类中覆写父类成员方法的sing()方法。3、一共有两种类型的类型转换: a> 向上类型转换(upcast):比如说将Cat类型转换为Animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定转换的类型,因为子类就是父类,属于自动类型转换。 b&g
阅读全文
摘要:1、类是一种抽象的概念,对象是类的一种具体表现形式,是具体的概念。先有类,然后由类来生成对象(Object)。对象又叫做实例(Instance);2、类由两大部分构成:属性及方法。属性一般由名词表示,方法一般由动词表示;3、如果一个Java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,换句话说,定义的多个类可以都不是public的;4、在Java中进行方法的参数传递时,无论传递的是原生数据类型还是引用类型,参数传递的方式统一是值传递(pass by value),Java中没有传引用(pass by reference)的概念;5、方法重载(Overload):表示两个或
阅读全文
摘要:1、如果一个类包含了属性和方法,那么该类的每一个对象都具有自己的属性,但是无论一个类有多少个对象,这些对象共享同一个方法。2、关于方法参数传递的总结:对于Java中的方法参数传递,无论传递的是原生数据类型还是引用类型,统一是值传递(pass by value)。3、什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但是不能指向Student类型的对象。比如:People people = new People(); //正确People people = new Student(); //错误4、构造方法(Constructor):构造...
阅读全文