java写文件乱码
StringBuffer sb = new StringBuffer();
sb.append("<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"b5d6e6\"");
sb.append("<tr>");
sb.append("<td bgcolor=\"#FFFFFE\" height=\"42\" colspan=\""+ (jsd.size()+1) +"\" align=\"center\"><b>" + dataSet.getTitle() + "</b></td>");
sb.append("</tr>");
sb.append("</tr>");
sb.append("</table>");
return sb.toString();
解决方法
使用
public static String ISOToInnerCode(String str) {
if (str == null)
return null;
try {
str = (new String(str.getBytes("ISO-8859-1"), "UTF-8")).trim();
} ......
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
package mypakage;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Admin {
private String id = "";
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void println(String para1,String para2){
System.out.println("para1=" ......
1、Java采用Unicode字符集,增加了对非拉丁语系的支持,一个汉字可以直接作为一个字符常量进行赋值而在C++中必须做为字符串处理
char chTemp = '我';
System.out.println(chTemp);
Java字符是一个16为的无符号整数,C++中为8位
2. Java标识符可以以美元符$开头,可含有所有十六进制值大于0xc0的Uniode码额
3.c++的允许整数的大小基于不同的执行环境,但是Java则不同,Java的int总是32位,而不管出于什么平台。short类型在不同类型的计算机中存储时候,高地位字节顺序可能有差异,所以尽量不用
4.Java中布尔类型boolean是一个独立的类型,而不像C++中bool代表1和0两个整数,所以布尔类型无法转换成数字
5.Java中浮点型默认为double类型,若要表示一个float类型的数值,需要有一个后缀f
6.变量重名错误,C++中下述代码,变量的重定义会导致隐藏先定义的变量
int i = 1;
while(1)
{
int i = 2;
……
}
而Java中上述代码会有两处错误首先是变量的重名,然后是while(true)布尔类型的错误 ......
1、Java采用Unicode字符集,增加了对非拉丁语系的支持,一个汉字可以直接作为一个字符常量进行赋值而在C++中必须做为字符串处理
char chTemp = '我';
System.out.println(chTemp);
Java字符是一个16为的无符号整数,C++中为8位
2. Java标识符可以以美元符$开头,可含有所有十六进制值大于0xc0的Uniode码额
3.c++的允许整数的大小基于不同的执行环境,但是Java则不同,Java的int总是32位,而不管出于什么平台。short类型在不同类型的计算机中存储时候,高地位字节顺序可能有差异,所以尽量不用
4.Java中布尔类型boolean是一个独立的类型,而不像C++中bool代表1和0两个整数,所以布尔类型无法转换成数字
5.Java中浮点型默认为double类型,若要表示一个float类型的数值,需要有一个后缀f
6.变量重名错误,C++中下述代码,变量的重定义会导致隐藏先定义的变量
int i = 1;
while(1)
{
int i = 2;
……
}
而Java中上述代码会有两处错误首先是变量的重名,然后是while(true)布尔类型的错误 ......
1.Proxy
模式
代理模式支持将某些操作从实际的对象中分离出来,通过它的代理类提供处理。这样便于修改和管理这些特定的操作。
下面示例一个代理模式的实现。
<<interface>>Subject.java
package
com.zj.proxy;
public
interface
Subject {
void
operation1();
void
operation2(String arg);
}
现实类
RealSubject.java
package
com.zj.proxy;
public
class
RealSubject
implements
Subject {
public
void
operation1() {
System.
out
.println(
"Realer do operation1"
);
}
public
void
operation2(String arg) {
System.
out
.println(
"Realer do operation2 with "
+ arg);
}
}
代理类
ProxySubject.java
package
com.zj.proxy;
public
class
ProxySubject
implements ......
设计模式
一个程序员对设计模式的理解:
“不懂”为什么要把很简单的东西搞得那么复杂。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对所有锁的开锁方案。在真正理解设计模式之前我一直在编写“简单”的代码.
这个“简单”不是功能的简单,而是设计的简单。简单的设计意味着缺少灵活性,代码很钢硬,只在这个项目里有用,拿到其它的项目中就是垃圾,我将其称之为“一次性代码”。
-->要使代码可被反复使用,请用'设计模式'对你的代码进行设计.
很多我所认识的程序员在接触到设计模式之后,都有一种相见恨晚的感觉,有人形容学习了设计模式之后感觉自己好像已经脱胎换骨,达到了新的境界,还有人甚至把是否了解设计模式作为程序员划分水平的标准。
我们也不能陷入模式的陷阱,为了使用模式而去套模式,那样会陷入形式主义。我们在使用模式的时候,一定要注意模式的意图(intent),而 ......
本文首先设计一个单次定时器Timer+TimerTask,然后再次基础上设计一个循环定时器。
我将把 java.util.Timer 和 java.util.TimerTask 统称为 Java 计时器框架,它们使程序员可以很容易地计划简单的任务(注意这些类也可用于 J2ME 中)。不过,Java 计时器框架没有足够的能力来满足许多应用程序的计划要求。甚至一项需要在每天同一时间重复执行的任务,也不能直接使用 Timer 来计划,因此我们将再Timer+TimerTask的基础上设计一个通用的循环定时器,这里称之为计划框架,从而允许更灵活的计划任务。这个框架非常简单 ―― 它包括两个类和一个接口 ―― 并且容易掌握。
一、计划单次任务
想像一个煮蛋计时器,在数分钟之后(这时蛋煮好了)它会发出声音提醒您。Listing 1 构成了一个简单的煮蛋计时器的基本结构:
【Listing 1:单次定时器Timer+TimerTask】
import java.util.Timer;
import java.util.TimerTask;
/********************************************************************
* 单次计时器 Timer+TimerTask组合
* Timer类是线程安全的:多个线程可以共享单个 Time ......