J2SE
cuser_online
致力于软件开发。
展开
-
Java类的静态变量和实例变量
<br /><br />类的成员变量有2种:一种是被static关键字修饰的变量,叫类变量或静态变量,另一种是没有被static关键字修饰的变量,叫实例变量。<br /> <br />静态变量和实例变量的区别在于:<br />1.类的静态变量在内存中只有一个,Java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于演绎法我,被类的所有实例共享。<br />静态变量可以直接通过类名被访问。静态变量的生命周期取决于类的生命周期,当加载类的时候静态变量被创建并分配内存,<br />当卸载类的时候,静态变量被原创 2010-11-25 22:13:00 · 923 阅读 · 0 评论 -
运行*.jar的方法
<br />java -jar <br />或<br />javaw -jar //javaw一般用来运行有图形界面应用程序<br />eg:<br />javaw -jar myswt.jar<br />可写在批处理或shell中<br />eg:<br />start javaw -jar myswt.jar<br />start javaw -Djava.library.path=./native/ -jar myswt.jar<br /> <br />这些运行指令可以写在批处理或shell原创 2011-04-13 23:16:00 · 372 阅读 · 0 评论 -
CSV文件简介
<br />CSV格式的文件在平时的软件应用中通常作为一种数据交换格式(协议)而存在。以下的介绍内容来自维基百科。在本篇最末有简单示例。<br /> <br />技术背景<br />.csv 文件格式的使用可以追溯至早期的商用电脑,它被大范围使用于电脑内部不同数据文字格式大小的转化。基于此原由,csv文档格式适用于任何电脑平台。<br />.csv是一种用逗号作为分隔符分隔数值的文本文档,在不同的.csv导出导入工具中也允许用其他的符号作为分隔符。一般简单的.csv转换工具不允许字段数值中存在逗号或者其他特原创 2011-06-02 23:07:00 · 1764 阅读 · 0 评论 -
国际化的一些注意事项
<br />1.资源文件的获取<br />ResourceBundle.getBundle(参数)<br />参数:包名+基名<br />eg:private static final ResourceBundle bundle = ResourceBundle.getBundle("org.eclipse.jface.messages"); <br />其中org.eclipse.jface为包名,基名为messages(这个是由资源文件前缀决定的)<br /> <br />2.资源文件<br />基原创 2011-06-02 23:16:00 · 574 阅读 · 0 评论 -
国际化步骤
<br />国际化步骤<br />1.准备一个国际化的工具类<br />2.准备properties资源文件<br />3.利用国际化工具类替换需要替换的字符原创 2011-06-02 23:19:00 · 512 阅读 · 0 评论 -
接口中不能有静态代码块
<br />接口中不能有静态代码块,报错,这一点和类不同,类中可以有静态代码块。原创 2011-06-02 22:44:00 · 4004 阅读 · 1 评论 -
BufferedWriter和newLine
<br />BufferedWriter类的newLine方法<br />源码:<br /> /**<br /> * Writes a line separator. The line separator string is defined by the<br /> * system property <tt>line.separator</tt>, and is not necessarily a single<br /> * newline ('/n') character.<原创 2011-06-02 22:46:00 · 1587 阅读 · 0 评论 -
MD5加密算法
<br />Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,<br />用以提供消息的完整性保护。<br />1.不可逆<br />2.文件md5校验,一般是读取文件的流(bytes),来计算md5值的。<br />3.密码的bytes转化为十六进制的md5字符串保存在数据库中,用户登录时,将用户的密码也转化为md5进行比较以确定密码是否正确<br />4.其它一些应用<br /> <br /> <br />MD5的原理是公开的,原创 2011-06-02 22:57:00 · 371 阅读 · 0 评论 -
Ftp的port模式和pasv模式
前段时间研究Socket编程,看了几个有关Ftp协议服务端和客户端的开源实现。了解了下port模式和passive模式。 FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接。FTP服务程序一般会支持两种不同的模式,一种是Port模式,一原创 2011-08-16 23:27:43 · 602 阅读 · 0 评论 -
String类的replace和replaceAll的区别
<br />前者只是一普通的字符号串替换,后者是一个支持正则表达式的替换<br />eg:<br />String str = "2008.1.12";<br />现有需要将字符串中的"."替换为"_"。<br /> 一种方法是老老实实使用str.replace(".","_");<br /> <br /> 若是使用str.replaceAll(".","_")<br /> 那str中所有字符均会被替换为"_"。<br /> 因为在正则表达式中,"."代表任意字符。<br /> 正确做法是在replaceA原创 2011-04-13 23:14:00 · 563 阅读 · 0 评论 -
transient与volatile温故而知新
<br />transient:序列化时不保持该值,即不写入文件或在网络中进行传输<br /><br />volatile:同步的一个关键字。不会出现幻读。强制直接从共享内存中读取。原创 2011-02-23 00:51:00 · 403 阅读 · 0 评论 -
java.lang.SecurityException异常
<br />Exception in thread "main" java.lang.SecurityException: class "org.eclipse.swt.widgets.UFCComposite"'s signer information does not match signer information of other classes in the same package<br /><br />什么情况下可能出现该异常?<br />当用户在自己的程序中定义了一个与系统内置的(如jdk,原创 2011-02-23 00:58:00 · 14770 阅读 · 0 评论 -
再说线程sleep
<br /><br />线程结束睡眠后,首先转到就绪状态(Runnable),它不一定会立即运行,而是在可运行池中等待获得cpu。<br />线程在睡眠时如果被中断,就会收到一个InterrupedException异常。<br />如:<br />try{<br /> Thread.slee(100);<br />}catch(InterruptedException e){<br /> throw new RuntimeException(e);<br />}<br /> <br />原创 2010-11-25 22:15:00 · 498 阅读 · 0 评论 -
一个线程只能被启动一次
<br /><br />以下代码试图两次启动machine。<br />Machine machine = new Machine();<br />machine.start();<br />machine.start();//抛出IllegalThreadStateException异常<br /> <br /> <br />//要想多次启动(start)线程,则在每次要启动前实例化线程对象,再调用线程的start方法。线程生命周期一旦结束,就不能再次调用start方法。<br /> <br />原创 2010-11-25 22:20:00 · 1972 阅读 · 0 评论 -
sleep和yield方法的区别
<br /><br />sleep()方法和yield()方法都是Thread类的静态方法,都会使当前处于运行状态的线程放弃cpu,把运行机会<br />让给别的线程。两者的区别在于:<br />1.sleep()方法会给其他线程运行的机会,而不考虑其他线程的优先级,因此会给较低优先级的一个运行的机会;<br />yield()方法只会给相同优先级或者更高优先级的线程一个运行的机会。<br /> <br />2.当线程执行了sleep(long millis)方法后,将转到阻塞状态,参数millis指定睡眠原创 2010-11-25 22:28:00 · 1344 阅读 · 0 评论 -
集合框架类中的枚举和迭代
<br />枚举和迭代的功能是将一个集合对象中所有元素顺序列举出来,它们分别由Enumeration接口和Iterator接口所定义。Enumeration接口是在Java标准版1.0所定义的,而Iterator接口则是从Java标准版1.2开始定义的。两者既有相同之处,也有不同,但目前在Java语言中推荐使用Iterator接口来替换Enumeration接口。<br />下面详细介绍两者之不同:<br />Enumeration接口仅包含两个方法声明,其描述如下:<br />①public bool原创 2010-11-25 22:40:00 · 391 阅读 · 0 评论 -
Java与C++的区别
<br />1.跨平台性。前者跨平台。后者基本上没有这种说法。 <br />2.Java去除了c++中一些容易出错或Java设计者觉得不合理的类型,比如指针,结构体,联合体等。 <br />3.垃圾收集方面。Java有自动垃圾收集机制,无需程序员主要去进行垃圾内存的释放。而后者无此机制。 <br />4.继承方面。Java中的类只支持单继承,不支持多继承。而C++单多均支持。需要说明的,Java中的接口是支持多继承的,Java中需要多继承的情况下通常利用实现Java接口的方式来实现。 <br /原创 2010-11-25 22:41:00 · 346 阅读 · 0 评论 -
Java类加载器进阶
再谈类加载的父亲委托(Parent Delegation)机制在父亲委托机制中,各个加载器按照父子关系形成了树状结构,除了根类加载器以外,其余的类加载器有且只有一个父加载器。假设loader2的父亲为loader1,loader1的父亲为系统类加载器。假设Java程序要求loader2加载Sample类,代码如下:Class sampleClass = loader2.loadClass("Sample");loader2首先从自己的命名空间中查找Sample类是否已经加载,如果已经加载,就直接返回代表Sa原创 2010-11-25 22:56:00 · 445 阅读 · 0 评论 -
javaw.exe是什么进程?
<br />一般来说,gui程序使用的是javaw.exe。而控制台程序使用的是java.exe<br />百度百科内容:<br />1、java.exe: <br />运行java程序 <br />2、javac.exe: <br />编译的,生成.class文件 <br />3、javaw.exe: <br />跟java命令相对的,运行java命令时,会出现并保持一个console窗口, <br />程序中的信息可以通过System.out在console内输出,<br />javaw 大原创 2011-03-02 23:50:00 · 13697 阅读 · 1 评论 -
如何开启Java的断言?
<br /><br />由老贾问到断言如何开启。于是上网搜索一番。做个记录。<br />命令行下:<br />java -ea AssertTest<br />-da是禁用断言<br />JVM默认是关闭了assertion功能的,所以要使用assertion功能的话必须显式使用加入参数来选择启用或者禁用断言。<br />另外,断言的参数可以使得java应用程序可以开启一部分类或包的assertion功能,所以运行相对编译而言,比较复杂,这里有两类参数需要说明:<br /> <br />public cla转载 2011-02-18 00:50:00 · 1287 阅读 · 0 评论 -
transient关键字:串行化,保护第三信息
最早的保护敏感信息的技术是把包含敏感数据的成员声明为私有的(private)和暂时的(transietn) . 使用transietn修饰的变量不会被串行化,也不可能通过任何串行化机制保存. 这样的声明可以使得敏感数据不会出现在流中,也不会通过串行化机制恢复.而且,对私有成原创 2011-08-17 22:48:41 · 442 阅读 · 0 评论 -
类似ftp类协议的登录是怎么做的?
实际上就是new Socket。因为Socket在的同时会去尝试连接远程服务器 eg:public String[] connect(String host, int port) throws IllegalStateException, IOException,原创 2011-08-17 22:54:46 · 485 阅读 · 0 评论 -
关于JDK中的tools.jar
用于编译Java程序所使用的javac.exe命令同样是使用Java编写的,这个类就是lib路径下的tools.jar文件中sun\tools\javac路径下的Main类,JDK的bin路径下的javac.exe命令实际上仅仅是包装了这个Java类。不仅如此,bin路径里的原创 2011-08-30 22:52:21 · 588 阅读 · 0 评论 -
JDK类加载机制源码分析及源码分析
JVM的类加载机制主要有如下三种机制:1.全盘负责:所谓全盘负责,就是说当一个类加载器銏加载个个Class的时候,该Class所依赖和引用的其他Class也将由该类加载器负责载入,除非使用另外一个类加载器来载入。2.双亲委托:所谓双亲委托则是先让parent(父)类加原创 2011-08-30 22:50:15 · 599 阅读 · 0 评论 -
什么是不可变对象?
什么是不可变对象。创建后状态不能被修改的对象叫做不可变对象。如java.lang.String,java.lang.Integer,java.awt.Color。不可变对象天生是线程安全的。它们的常量(域)是在构造函数中创建的。既然它们的状态无法被修改,这些常量永远不会变原创 2011-09-28 23:49:29 · 773 阅读 · 0 评论 -
Java中锁的分类
1.内部锁就是对象本身,每个Java对象都可以隐式地扮演一个用于同步的锁的角色;这些内置的锁被称为内部锁(intrinsic locks)或监视器锁(monitorlocks)。执行线程进入synchronized块之前会自动获得锁;而无论通过正常控制路径退出,还是从原创 2011-09-28 23:48:22 · 1400 阅读 · 0 评论 -
Java集合框架的总结_List、Set、Vector、Stack
List和Set二者最明显的差别是List支持放入重复的对象,而Set不支持。List常用的实现类有ArrayList、LinkedList、Vector及Stack1.ArrayList●ArrayList是基于数组方式实现的,没有容量的限制。●Arra原创 2011-09-28 23:41:08 · 696 阅读 · 0 评论 -
锁:ReentrantLock
ReentrantLock是并发包(java.util.concurrent)中提供的一个更为方便的控制并发资源访问的类,且和synchronized语法达到的效果是一致的。主要方法有:1.lock 加锁2.unlock 解锁eg:public cl原创 2011-09-28 23:43:57 · 347 阅读 · 0 评论 -
对集合在客户端加锁
使用线程安全的集合类,我们的操作并不一定是安全的,因为客户端的操作并不是原子的,所以通常的办法是在客户端调用时加锁。例如,Vector,Stack,HashMap等等。eg:public class UserManager { private List use原创 2011-09-28 23:45:25 · 400 阅读 · 0 评论 -
JVM类加载过程中抛出的常见异常
1.ClassNotFoundException 这是最常见的异常,产生这个异常的原因为在当前ClassLoader中加载类时未找到类文件,对于SystemClassLoader的类很容易判断,只要加载的类不在Classpath中,而对位于User-DefinedClas转载 2011-09-29 22:22:31 · 1170 阅读 · 0 评论 -
java.lang.ClassLoader中几个主要方法?
java.lang.ClassLoader中几个主要方法?1.loadClass加载类的方法loadClass()方法执行步骤,①.用findLoadedClass(String)检查是否已经加载过此类,如果已经加载则直接返回②.看parent classlo原创 2011-08-29 23:05:34 · 550 阅读 · 0 评论 -
线程上下文与ClassLoader
每个线程都有一个关联的上下文ClassLoader。如果在使用new Thread()方式生成新的线程,新线程将继承其父进程的上下文ClassLoader。如果程序对线程上下文ClassLoader没有任何改动的话,程序中所有的线程都使用System ClassLoader作原创 2011-08-29 22:59:23 · 1264 阅读 · 0 评论 -
JDK类加载器的机制
Java中类加载器的代理模式是为了保证Java核心库的安全。通过代理模式,对Java核心库的类的加载工作由引导类加载器来统一完成,保证了Java应用所使用的都是同一个版本的核心库的类,是互相兼容的。判断两个类是否相等?1.类名一致(包名+类名)2.由同一个类加载器原创 2011-08-29 23:08:03 · 584 阅读 · 0 评论 -
数字格式化类NumberFormat 的使用
eg:private NumberFormat formatter = NumberFormat.getInstance();formatter.setGroupingUsed(true);// 设置此格式中是否使用分组formatter.setMinimumInte原创 2011-08-17 23:00:51 · 1012 阅读 · 0 评论 -
集合的同步控制,Collections类中提供了多个synchronizedXxx方法
Collections类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而可以解决多线程并发访问集合时的线程安全问题。集合框架中经常使用的三个实现类:HashSet、ArrayList、HashMap都是线程不安全的。如果有原创 2011-08-17 23:13:15 · 2052 阅读 · 0 评论 -
Arrays的asList方法注意事项
Arrays的asList方法可将数组或指定个数的对象转换成一个List集合。这个LIst集合既不是List接口的实现类ArrayList的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例。Arrays.ArrayList是一个固原创 2011-08-17 23:14:09 · 386 阅读 · 0 评论 -
数据库连接池技术
数据库连接池的解决方案是:当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池。每次应用程序请求数据库连接时,无须重新打开连接,而是从池中取出已有的连接使用,使用完后,不再关闭数据库连接,而是直接将连接归还给连接池。通过使用连接池,将大大提高程序运行转载 2011-08-17 22:56:14 · 457 阅读 · 0 评论 -
从数据库连接池中获取连接调用close后,为什么不是关闭物理连接?
数据库连接池提供商实际上将jdbc的常用类进行了再次包装,比如Connecton,Statement等等。主要是使用的适配器模式,比如从数据库连接池中获取的Connnection可能是一个实现了java.sql.Connection接口的类,所以当我们使用完Connect原创 2011-08-17 22:57:00 · 4163 阅读 · 0 评论 -
类的初始化时机
Java虚拟机严格规定了有且只有四种情况必须对类进行"初始化"(而加载、验证、准备自然需要在此之前开始):1.遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4种指令的最常原创 2011-09-20 22:45:58 · 325 阅读 · 0 评论 -
Wait Set及wait、notify、notifyAll方法解读
Java中的所有对象都有一个Wait Set(又叫等待池),当某个对象执行wait方法时,线程便会暂时停止操作,进入Wait Set这个休息室,除非发生下列其中一种情况,否则线程会永远留在这个Wait Set里。●.有其他线程以notify方法唤醒该线程●.有其它线程以n原创 2011-09-30 23:03:43 · 1163 阅读 · 0 评论