java运行环境 类装载器ClassLoader
今天观看了蓝山老师java背后的秘密相关视频,发现要想写出高性能的程序,一定要对其运行原理以及其运行环境有相当程度的了解。那ClassLoader是相当关键的一个部分。
先说下java程序运行的基本流程,先将java文件编译为class文件,然后通过ClassLoader(类加载器),加载到Runtime Data Area(类似于内存)中,再交与Execution Engine(相当于CPU)进行执行操作,若java语言有调用其他的语言进行相关计算,则需要用到Native interface这个部分,最终形成Native Libraries,至此,执行完成。
那看了上面的流程,ClassLoader是一个Class文件的载入器,其载入的方式有预先载入和按需载入两种方式。预先载入主要是载入一些具体的java系统文件,各个java运行必需的类文件;按需载入主要是我们自己所编写的具体的java的类文件。预先载入和按需载入可顾名思义,预先载入是在执行没个程序前都需要进行载入,按需载入是只有在调用具体的类文件时才进行载入。我们可以通过该命令来追踪java程序执行时,所载入的具体的class文件---java -verbose:class Main(编译好的文件名)。
按需载入又分为两种方式,为显式和隐式.隐式是我们比较常用的,具体的形式不使用new()关键字,而显式的方法主要是下面两种方式,一个是Class.forName()和ClassLoader.LoadClass()方法.Class.forName在做与数据库的连接时用过,不过以前不了解其含意.这两种方法我目前感觉隐式的用起来更方便,但忽略了具体的载入过程;显式的载入用起来复杂,但对程序具体的执行流程,我们可以进行详细的控制。
具体怎么用这个还没太搞明白,还需再研究下.明天会把classLoader内部的具体构造再研究下。
下面是做这个练习时的具体内容:
//MyClassLoader
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
public class MyClassLoader extends URLClassLoader{
private static File file = new File("F:\\java\20100108 ");
public MyClassLoader(){
super(getUrl());
}
public static URL[] getUrl(){
try{
return new URL[]{file.toURL()};
}catch(MalformedURLException e){
return new URL[0];
}
}
}
//A.java
import java.lang.reflect.*;
public class A {
public static void main(String[] args){
try{
相关文档:
ResultSet如果按照列读取,是有顺序的
如果重复读:
int a= rs.getInt(1);
System.out.println(rs.getInt(1));
或者回头读
rs.getInt(2);
rs.getInt(1);
都会出:java.sql.SQLException: No data found
数据是顺序读取出来的,可以想像是一个指针在动,在读取出来数据。这些都是道听途说, ......
用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式:
...
Process process = Runtime.getRuntime().exec(".\\p.exe");
process.waitfor( );
...
在上面的程序中,第一行的“.\\p.exe& ......
public boolean writeXML(String content, String filename)
{
String savepath;
FileOutputStream fout;
// log.info("content:"+content+ ......
java文件过滤器的使用代码如下:
测试代码:package file;
import java.io.File;
public class fileFilter {
public static void main(String[] args) {
File file = new File("d:\\");//设置文件路径
for (File fileList : file.listFiles(new file.MyFileFilter())) {
......
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。
&nbs ......