Java反射机制(Reflection)

10,993浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Reflection也就是反射,是Java语言的一个重要特征,我们知道,在使用一个类之前,我们往往都已经创建好它了,比如创建一个类文件,然后再写些属性、方法等,也就是这种类是静态的,但反射机制却允许你动态地创建一个类。除了动态地创建一个类外,我们还能动态地获取同类对象的数据,并将这些数据赋给新创建的类,这有点类似克隆复制。在很多时候,我们都需要这种动态创建类的特征,比如在处理一些业务,但这些业务却又稍有区别的时候,往往对应着多个类,在处理的时候,我们就要根据不同的业务处理来调用不同的类,这个时候反射机制就派上用场了。
以下是JDK API中关于软件包java.lang.reflect的描述
提供类和接口,以获取关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对对象上的基本对等项进行操作。
如果必需的 ReflectPermission 可用,则 AccessibleObject 允许抑制访问检查。
Arrays 提供动态创建和访问数组的静态方法。
此包中的类以及 java.lang.Class 可以适应以下应用程序的需要:调试程序、解释程序、对象检查程序、类浏览程序,以及服务(比如,Object Serialization 和 JavaBean,它们需要访问目标对象(基于其运行时类)的公共成员或给定类声明的成员)。

继续阅读“Java反射机制(Reflection)”

Java:String和StringBuffer的区别

12,037浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

String和StringBuffer有何区别?或许我们所熟知的是String是定长而StringBuffer是变长的,这种说法当然是没错的,而事实上,在一般的情况下,String和StringBuffer两者用起来是没有任何区别的。

继续阅读“Java:String和StringBuffer的区别”

Java:Arraylist和Vector的区别

9,529浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

谈谈ArrayList和Vector这两种链表,虽然关于这两种链表之间比较的文章或帖子非常多,但我也在这里记录一下。

对于这两种链表,恐怕很多程序员在面试的时候都可能会碰到ArrayList和Vector两者有何区别这样的问题。当然,我想很多程序员通过查找资料也都会了解到这两种类其实非常相似,但在应用场景上又有着本质的不同。

继续阅读“Java:Arraylist和Vector的区别”

设计模式之单件模式(Singleton)

7,894浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

单件模式(Singleton)可能是设计模式中最简单的一种模式了,也应用很广泛,因为在很多情况下,我们并不需要生成多个对象实例去解决问题,而只需要生成一个对象实例就够了,下面有个应用例子,假设有这样一个需求,每次调用一个方法都自增1。

class Increment{

private static int count = 0;

public int doIncrement(){

count++;

}

}

继续阅读“设计模式之单件模式(Singleton)”

MemoryUsage:监测java虚拟机内存使用

10,316浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

介绍一个看到的很有意思的Java类MemoryUsage,通过MemoryUsage可以查看Java 虚拟机的内存池的内存使用情况。

MemoryUsage类有四个值(均以字节为单位):

Init:java虚拟机在启动的时候向操作系统请求的初始内存容量,java虚拟机在运行的过程中可能向操作系统请求更多的内存或将内存释放给操作系统,所以init的值是不确定的。

Used:当前已经使用的内存量。

Committed:表示保证java虚拟机能使用的内存量,已提交的内存量可以随时间而变化(增加或减少)。Java 虚拟机可能会将内存释放给系统,committed 可以小于 initcommitted 将始终大于或等于 used

继续阅读“MemoryUsage:监测java虚拟机内存使用”

权限控制:spring 3.0 security配置例子

27,400浏览
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
Loading...

我几年前自己写过一个后台权限管理的东西,也是基于用户-角色-权限这样的结构,说实话代码结构写得不好,因为是硬编码的形式,虽然功能其实用起来还是挺好用的,用户、角色及权限的管理均可在后台轻松完成,但现在如果再用硬编码的形式写这样的系统就说不过去了。目前关于权限管理的java开源系统比较多,有的比较有名,有的不出名,比如像Spring Security就很出名,在权限管理方面做得也非常全面,子猴这篇文章也是对Spring Security做个简短介绍。

我以最新版的spring-security-3.0.2作为介绍对象,如果你了解Spring 2.0 Security的话,那就比较抱歉了,因为spring-security-3.0.2与2.0相比改动很大,在2.0中的一些配置拿到3.0几乎是行不通的,如果你还没有接触过spring,那么以下是其地址:

Spring官方网址:http://www.springsource.org/

spring-security下载地址:

http://static.springsource.org/spring-security/site/downloads.html

我以其自带的一个简单例子来介绍一下吧,因为这个例子配置不对的话极易报错(这个例子是个打包的War文件,但与文档中的又不一样,所以极易出错),我会对出现的错误给予出错原因及解决方法。

继续阅读“权限控制:spring 3.0 security配置例子”

TOMCAT启动错误:严重: Error filterStart

25,141浏览
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
Loading...

在tomcat启动的时候报严重: Error filterStart这样的错误的原因有很多种,比如你在web.xml的配置语句写漏或写错或缺少某些jar包等等都有可能发生,子猴这里给出的不是针对某一具体错误如何解决,而是给出如何查找出错原因?
我发现网上很多朋友都碰到过这样的错误信息而束手无策,往往花费很多时间,而归根结底是不知道如何得知错误是怎么产生的,因为tomcat(往往都是使用的tomcat)只会在控制台给出很简单的两行出错信息。
继续阅读“TOMCAT启动错误:严重: Error filterStart”

java:用Reader来读取字符流

19,716浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

java.io.Reader是一个很不错的读取字符流的抽象类,通过继承Reader类,我们可以很方便的读取字符流,比如,我们可以将一个字符串读取为一串串(字符)流,还可以读取一个文件里的内容为一串串的流。

Java(1.6.x)里提供了几种Reader的直接继承类,具体的有:BufferedReader, CharArrayReader, FileReader, InputStreamReader, PipedReader, StringReader等,子类须实现的方法只有 read(char[], int, int) 和 close()。

子猴在这里主要介绍StringReader和FileReader两种。

继续阅读“java:用Reader来读取字符流”

继承Exception:构造java自定义异常类

20,255浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

我们知道,如果系统抛出了异常,程序就会终止运行,有时候,这种情况很让人恼火,比如我们启动了一个任务线程,你一直以为它在正常的运行,但当你第二天一大早查看的时候发现它实际上因为抛出了一个异常早就停止了运行,这个原本你以为一个晚上就可以完成的任务就没有完成了,所以我们有时为了不让系统因为抛出异常而终止运行,我们就采用try…catch块来捕获异常,从而使得程序在出现了异常的时候仍能继续运行下去。

但有时候,当我们系统运行缺少某些必要的条件时,我们却一定要使得程序就此打住不要再运行下去了,那么这个时候try…catch块就不合适了,因此可以考虑编写自定义的异常类来完成这样的工作。

继续阅读“继承Exception:构造java自定义异常类”

java包版本(过低/冲突)导致的错误

16,602浏览
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

在java开发中,有些错误非常地奇怪,这些奇怪的错误中,有些是因为如下原因造成的:

1、系统使用的jar包版本冲突所导致的,比如有两个版本不一样但相同的包

2、系统使用的jar包版本过低(相对其他包而言)

今天就记录一个这样的错误,报错的信息为:

继续阅读“java包版本(过低/冲突)导致的错误”