java中的反射机制通过invoke方法来实现,这中间主要是是通过一下几个函数实现的
Class.forName ("类名")
Class.forName ("类名").newInstance
Class.getMethod ("调用的方法名",class[]{参数类列表})
instance.getClass
Method.invoke ("对象名","参数封装成的对象")
具体怎么实现,让我们来看一个简单的例子:
Class InvokeTest{
private static String algorithm = "Algorithm";
Object invokeMethod(object instance,String fun, Class[] paras, Object[] paraValue){
Object result = null;
Method method;
try{
method = instance.getClass.getMethod(fun, paras);
result = method.invoke(instance, paraValue);
}catch(Exception e) {
e.printStackTrace();
result = null;
}
}
public static void main(){
int x= 10,y=20;
invokeMethod(Class.forName(algorithm),newInstance,"add", Class[] {Class.int,Class.int},
Object[] { new Integer(x), new Integer(y)})
}
} ......
JAVA字符编码
今天终于把JAVA里一个比较头痛的问题——字符编码弄清晰了,所以写一篇文章来纪念一下,也为大家提供一点自己的心得。
众所周知,JAVA为了国际通用,用的是UNICODE来保存里面的字符。而UNICODE只是一个种字符集,字符的存储和表示要用到一定的字符编码格式,而与UNICODE对应的字符编码格式就是我们常看到的UTF-8,UTF-16等等,而UTF-8是最常用的,所以人们常常把它和UNICODE等同起来(我以前就是这样的),这在某些情况下是没有错的,但这样的理解在JAVA里就会产生一些混淆。我们用下面的程序来演示一下。
定义一个字符串
String name = "堂";
这个字符串就一个字符,把它取出来
char c_name = name.charAt(0);
JAVA里的char型是十六位的(两个字节),但是如果是用UTF-8的话可能会不只两位(UTF-8是变长存储的),那看来JAVA本身并不是用UTF-8来保存的,口说无凭,做个实验吧。
首先看看char里保存的内容
int low = (c_name) & 0xff;//取c_name的低位
int high = (c_name >> 8) & 0xff;//取c_name的高位
System.out.println(Integer.toHexString(high) + " " + Integer.toHexString(low));
结果是58 02
只有两 ......
昨天晚上开始学习传智播客的JAVA SE基础视频,到今天晚上已经把基础视频1-5看完了,因为之前段段续续的自学过C和JAVA,所以前面这几讲都看得挺快的,第5讲讲多线程,就有些复杂了。
2009-12-20 00:08:37
OS环境变量:OS定义的变量,可被应用程序使用。
set:查看
set path=%path%;....\jdk\bin; // =两边不能有空格
在命令行窗口下设置时,不影响其他程序,只对当前命令行窗口有效。
path:java命令路径
classpath:JVM查找类的路径。一般要加上.;表示当前路径。classpath中不能有空格,也不能有中文字符。
java -verbose:可以查看JVM启动加载过程。
JVM运行过程:
代码装入(ClassLoader)---->代码校验(字节码验证)---->执行(解释器)
反编译工具
JDK自带的javap命令可以反编译,可惜反编译的结果只有方法声明,无方法的具体内容,用java的反射功能自己也可以实现。
JAD工具(很强大,让我震撼了一把,不知道实现的原理是什么):jad -s java Test.class。 居然可以完全反编译,得到完整的源码。
&nb ......
和socket编程有关的几个类:
InetAddress
Socket:用在客户端
ServerSocket:用在服务器端
一。点对点通信
服务器端:
package server;
import java.io.*;
import java.net.*;
public class Server {
private int port;
public Server(int port){
this.port=port;
start();
}
//将从客户端收到的信息转化为大写的
public String process(String line){
return line.toUpperCase();
}
public void start(){
try{
//根据端口创建套接字
ServerSocket myscoket=new ServerSocket(port);
//显示连接信息
System.out.println("服务器启动完成,监听端口在"+port);
System.out.println("正在等待客户连接.........");
//挂起等待客户的请求
Socket c ......
本讲所介绍的内容主要目的是为了帮助大家更好的理解面向对象的思想。主要的观点包括:万物皆为对象;对象具有属性、状态、行为、标识等特性;对象之间具有包含关系和关联关系等;类是对对象的划分;类是对对象的抽象;对多个对象进行抽象可以得到类;对类的每个属性赋值可以得到对象。
1对象观
1.1 万物皆为对象
不管处于什么样的环境,不可否认的是,您会面对诸多的对象。如果您在学习,书本、电脑、您的同学和您的老师都是对象。如果您在踢足球,足球、场地和球门都是对象。如果您正在吃饭,饭碗、筷子和餐桌都是对象。对象可能是非常小的,例如分子,对象可能非常大,例如太阳系。
1.2对象的属性
对象的属性用于描述对象的状态、特征以及组成部分。
如果对一辆公交汽车进行描述,可能会涉及到如下一些内容:车的车牌号是多少,车的高度是多少,车的长度是多少,车的宽度是多少,车的颜色,车的最高时速,车的额定载客量,车行使的里程数,是否在加速,是否在减速,是否在上客,是否在下客,是否在运行,运行的方向,运行的速度,车有几个轮胎,车有多少座位,车的发动机,车的投币箱,等等。
这些描述中 ......
之前介绍了Java的语法基础,接下来介绍面向对象的相关思想和概念。
本部分包含的主要内容包括:
1、类与对象,主要介绍类和对象之间的关系。
2、现实世界中的对象与软件系统中的对象,介绍如何从现实世界中的对象抽象出软件系统中的对象。
3、软件系统中的对象和类之间的关系,如何根据软件对象抽象出类。
4、类的定义,介绍如何定义类,包括类的定义和成员的定义。
5、属性的定义,介绍有那些类型的属性以及如何定义,如何初始化。
6、访问器方法,对属性进行操作方法。
7、构造方法,介绍构造方法的特点及调用方式。
8、方法的定义,介绍方法的组成部分以及如何定义方法。
9、对象的创建,程序如何运行,运行过程中如何创建对象。
10、访问控制符,介绍访问控制符的分类以及访问限制。
11、this关键字的使用,介绍如何通过this访问成员变量以及成员方法、构造方法。
12、static成员,介绍static成员变量和成员方法以及用法。
13、final成员,介绍final成员变量的使用。
14、继承与子类,介绍如何提取公共代码形成父类。
15、protected关键字的使用,介绍继承情况下protected的作用。
16、super的使用,介绍如何通过super访问父类构造方法和隐藏的属性。
1 ......