java各封装方法
- 格式:docx
- 大小:43.13 KB
- 文档页数:27
java中封装pagehelper的方法PageHelper 是一个常用的分页插件,它可以帮助我们快速实现分页功能,提高开发效率。
在 Java 开发中,封装 PageHelper 的方法可以帮助我们更好地管理和使用它。
下面我将介绍一种封装 PageHelper 的方法,供大家参考。
一、封装前的准备工作在封装 PageHelper 之前,我们需要先了解它的功能和使用方法。
PageHelper 提供了多种分页查询的方法,如 Skip 和 Take 方法的封装等。
同时,它还支持自定义条件查询和分页参数的设置。
因此,我们需要根据实际需求对PageHelper 进行封装。
二、封装的步骤1. 创建一个新的类,用于封装 PageHelper。
在该类中,我们可以定义一些公共的方法和变量,以便其他类调用和使用。
2. 在该类中,我们可以实现一个静态的初始化方法,用于初始化PageHelper 插件。
这个方法可以根据我们的配置和需要,加载相关的数据库驱动和配置信息。
3. 在封装的方法中,我们可以根据传入的参数(如分页的起始位置、每页的大小等)和自定义的条件进行分页查询。
查询结果可以根据需要返回实体类或数据列表。
4. 对于需要显示的数据列表,我们可以提供一个简单的转换方法,将结果转换成适合显示的格式(如 JSON 或 XML)。
5. 最后,我们可以在类的其他方法中调用封装的分页查询方法,使用户能够更加方便地使用 PageHelper。
三、示例代码下面是一个简单的示例代码,展示如何封装 PageHelper:```javapublic class PageHelperWrapper {// 初始化 PageHelper 插件public static void init(String driver) {// 根据实际需要加载数据库驱动和配置信息}// 分页查询方法,根据传入的参数进行分页查询public static List<Entity> paginate(int currentPage, int pageSize, String condition) {// 根据条件进行分页查询,返回实体类列表}// 转换方法,将结果转换成适合显示的格式public static String convert(List<Entity> entities) {// 将实体类列表转换成 JSON 或 XML 等格式return JSON.toJSONString(entities);}}```四、使用方法在使用封装后的 PageHelper 方法时,我们只需要按照以下步骤进行操作:1. 初始化 PageHelper 插件:调用 PageHelperWrapper 类的 init 方法,传入数据库驱动信息。
java计算百分比保留两位小数封装方法在Java中,计算百分比并保留两位小数可以使用以下方法进行封装:```javapublic class PercentageUtilspublic static double calculatePercentage(double value,double total)if (total == 0)throw new IllegalArgumentE某ception("Total value cannot be zero.");}double percentage = (value / total) 某 100;return Math.round(percentage 某 100.0) / 100.0; // 保留两位小数}public static void main(String[] args)double value = 75;double total = 100;double percentage = calculatePercentage(value, total);System.out.println("Percentage: " + percentage + "%");}```在上面的例子中,`calculatePercentage(` 方法接受两个参数value 和 total,其中 value 是要计算百分比的值,total 是总值。
计算百分比的公式为 `(value / total) 某 100`,然后使用`Math.round(` 方法保留两位小数。
最后,通过 `System.out.println(` 输出结果。
在方法中,还添加了一个异常处理,如果 total 的值为零,会抛出IllegalArgumentE某ception 异常,表示总值不能为零。
该封装方法具有如下特点:-通过封装成静态方法可直接调用,无需实例化对象。
Java语言基本数据类型、转换及其封装Java语言基本数据类型、转换及其封装1. 逻辑类型·常量 true,false。
·变量的定义使用关键字boolean来定义逻辑变量:boolean x; boolean tom_12;也可以一次定义几个:boolean x,tom,jiafei,漂亮x,tom,jiafei,漂亮都是变量的名字。
定义时也可以赋给初值:boolean x=true,tom=false,漂亮=true,jiafei2.整数类型·常量123,6000(十进制),077(八进制),0x3ABC(十六进制)。
·整型变量的定义分为4种:1.int 型使用关键字int来定义int型整形变量int xint tom_12也可以定义几个:int x,tom,jiafei,漂亮x,tom,jiafei,漂亮都是名字。
定义时也可以赋给初值:int x=12,tom=-1230,漂亮=9898,jiafei对于int型变量,分配给4个字节byte,一个字节由8位(bit)组成,4个字节占32位(bit)。
bit 有两状态,分别用来表示0,1。
这样计算机就可以使用2进制数来存储信息了。
内存是一种特殊的电子元件,如果把内存条放大到摩天大楼那么大,那么它的基本单位——字节,就好比是大楼的房间,每个房间的结构都是完全相同的,一个字节由8个能显示两种状态的bit组成,就好比每个房间里有8个灯泡,每个灯泡有两种状态——亮灯灭灯。
对于int x=7;内存存储状态如下:00000000 00000000 00000000 00000111最高位:左边的第一位,是符号位,用来区分正数或负数,正数使用原码表示,最高位是0,负数用补码表示,最高位是1。
例如:int x=-8;内存的存储状态如下:11111111 11111111 11111111 11111000要得到-8的补码,首先得到7的原码,然后将7的原码中的0变成1,1变成0,就是-8的补码。
java封装的使用方法Java封装是面向对象编程的重要概念之一,其作用是将类的实现细节隐藏起来,只暴露出必要的接口给外部使用,从而提高代码的可维护性、安全性和易用性。
下面是Java中封装的使用方法:1. 访问控制符Java中有三种访问控制符:public、protected和private。
它们的作用分别是:- public:公共的,可以被所有类访问。
- protected:受保护的,可以被同一个包内的类和子类访问。
- private:私有的,只能被本类访问。
在Java中,我们可以通过访问控制符来限制类的属性和方法的访问权限,从而实现封装。
2. Getter和Setter方法Getter和Setter方法是封装的重要手段。
Getter方法用于获取类的私有属性,而Setter方法用于设置类的私有属性。
这样,我们就可以通过Getter和Setter方法来访问类的私有属性了。
例如,我们可以定义一个Person类,其中包含私有属性name和age,并提供对应的Getter和Setter方法:public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}3. 构造方法构造方法是创建对象的重要手段,也可以用来实现封装。
我们可以在构造方法中设置类的属性,从而在创建对象时就完成封装。
例如,我们可以在Person类中添加一个构造方法:public class Person {private String name;private int age;public Person(String name, int age) { = name;this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}在创建Person对象时,我们就可以使用构造方法来设置其属性: Person p = new Person('张三', 20);4. final关键字final关键字可以用来修饰类、属性和方法,表示它们不可改变。
在Java中,封装是面向对象编程的重要特性之一,它允许你将数据和操作封装在类中,通过公共方法提供对数据的访问。
下面是封装的基本步骤:1.将属性声明为私有:–为了封装一个类的属性,首先需要将它们声明为私有的,这样它们就不能直接被外部访问。
这可以通过在属性前面加上private关键字来实现。
public class MyClass {private int myField;// 其他代码}2.提供公共方法:–为了允许外部访问和修改类的私有属性,你需要提供公共的getter 和setter方法。
这些方法可以提供对私有属性的读取和修改操作,同时也可以在方法内部进行一些逻辑校验或处理。
public class MyClass {private int myField;public int getMyField(){return myField;}public void setMyField(int myField){this.myField= myField;}// 其他代码}3.对属性进行访问控制:–在getter和setter方法中,你可以添加一些条件语句或逻辑处理,以控制对属性的访问。
这可以帮助你确保属性值的合法性,或在修改属性时执行一些额外的操作。
public class MyClass {private int myField;public int getMyField(){return myField;}public void setMyField(int myField){if(myField >=0){this.myField= myField;}else{System.out.println("Invalid value. Please provide a n on-negative integer.");}}// 其他代码}封装可以提高代码的安全性和可维护性,同时也能帮助你控制对类的访问,并保护类的内部实现细节。
java中八个基本类型的包装类型-概述说明以及解释1.引言1.1 概述概述在Java编程语言中,有八个基本数据类型,即整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)。
尽管这些基本类型在编程中非常有用,但它们并不是对象,因此无法直接进行操作和传递。
为了解决这个问题,Java提供了对应的包装类型,也就是每个基本类型所对应的类。
在Java中,对于每个基本类型都有相应的包装类:Byte、Short、Integer、Long、Float、Double、Character和Boolean。
这些包装类是在Java的标准库中预先定义好的,并提供了许多有用的方法和属性,以便进行更复杂的操作。
在本文中,我们将详细探讨每个基本类型的包装类型,探索它们的作用和优势,以及它们与基本类型之间的关系。
我们还将对Java编程中使用这些包装类型的重要性和应用场景进行讨论。
接下来的章节将深入研究这些方面,并解释为什么在某些情况下使用包装类型是有益的。
我们还将总结基本类型和包装类型的特点,并探讨它们在Java编程中的重要性。
让我们开始这个有趣的探索吧!1.2文章结构1.2 文章结构本篇文章将围绕Java中八个基本类型的包装类型展开讨论。
以下是文章的主要结构:1. 引言:引言部分将提供对Java基本类型和包装类型的简要概述,介绍它们在编程中的作用和使用场景。
2. 正文:2.1 基本类型和包装类型的关系:这一部分将详细探讨基本类型和包装类型之间的关系,包括各种基本类型对应的包装类型的命名规则和特点。
2.2 包装类型的作用和优势:文章将进一步介绍包装类型的作用和优势。
我们将探讨包装类型的主要用途,如提供更多的功能和方法,和基本类型在集合操作中的应用等。
3. 结论:3.1 总结基本类型和包装类型的特点:这一部分将对前文的内容进行总结,重点强调基本类型和包装类型之间的差异和共性,以及使用时需注意的一些问题。
Java中封装、继承、多态的理解Java中的继承、封装、多态继承的理解:1、继承是⾯向对象的三⼤特征之⼀,也是实现代码复⽤的重要⼿段。
Java的继承具有单继承的特点,每个⼦类只有⼀个直接⽗类。
2、Java的继承通过extends关键字来实现,实现继承的类被称为⼦类,被继承的类称为⽗类(有的也称其为基类、超类),⽗类和⼦类的关系,是⼀种⼀般和特殊的关系。
就像是⽔果和苹果的关系,苹果继承了⽔果,苹果是⽔果的⼦类,⽔果是苹果的⽗类,则苹果是⼀种特殊的⽔果。
3、Java使⽤extends作为继承的关键字,extends关键字在英⽂是扩展的意思,⽽不是继承。
为什么国内把extends翻译成继承呢?除了与历史原因有关外,把extends翻译成为继承也是有其道理的:⼦类扩展⽗类,将可以获得⽗类的全部属性和⽅法,这与汉语中得继承(⼦辈从⽗辈那⾥获得⼀笔财富成为继承)具有很好的类似性。
值得指出的是:Java的⼦类不能获得⽗类的构造器。
4、实例:class BaseClass{public double weight;public void info() {System.out.println("我的体重是"+weight+"千克");}}public class ExtendsDemo001 extends BaseClass {public static void main(String[] args) {//创建ExtendsDemo001对象ExtendsDemo001 ed = new ExtendsDemo001();//ExtendsDemo001本⾝没有weight属性,但是ExtendsDemo001的⽗类有weight属性,也可以访问ExtendsDemo001对象的属性ed.weight = 56;//调⽤ExtendsDemo001对象的info()⽅法();}}打印结果为:我的体重是56.0千克5、Java类只能有⼀个⽗类。
java封装的概念
Java中的封装是指将数据和方法打包成一个独立的单元,并限制外部访问该单元的方式。
通过封装,可以隐藏实现细节,保护数据,提高代码的安全性和可维护性。
Java中的封装主要采用访问修饰符来实现,包括public、private、protected和默认访问修饰符。
通过在类中使用private 修饰符来限制外部访问类的成员变量和方法,只有类内部的方法才能访问这些成员。
同时,可以通过public修饰符来提供对外的接口,使得外部可以使用类中的方法来操作成员变量。
另外,Java中还提供了getter和setter方法来访问和修改私有成员变量。
通过getter方法,可以获取私有成员变量的值,通过setter方法,可以修改私有成员变量的值。
这种方式可以使得类的使用更加灵活,同时也保护了数据的安全性。
总之,封装是Java面向对象编程中非常重要的一个概念,它可以使代码更加安全、可维护和灵活。
在实际应用中,需要根据具体的业务需求和设计原则来合理地使用封装。
- 1 -。
jar封装方法
JAR(Java Archive)文件是一种用于分发Java应用程序、库或组件的归档文件格式。
使用JAR文件可以方便地将多个Java类文件打包在一起,以便于分发、部署和管理。
要将Java类文件封装到一个JAR文件中,可以使用Java Development Kit(JDK)中的jar命令或使用一些集成开发环境(IDE)提供的工具。
以下是使用jar命令将Java类文件封装到JAR文件中的步骤:
1. 打开命令行终端,并进入包含要打包的Java类文件的目录。
2. 运行以下命令以创建一个新的JAR文件:
```shell
jar cvf com/mypackage/.class
```
其中,``是要创建的JAR文件的名称,`com/mypackage/.class`是要打包的Java类文件的路径和通配符。
在这个例子中,我们将所有在
`com/mypackage/`目录下的`.class`文件打包到``文件中。
3. 等待命令执行完成,这将创建一个包含指定Java类文件的JAR文件。
注意,在打包过程中,可能会提示您输入密码或提供其他凭据,具体取决于您的操作系统和安全设置。
一旦您创建了JAR文件,您可以将它与其他应用程序一起使用,例如作为Web应用程序的库或组件。
要使用该JAR文件中的类,您需要在您的Java 项目中将其添加为依赖项,并在代码中导入相应的包和类。
java封装方法并调用Java中的封装是一种重要的面向对象编程概念,它允许开发人员将代码逻辑、数据和操作隐藏在类中,并限制外部访问。
这样可以提高代码的模块性,减少代码重复和错误,并提高数据的安全性。
本文将详细介绍Java如何封装方法以及如何调用这些方法。
一、封装方法Java中的方法可以被封装在类中,以供其他类调用。
封装方法的过程包括以下步骤:1.创建一个类首先,在开发过程中,需要创建一个类。
可以使用以下语法创建一个名为“Car”的类。
public class Car {}2.定义私有变量接下来,需要定义私有的变量,这些变量只能在类中访问。
可以使用以下语法定义一个名为“color”的私有实例变量。
private String color;3.创建公共的方法接下来,需要创建公共的方法,这些方法可以被其他类访问。
可以使用以下语法创建一个名为“getColor”的公共方法,以获取私有变量“color”的值。
“public”关键字表示这是一个公共方法,“String”表示方法将返回一个字符串值,“getColor”是方法的名称。
public String getColor() {return color;}4.创建公共的方法以设置私有变量同样地,也需要创建一个公共方法以设置私有变量。
可以使用以下语法创建一个名为“setColor”的公共方法,以设置私有变量“color”的值。
该方法需要一个名为“newColor”的字符串参数。
public void setColor(String newColor) {color = newColor;}完成以上四个步骤后,可以将方法封装在类中。
现在,“Car”类包含私有变量“color”和两个公共方法“getColor”和“setColor”。
二、调用方法现在,“Car”类已经包含两个公共方法,“getColor”和“setColor”,可以使用以下步骤调用这些方法。
1.创建一个类实例首先,在开发过程中,需要创建一个“Car”的实例。
Java经典实例(第二版)1. 获取环境变量Java代码1. System.getenv("PATH");2. System.getenv("JAVA_HOME");2. 获取系统属性Java代码1. System.getProperty("pencil color"); // 得到属性值2. java -Dpencil color=green3. System.getProperty("java.specification.version"); // 得到Java版本号4. Properties p = System.getProperties(); // 得到所有属性值5. p.list(System.out);3. StringTokenizerJava代码1. // 能够同时识别, 和 |2. StringTokenizer st = new StringTokenizer("Hello, World|of|Java", ", |");3. while (st.hasMoreElements()) {4. st.nextToken();5. }6.7. // 把分隔符视为token8. StringTokenizer st = new StringTokenizer("Hello, World|of|Java", ", |", true);4. StringBuffer(同步)和StringBuilder(非同步)Java代码1. StringBuilder sb = new StringBuilder();2. sb.append("Hello");3. sb.append("World");4. sb.toString();5. new StringBuffer(a).reverse(); // 反转字符串5. 数字Java代码1. // 数字与对象之间互相转换 - Integer转int2. Integer.intValue();3.4. // 浮点数的舍入5. Math.round()6.7. // 数字格式化8. NumberFormat9.10. // 整数 -> 二进制字符串11. toBinaryString() 或valueOf()12.13. // 整数 -> 八进制字符串14. toOctalString()15.16. // 整数 -> 十六进制字符串17. toHexString()18.19. // 数字格式化为罗马数字20. RomanNumberFormat()21.22. // 随机数23. Random r = new Random();24. r.nextDouble();25. r.nextInt();6. 日期和时间Java代码1. // 查看当前日期2. Date today = new Date();3. Calendar.getInstance().getTime();4.5. // 格式化默认区域日期输出6. DateFormat df = DateFormat.getInstance();7. df.format(today);8.9. // 格式化制定区域日期输出10. DateFormat df_cn = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);11. String now = df_cn.format(today);12.13. // 按要求格式打印日期14. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddhh:mm:ss");15. sdf.format(today);16.17. // 设置具体日期18. GregorianCalendar d1 = new GregorianCalendar(2009, 05,06); // 6月6日19. GregorianCalendar d2 = new GregorianCalendar(); // 今天20. Calendar d3 = Calendar.getInstance(); // 今天21. d1.getTime(); // Calendar或GregorianCalendar转成Date格式22. d3.set(Calendar.YEAR, 1999);23. d3.set(Calendar.MONTH, Calendar.APRIL);24. d3.set(Calendar.DAY_OF_MONTH, 12);25.26. // 字符串转日期27. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");28. Date now = sdf.parse(String);29.30. // 日期加减31. Date now = new Date();32. long t = now.getTime();33. t += 700*24*60*60*1000;34. Date then = new Date(t);35.36. Calendar now = Calendar.getInstance();37. now.add(Calendar.YEAR, -2);38.39. // 计算日期间隔(转换成long来计算)40. today.getTime() - old.getTime();41.42. // 比较日期43. Date 类型,就使用equals(), before(), after()来计算44. long类型,就使用==, <, >来计算45.46. // 第几日47. 使用 Calendar的get()方法48. Calendar c = Calendar.getInstance();49. c.get(Calendar.YEAR);50.51. // 记录耗时52. long start = System.currentTimeMillis();53. long end = System.currentTimeMillis();54. long elapsed = end - start;55. System.nanoTime(); //毫秒56.57. // 长整形转换成秒58. Double.toString(t/1000D);7. 结构化数据Java代码1. // 数组拷贝2. System.arrayCopy(oldArray, 0, newArray, 0, oldArray.length);3.4. // ArrayList5. add(Object o) // 在末尾添加给定元素6. add(int i, Object o) // 在指定位置插入给定元素7. clear() // 从集合中删除全部元素8. Contains(Object o) // 如果Vector包含给定元素,返回真值9. get(int i) // 返回指定位置的对象句柄10. indexOf(Object o) // 如果找到给定对象,则返回其索引值;否则,返回-111. remove(Object o) // 根据引用删除对象12. remove(int i) // 根据位置删除对象13. toArray() // 返回包含集合对象的数组14.15. // Iterator16. List list = new ArrayList();17. Iterator it = list.iterator();18. while (it.hasNext())19. Object o = it.next();20.21. // 链表22. LinkedList list = new LinkedList();23. ListIterator it = list.listIterator();24. while (it.hasNext())25. Object o = it.next();26.27. // HashMap28. HashMap<String, String> hm = new HashMap<String, String>();29. hm.get(key); // 通过key得到value30. hm.put("No1", "Hexinyu");31. hm.put("No2", "Sean");32. // 方法1: 获取全部键值33. Iterator<String> it = hm.values().iterator();34. while (it.hasNext()) {35. String myKey = it.next();36. String myValue = hm.get(myKey);37. }38. // 方法2: 获取全部键值39. for (String key : hm.keySet()) {40. String myKey = key;41. String myValue = hm.get(myKey);42. }43.44. // Preferences - 与系统相关的用户设置,类似名-值对45. Preferences prefs =erNodeForPackage(ArrayDemo.class);46. String text = prefs.get("textFontName", "lucida-bright");47. String display = prefs.get("displayFontName","lucida-balckletter");48. System.out.println(text);49. System.out.println(display);50. // 用户设置了新值,存储回去51. prefs.put("textFontName", "new-bright");52. prefs.put("displayFontName", "new-balckletter");53.54. // Properties - 类似名-值对,key和value之间,可以用"=",":"或空格分隔,用"#" 和"!"注释55. InputStream in =MediationServer.class.getClassLoader().getResourceAsStream("msconfig. properties");56. Properties prop = new Properties();57. prop.load(in);58. in.close();59. prop.setProperty(key, value);60. prop.getProperty(key);61.62. // 排序63. 1. 数组:Arrays.sort(strings);64. 2. List:Collections.sort(list);65. 3. 自定义类:class SubComp implements Comparator66. 然后使用Arrays.sort(strings, new SubComp())67.68. // 两个接口69. 1. parable: 提供对象的自然排序,内置于类中70. int compareTo(Object o);71. boolean equals(Object o2);72. 2. parator: 提供特定的比较方法73. int compare(Object o1, Object o2)74.75. // 避免重复排序,可以使用TreeMap76. TreeMap sorted = new TreeMap(unsortedHashMap);77.78. // 排除重复元素79. Hashset hs - new HashSet();80.81. // 搜索对象82. binarySearch(): 快速查询 - Arrays, Collections83. contains(): 线型搜索 - ArrayList, HashSet, Hashtable, linkedList, Properties, Vector84. containsKey(): 检查集合对象是否包含给定 - HashMap, Hashtable, Properties, TreeMap85. containsValue(): 主键(或给定值) - HashMap, Hashtable, Properties, TreeMap86. indexOf(): 若找到给定对象,返回其位置 - ArrayList, linkedList, List, Stack, Vector87. search(): 线型搜素 - Stack88.89. // 集合转数组90. toArray();91.92. // 集合总结93. Collection: Set - HashSet, TreeSet94. Collection: List - ArrayList, Vector, LinkedList95. Map: HashMap, HashTable, TreeMap8. 泛型与foreachJava代码1. // 泛型2. List<String> myList = new ArrayList<String>();3.4. // foreach5. for (String s : myList) {6. System.out.println(s);7. }9. 面向对象Java代码1. // toString()格式化2. public class ToStringWith {3. int x, y;4. public ToStringWith(int anX, int aY) {5. x = anX;6. y = aY;7. }8. public String toString() {9. return "ToStringWith[" + x + "," + y + "]";10. }11. public static void main(String[] args) {12. System.out.println(new ToStringWith(43, 78));13. }14. }15.16. // 覆盖equals方法17. public boolean equals(Object o) {18. if (o == this) // 优化19. return true;20. if (!(o instanceof EqualsDemo)) // 可投射到这个类21. return false;22. EqualsDemo other = (EqualsDemo)o; // 类型转换23. if (int1 != other.int1) // 按字段比较24. return false;25. if (!obj1.equals(other.obj1))26. return false;27. return true;28. }29.30. // 覆盖hashcode方法31. private volatile int hashCode = 0; //延迟初始化32. public int hashCode() {33. if (hashCode == 0) {34. int result = 17;35. result = 37 * result + areaCode;36. }37. return hashCode;38. }39.40. // Clone方法41. 要克隆对象,必须先做两步: 1. 覆盖对象的clone()方法; 2. 实现空的Cloneable接口42. public class Clone1 implements Cloneable {43. public Object clone() {44. return super.clone();45. }46. }47.48. // Finalize方法49. Object f = new Object() {50. public void finalize() {51. System.out.println("Running finalize()");52. }53. };54. Runtime.getRuntime().addShutdownHook(new Thread() {55. public void run() {56. System.out.println("Running Shutdown Hook");57. }58. });59. 在调用System.exit(0);的时候,这两个方法将被执行60.61. // Singleton模式62. // 实现163. public class MySingleton() {64. public static final MySingleton INSTANCE = new MySingleton();65. private MySingleton() {}66. }67. // 实现268. public class MySingleton() {69. public static MySingleton instance = new MySingleton();70. private MySingleton() {}71. public static MySingleton getInstance() {72. return instance;73. }74. }75.76. // 自定义异常77. Exception: 编译时检查78. RuntimeException: 运行时检查79. public class MyException extends RuntimeException {80. public MyException() {81. super();82. }83. public MyException(String msg) {84. super(msg);85. }86. }10. 输入和输出Java代码1. // Stream, Reader, Writer2. Stream: 处理字节流3. Reader/Writer: 处理字符,通用Unicode4.5. // 从标准输入设备读数据6. 1. 用System.in的BufferedInputStream()读取字节7. int b = System.in.read();8. System.out.println("Read data: " + (char)b); // 强制转换为字符9. 2. BufferedReader 读取文本10. 如果从Stream转成Reader,使用 InputStreamReader类11. BufferedReader is = new BufferedReader(new12. InputStreamReader(System.in));13. String inputLine;14. while ((inputLine = is.readLine()) != null) {15. System.out.println(inputLine);16. int val = Integer.parseInt(inputLine); // 如果inputLine为整数17. }18. is.close();19.20. // 向标准输出设备写数据21. 1. 用System.out的println()打印数据22. 2. 用PrintWriter打印23. PrintWriter pw = new PrintWriter(System.out);24. pw.println("The answer is " + myAnswer + " at this time.");25.26. // Formatter类27. 格式化打印内容28. Formatter fmtr = new Formatter();29. fmtr.format("%1$04d - the year of %2$f", 1951, Math.PI);30. 或者System.out.printf();或者System.out.format();31.32. // 原始扫描33. void doFile(Reader is) {34. int c;35. while ((c = is.read()) != -1) {36. System.out.println((char)c);37. }38. }39.40. // Scanner扫描41. Scanner 可以读取File, InputStream, String, Readable42. try {43. Scanner scan = new Scanner(new File("a.txt"));44. while (scan.hasNext()) {45. String s = scan.next();46. }47. } catch (FileNotFoundException e) {48. e.printStackTrace();49. }50. }51.52. // 读取文件53. BufferedReader is = new BufferedReader(newFileReader("myFile.txt"));54. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bytes.bat"));55. is.close();56. bos.close();57.58. // 复制文件59. BufferedIutputStream is = new BufferedIutputStream(new FileIutputStream("oldFile.txt"));60. BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream("newFile.txt"));61. int b;62. while ((b = is.read()) != -1) {63. os.write(b);64. }65. is.close();66. os.close();67.68. // 文件读入字符串69. StringBuffer sb = new StringBuffer();70. char[] b = new char[8192];71. int n;72. // 读一个块,如果有字符,加入缓冲区73. while ((n = is.read(b)) > 0) {74. sb.append(b, 0, n);75. }76. return sb.toString();77.78. // 重定向标准流79. String logfile = "error.log";80. System.setErr(new PrintStream(newFileOutputStream(logfile)));81.82. // 读写不同字符集文本83. BufferedReader chinese = new BufferedReader(new InputStreamReader(new FileInputStream("chinese.txt"), "ISO8859_1"));84. PrintWriter standard = new PrintWriter(new OutputStreamWriter(new FileOutputStream("standard.txt"), "UTF-8"));85.86. // 读取二进制数据87. DataOutputStream os = new DataOutputStream(new FileOutputStream("a.txt"));88. os.writeInt(i);89. os.writeDouble(d);90. os.close();91.92. // 从指定位置读数据93. RandomAccessFile raf = new RandomAccessFile(fileName, "r"); // r表示已只读打开94. raf.seek(15); // 从15开始读95. raf.readInt();96. raf.radLine();97.98. // 串行化对象99. 对象串行化,必须实现Serializable接口100. // 保存数据到磁盘101. ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(FILENAME)));102. os.writeObject(serialObject);103. os.close();104. // 读出数据105. ObjectInputStream is = new ObjectInputStream(new FileInputStream(FILENAME));106. is.readObject();107. is.close();108.109. // 读写Jar或Zip文档110. ZipFile zippy = new ZipFile("a.jar");111. Enumeration all = zippy.entries(); // 枚举值列出所有文件清单112. while (all.hasMoreElements()) {113. ZipEntry entry = (ZipEntry)all.nextElement();114. if (entry.isFile())115. println("Directory: " + entry.getName()); 116.117. // 读写文件118. FileOutputStream os = newFileOutputStream(entry.getName());119. InputStream is = zippy.getInputStream(entry);120. int n = 0;121. byte[] b = new byte[8092];122. while ((n = is.read(b)) > 0) {123. os.write(b, 0, n);124. is.close();125. os.close();126. }127. }128.129. // 读写gzip文档130. FileInputStream fin = new FileInputStream(FILENAME); 131. GZIPInputStream gzis = new GZIPInputStream(fin);132. InputStreamReader xover = new InputStreamReader(gzis); 133. BufferedReader is = new BufferedReader(xover);134. String line;135. while ((line = is.readLine()) != null)136. System.out.println("Read: " + line);11. 目录和文件操作Java代码1. // 获取文件信息2. exists(): 如果文件存在,返回true3. getCanonicalPath(): 获取全名4. getName(): 文件名5. getParent(): 父目录6. canRead(): 如果文件可读,返回true7. canWrite(): 如果文件可写,返回true8. lastModified(): 文件更新时间9. length(): 文件大小10. isFile(): 如果是文件,返回true11. ifDirectory(): 如果是目录,返回true12. 要调用文件的这些方法,必须13. File f = new File(fileName);14.15. // 创建文件16. File f = new File("c:\\test\\mytest.txt");17. f.createNewFile(); // 创建mytest.txt文件到test目录下18.19. // 修改文件名20. File f = new File("c:\\test\\mytest.txt");21. f.renameTo(new File("c:\\test\\google.txt"));22. 把 mytest.txt修改成google.txt23.24. // 删除文件25. File f = new File("c:\\test\\mytest.txt");26. f.delete();27.28. // 临时文件29. File f = new File("C:\\test"); // 指定一个文件夹30. // 在test文件夹中创建foo前缀,tmp后缀的临时文件31. File tmp = File.createTempFile("foo", "tmp", f);32. tmp.deleteOnExit(); // 在程序结束时删除该临时文件33.34. // 更改文件属性35. setReadOnly(): 设置为只读36. setlastModified(): 设置最后更改时间37.38. // 列出当前文件夹的文件列表39. String[] dir = new java.io.File(".").list();40. java.util.Arrays.sort(dir);41. for (int i = 0; i < dir.length; i++) {42. System.out.println(dir[i]);43. }44.45. // 过滤文件列表46. class OnlyJava implements FilenameFilter {47. public boolean accept(File dir, String s) {48. if (s.endsWith(".java") || s.endsWith(".class") || s.endsWith(".jar"))49. return true;50. }51. }52.53. // 获取根目录54. File[] rootDir = File.listRoots();55. for (int i = 0; i < rootDir.length; i++) {56. System.out.println(rootDir[i]);57. }58.59. // 创建新目录60. new File("/home/ian/bin").mkdir(); // 如果"/home/ian"存在,则可以创建bin目录61. new File("/home/ian/bin").mkdirs(); // 如果"/home/ian"不存在,会创建所有的目录12. 国际化和本地化Java代码1. // I18N资源2. ResourceBundle rb = ResourceBundle.getBundle("Menus");3. String label = rb.getString("bel");4. // ResourceBundle相当于名值对,获取Menus按钮的区域属性5. Menus_cn.properties: 不同区域的属性文件6.7. // 列出有效区域8. Locale[] list = Locale.getAvailableLocales();9.10. // 指定区域11. Locale cnLocale = Locale.CHINA;12.13. // 设置默认区域14. Locale.setDefault(Locale.CHINA);15.16. // 格式化消息17. public class MessageFormatDemo {18. static Object[] data = {19. new java.util.Date(),20. "myfile.txt",21. "could nto be opened"22. };23. public static void main(String[] args) {24. String result = MessageFormat.format("At {0,time} on {0,date}, {1} {2}.", data);25. System.out.println(result);26. }27. }28. 输出: At 10:10:08 on 2009-6-18, myfile.txt could nto be opened.29.30. // 从资源文件中读消息31. Widgets.properties 在com.sean.cook.chap11下32. ResourceBundle rb =ResourceBundle.getBundle("com.sean.cook.chap11.Widgets");33. String propt = rb.getString("filedialogs.cantopen.string");34. String result =MessageFormat.format(rb.getString("filedialogs.cantopen.format"), data);13. 网络客户端Java代码1. // 访问服务器2. Socket socket = new Socket("127.0.0.1", 8080);3. // todo something4. socket.close();5.6. // 查找网络地址7. InetAddress.getByName(hostName).getHostAddress()); // 根据主机名得到IP地址8. InetAddress.getByName(ipAddr).getHostName()); // 根据IP地址得到主机名9.10. // 连接具体异常11. UnknownHostException12. NoRouteToHostException13. ConnectException14.15. // Socket读写文本数据16. BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));17. String remoteTime = in.readline();18. PrintWriter out = new PrintWriter(socket.getOutputStream(), true);19. out.print("send message to client \r\n");20. out.flush();21.22. // Socket读写二进制数据23. DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));24. long remoteTime = (long)(in.readUnsignedByte() << 24);25. DataOutputStream out = newDataOutputStream(socket.getOutputStream(), true);26.27. // Socket读写串行化数据28. ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));29. Object o = in.readObject();30. if (o instanceof Date) // 验证对象类型31. ObjectOutputStream out = newObjectOutputStream(socket.getOutputStream(), true);32.33. // UDP数据报34. private final static int PACKET_SIZE = 1024;35.36. String host = "EV001B389673DE";37. InetAddress serverAddr = InetAddress.getByName(host);38. DatagramSocket socket = new DatagramSocket();39. byte[] buffer = new byte[PACKET_SIZE]; // 分配数据缓冲空间40. DatagramPacket packet = new DatagramPacket(buffer, PACKET_SIZE, serverAddr, 8080);41. packet.setLength(PACKET_SIZE-1); // 设置数据长度42. socket.send(packet);43. socket.receive(packet); // 接收数据14. 服务器端: SocketJava代码1. // 创建ServerSocket2. ServerSocket serverSocket;3. Socket clientSocket;4.5. serverSocket = new ServerSocket(9999);6. while ((clientSocket = serverSocket.accept()) != null) {7. System.out.println("Accept from client " +s.getInetAddress());8. s.close();9. }10.11. // 监听内部网12. public static final short PORT = 9999;13. public static final String INSIDE_HOST = "acmewidgets-inside"; // 网络接口名14. public static final int BACKLOG = 10; // 待发数15. serverSocket = new ServerSocket(PORT, BACKLOG,InetAddress.getByName(INSIDE_HOST));16.17. // 返回相应对象18. ServerSocket serverSocket = new ServerSocket(9999);;19. Socket clientSocket;20. BufferedReader in = null;21. PrintWriter out = null;22. while (true) {23. clientSocket = serverSocket.accept();24. in = new BufferedReader(newInputStreamReader(clientSocket.getInputStream(), "8859_1"));25. out = new PrintWriter(newOutputStreamWriter(clientSocket.getOutputStream(), "8859_1"), true);26. String echoLine;27. while ((echoLine = in.readLine()) != null) {28. System.out.println("Read " + echoLine);29. out.print(echoLine + "\r\n");30. }31. }32. 以上例子返回字符串,如果返回二进制,则使用DataOutputStream;返回对象,使用ObjectOutputStream33.34. // 处理多客户端35. 需要把接收数据的处理放入多线程中36. public class EchoServerThreaded {37. public static final int ECHOPORT = 7;38. public static final int NUM_THREADS = 4;39.40. public static void main(String[] av) {41. new EchoServerThreaded(ECHOPORT, NUM_THREADS);42. }43.44. public EchoServerThreaded2(int port, int numThreads) {45. ServerSocket servSock;46. Socket clientSocket;47. try {48. servSock = new ServerSocket(ECHOPORT);49. } catch(IOException e) {50. throw new RuntimeException("Could not create ServerSocket " + e);51. }52. for (int i = 0; i < numThreads; i++) {53. new Handler(servSock, i).start();54. }55. }56. }57. class Handler extends Thread {58. ServerSocket servSock;59. int threadNumber;60.61. Handler(ServerSocket s, int i) {62. super();63. servSock = s;64. threadNumber = i;65. setName("Thread " + threadNumber);66. }67.68. public void run() {69. while (true) {70. try {71. System.out.println(getName() + " waiting");72. Socket clientSocket;73. synchronized (servSock) {74. clientSocket =servSock.accept();75. }76. System.out.println(getName() + " starting, IP=" + clientSocket.getInetAddress());77. BufferedReader is = new BufferedReader(new InputStreamReader(78. clientSocket.getInputStream()) );79. PrintStream os = newPrintStream(clientSocket.getOutputStream(), true);80. String line;81. while ((line = is.readLine()) != null) {82. os.print(line + "\r\n");83. os.flush();84. }85. System.out.println(getName() + " ENDED ");86. clientSocket.close();87. } catch (IOException ex) {88. System.out.println(getName() + ": IO Error on socket " + ex);89. return;90. }91. }92. }93. }94.95. // 使用SSL和JSSE保护Web服务器96. SSLServerSocketFactory ssf =(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();97. ServerSocket serverSocket = ssf.createServerSocket(8080);98.99. // Log4j100. Level 级别: DEBUG < INFO < WARN < ERROR < FATAL < OFF101. Appender: 输出信息102. ConsoleAppender: 输出控制台 System.out103.104. // 找到网络接口105. Enumeration list =NetworkInterface.getNetworkInterfaces();106. while (list.hasMoreElements()) {107. NetworkInterface iface =(NetworkInterface)list.nextElement();108. System.out.println(iface.getDisplayName());109. Enumeration addrs = iface.getInetAddresses();110. while (addrs.hasMoreElements()) {111. InetAddress addr =(InetAddress)addrs.nextElement();112. System.out.println(addr);113. }114. }15. Java MailJava代码1. // 发送Mail2. protected String msgRecIp = "hxydream@16";3. protected String msgSubject = "babytree";4. protected String msgCc = "nobody@";5. protected String msgBody = "test body";6. protected Session session;7. protected Message msg;8.9. public void doSend() {10. // 创建属性文件11. Properties props = new Properties();12. props.put("mail.smtp.host", "mailhost");13. // 创建Session对象14. session = Session.getDefaultInstance(props, null);15. session.setDebug(true);16. msg = new MimeMessage(session); // 创建邮件17. msg. setFrom(newInternetAddress("nobody@host.domain"));18. InternetAddress toAddr = newInternetAddress(msgRecIp);19. msg.addRecipient(Message.RecipientType.TO, toAddr);20. InternetAddress ccAddr = new InternetAddress(msgCc);21. msg.addRecipient(, ccAddr);22. msg.setSubject(msgSubject);23. msg.setText(msgBody);24. Transport.send(msg);25. }26.27. // 发送MIME邮件28. Multipart mp = new MimeMultipart();29. BodyPart textPart = new MimeBodyPart();30. textPart.setText(message_body); // 设置类型"text/plain"31. BodyPart pixPart = new MimeBodyPart();32. pixPart.setContent(html_data, "text/html");33. mp.addBodyPart(textPart);34. mp.addBodyPart(pixPart);35. mesg.setContent(mp);36. Transport.send(mesg);37.38. // 读Mail39. Store store = session.getStore(protocol);40. store.connect(host, user, password);41. Folder rf;42. rf = store.getFolder(root);43. rf = store.getDefaultFolder();44. rf.open(Folder.READ_WRITE);16. 数据库访问Java代码1. // JDO2. Properties p = new Properties();3. p.load(new FileInputStream("jdo.properties"));4. PersistenceManagerFactory pmf =JDOHelper.getPersistenceManagerFactory(p);5. PersistenceManager pm = pmf.getPersistenceManager();6. // 提交数据7. pm.currentTransaction().begin();8. if (o instanceof Collection) {9. pm.makePersistentAll((Collection) o);10. } else {11. pm.makePersistent(o);12. }13. pm.currentTransaction().commit();14. pm.close();15. // 取出数据16. Object[] data = new Object[3];17. pm.retrieveAll(data);18. for (int i = 0; i < data.length; i++) {19. System.out.println(data[i]);20. }21. pm.close();22.23. // 数据操作24. Class clz =Class.forName("oracle.jdbc.driver.OracleDriver");25. String dbUrl = "jdbc:oracle:thin:@192.168.0.23:1521#:nms";26. Connection conn = DriverManager.getConnection(dbUrl, "su", "1234");27. Statement stmt = conn.createStatement();28. ResultSet rs = stmt.executeQuery("select * from pmtable");29. while (rs.next()) {30. String name = rs.getString(1);31. String otherName = rs.getString("name");32. }33.34. // 使用PreparedStatement提高性能,除了查询,都使用executeUpdate执行操作35. PreparedStatement pstmt = conn.prepareStatement("select * from pmtable where name = ?");36. pstmt.setString(1, "sean");37. ResultSet rs = pstmt.executeQuery();38.39. // 调用存储过程40. CallableStatement cs = conn.prepareCall("{ call ListDefunctUsers }");41. ResultSet rs = cs.executeQuery();42.43. // 显示数据库表信息44. DatabaseMetaData meta = conn.getMetaData();45. meta.getDatabaseProductName();46. meta.getDatabaseProductVersion();47. meta.getDefaultTransactionIsolation();17. XMLSAX: 在读取文档提取相应的标记事件(元素起始、元素结束、文档起始) DOM: 在内存中构造与文档中元素相应的树,可以遍历、搜索、修改DTD: 验证文档是否正确JAXP: 用于XML处理的Java APICastor: 开源项目,用于Java对象与XML映射Java代码1. // 从对象中生成XML2. private final static String FILENAME = "serial.xml";3. public static void main(String[] args) throws IOException {4. String a = "hard work and best callback";5. new SerialDemoXML().write(a);6. new SerialDemoXML().dump();7. }8. public void write(Object obj) throws IOException {9. XMLEncoder os = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(FILENAME)));10. os.writeObject(obj);11. os.close();12. }13. public void dump() throws IOException {14. XMLDecoder out = new XMLDecoder(new BufferedInputStream(new FileInputStream(FILENAME)));15. System.out.println(out.readObject());16. out.close();17. }18. serial.xml 格式内容如下:19. <?xml version="1.0" encoding="UTF-8"?>20. <java version="1.6.0_02" class="java.beans.XMLDecoder">21. <string>hard work and best callback</string>22. </java>23. 控制台输出24. hard work and best callback25.26. // XSLT转换XML27. XSLT 可以用来对输出格式进行各种控制28. Transformer tx =TransformerFactory.newInstance().newTransformer(newStreamSource("people.xml"));29. tx.transform(new StreamSource("people.xml"), new StreamResult("people.html"));30.31. // 用SAX解析XML - 主要用于查找关键元素,不用全文遍历32. public SaxLister() throws SAXException, IOException {33. XMLReader parser =XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser ");34. parser.setContentHandler(new PeopleHandler());35. parser.parse("C:\\StudySource\\javacooksrc2\\xml\\peop le.xml");36. }37. class PeopleHandler extends DefaultHandler {38. boolean parent = false;39. boolean kids = false;40. public void startElement(String nsURI, String localName, String rawName, Attributes attr) throws SAXException {41. System.out.println("startElement: " + localName + "," + rawName);42. if (rawName.equalsIgnoreCase("name"))43. parent = true;44. if (rawName.equalsIgnoreCase("children"))45. kids = true;46. }。