JAVA动态绑定的内部实现机制
JAVA虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法。相反,当虚拟机调用一个实例方法时,它会基于对象实际的类型(只能在运行时得知)来选择所调用的方法,这就是动态绑定,是多态的一种。动态绑定为解决实际的业务问题提供了很大的灵活性,是一种非常优美的机制。
1 JAVA对象模型
JAVA虚拟机规范并没有规定JAVA对象在堆里是如何表示的。对象的内部表示也影响着整个堆以及垃圾收集器的设计,它由虚拟机的实现者决定。
JAVA对象中包含的基本数据由它所属的类及其所有超类声明的实例变量组成。只要有一个对象引用,虚拟机就必须能够快速地定位对象实例的数据。另外,它也必须能通过该对象引用访问相应的类数据(存储于方法区的类型信息),因此在对象中通常会有一个指向方法区的指针。当程序在运行时需要转换某个对象引用为另外一种类型时,虚拟机必须要检查这种转换是否被允许,被转换的对象是否的确是被引用的对象或者它的超类型。当程序在执行instanceof操作时,虚拟机也进行了同样的检查。所以虚拟机都需要查看被引用的对象的类数据。
不管虚拟机的实现使用什么样的对象表 ......
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SendEmailUtil {
private static Log log = LogFactory.getLog(SendEmailUtil.class);
public static final String fromMailAddress = "from_test@163.com";
public static final String mailName = "from_test";
public static final String mailPassword = "用户密码";
public static final String mailServer = "smtp.163.com";
public static final String toMailAddress = "to_test@163.com";
public static boolean sendEmail(String emailfrom, String emailTo,
  ......
其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。
一、如何创建java存储过程?
通常有三种方法来创建java存储过程。
1. 使用oracle的sql语句来创建:
e.g. 使用create or replace and compile java source named "<name>" as
后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。
SQL> create or replace and compile java source named "javademo1"
2 as
3 import java.sql.*;
4 public class JavaDemo1
5 {
6 public static void main(String[] argv)
7 {
8 System.out.println("hello, java demo1");
9 }
10 }
11 /
Java 已创建。
SQL> show errors java source "javademo1"
没有错误。
SQL> create or replace procedure javademo1
2 as
3 language java name 'JavaDemo1.main(java.lang. ......
其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。
一、如何创建java存储过程?
通常有三种方法来创建java存储过程。
1. 使用oracle的sql语句来创建:
e.g. 使用create or replace and compile java source named "<name>" as
后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。
SQL> create or replace and compile java source named "javademo1"
2 as
3 import java.sql.*;
4 public class JavaDemo1
5 {
6 public static void main(String[] argv)
7 {
8 System.out.println("hello, java demo1");
9 }
10 }
11 /
Java 已创建。
SQL> show errors java source "javademo1"
没有错误。
SQL> create or replace procedure javademo1
2 as
3 language java name 'JavaDemo1.main(java.lang. ......
1. String、StringBuffer、StringBuilder的区别
String不变对象,StringBuffer可变字符串,方法为synchronized,StringBuilder可变字符串,方法非synchronized
2. finally、final、finalize的区别
finally在try-cache-finally中使用;final可从类、方法、属性三个方面解释;finalize为Object类的方法,其调用是不可预测的。
3. Java中synchronized的作用
同步,相当于对象锁
4. 简要描述一下java.io包中关于流的类的结构,其中用到了什么模式
Wrapper或Decorator模式
5. HashMap和Hashtable的异同
都实现了Map接口;HashMap允许null键和null值,方法非同步;Hashtable不允许null键和null键,方法同步
6. 简要介绍一下Comparable接口和Comparator比较器
实现Comparable的类的对象可以比较,必须实现compareTo方法;实现Comparator的类为比较器,必须实现compare方法,可以用在Collectoins.s ......
0.本例子是基于jQuery的
1.引入jct包
<!-- 引入jct包 -->
<script type="text/javascript" src="${ctx }/js/jct.js"></script>
<script type="text/javascript" src="${ctx }/js/dateutils.js"></script>
2.通过ajax 传递参数给java
var assessEntity = null;
$(document).ready(function() {
var seeAssessDetail = function(id){
$("#assessDetail").click();
var url = "${ctx }/classes/assess/assess!getOneAssess.action";
var params = {selectId:i ......
其实也不是爬网页,只是从一个XML文件取URL,然后抓取网页内容。
主要有几点,备忘:
1. 全局代理,设置之后所有的URL都使用此代理,这样可以直接调用FileUtils.copyURLToFile:
private void initProxy(String host, int port,
final String username, final String password) {
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username,
password.toCharArray());
}
});
System.setProperty("http.proxyType", "4");
System.setProperty("http.proxyPort",
Integer.toString(port));
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxySet", "true");
}
2. 设置User-Agent,有些站点禁止Java作为访问客户端,必须通过URLConnection设置User-Agent来模拟浏览器,所以不能用FileUtils.copyURLToFile,复制其源码小修改一下即可:
URLConnection httpConnection = new URL(url).openConnection();
httpConnection.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 5.0; Window ......