类的载入以及类是如何工作的

2016-02-19 18:55 7 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的类的载入以及类是如何工作的懂设计的网友们快点来了解吧!

【 tulaoshi.com - 编程语言 】


  由于很多Java初学者都对classpath和path的概念模糊,我阅读了众多书籍,相关书籍有<<java编程基础>>,<<java2技术内幕>>,<<Cisco Networking Academy Program Fundamentals of Java Programming>>希望对他们有帮助!!
  
  到目前为止,我们在实验室中创建的类都放在一个指定的目录下.实验指定了一个工作目录,这个目录叫做确省目录.我们创建的源文件存储在这个目录下,生成的类文件也存储在这个目录下,你在这个确省的包中工作!
  
  当一个源代码文件编写完后,我们通常叫他一个编译单元,每个源代码文件或编译代码的文件名都必须以.java文件名为后缀.在这个编译单元中,只能有一个public 的类的定义,但可以有一个或多个的非public类定义.当你编译源文件时,源文件的每个类都会产生一个相应的类文件(以class为后缀),java编译器和解释器负责查找,载入和解释这些类文件.
  
  要理解类定位的概念,你必须理解一些path 和classpath的相关重要的概念.所有的操作系统都利用变量来存储目录名,而这些目录正是用户试图载入或启动程序的时候需要查找的地方!在java运行环境中,有两个变量会影响到类文件和和JDK程序的访问,这就是path和classpath.
  
  术语"路径"用来表示程序查找一个文件的位置时所用到的一系列的指定的目录!比如说,在windows系统中,java编译器和java解释器的程序文件分别为javax.exe和java.exe.这两个文件通常存储在你的jdk的bin目录下,对于某些特定的平台,path变量是一个操作系统的变量,它所包含的路径指向众多的可执行文件所存在的目录.计算机上面的操作系统通过这些路径来查找需要运行的可执行文件.
  
  比如说,要保证操作系统能找到javac.exe和java.exe,这两个文件都在你的jdkin目录下,就需要添加到path 变量中去.java编译器和解释器使得变量classpath 来定位类和包.classpath变量可以获得很多条包含包的目录路径.jdk目录结构包含一些被自动来查找类的子目录,这些就是所谓的标准目录,而且这些目录就不需要定义在classpath变量中.你可以把类文件保存在这些目录中的一个,例如,jdk1.3jreclasses就是一个能自动找到的标准目录.其中 classes是我自己新建的目录!你可以把自己的类文件放到这!
  
   但我建议不这样做,类文件应该通过程序员创建的目录结构来治理.
  
   由于创建的类大多数情况下总是存储在相互分开的目录中,classpath变量必须包含到达这些目录的路径.命令 CLASSPATH=djavacourselab在操作系统级别为classpath变量赋值.
  
   载入类的时候,需要查找的额是确省目录和显示定义的包的目录.他的执行顺序为:
  
   1,在标准目录下查找文件;
  
   2,在当前的工作目录下查找所有的文件.在大多数的操作系统中,(.)符号表示当前的工作目录.有些书中有介绍!
  
   3,使用classpath变量定义的目录路径来查找文件,程序员必须在classpath变量中显示的指定他们将要查找的目录路径.
  
   4,在类的包声明语句所声明的包中查找文件,只在classpath变量所指定的目录下查找这些包.
  
   
  
  补充:
  
   1,标准类有java.lang包,你部需要非凡的指定这个包的位置;
  
   2,在当前目录(确省目录)下查找,注重是确省目录,他会在确省目录中查找所有文件的第一个!
  
   3,显示查找包的声明,简单的说就是我们在java语言中用import所引入的类或者说我们在classpath中用(.)所表示的当前的类.
  
   4,对编译器带有-classpath选项的调用提供了一个指向确省目录的类路径!
  
   同时也可以用-cp选项来声明一个指定的classpath以供解释器使用!!
  
   例如:javac -classpath.huiwu917.java
  
  java -cp.huiwu917
  
  注重使用编译器和-classpath选项以及-cp选项时,classpath变量可以被覆盖掉!!

来源:http://www.tulaoshi.com/n/20160219/1619474.html

延伸阅读
    我们现在再来看看AfxDeferRegisterClass是什么样子的:   #define AfxDeferRegisterClass(fClass)   ((afxRegisteredClasses & fClass) ? TRUE:AfxEndDeferRegisterClass(fClass)     #define afxRegisteredClasses AfxGetModuleState()-m_fRegisteredClasses   BOOL AFXAPI AfxEndDefe...
一.什么是窗口类   在Windows中运行的程序,大多数都有一个或几个可以看得见的窗口,而在这些窗口被创建起来之前,操作系统怎么知道该怎样创建该窗口,以及用户操作该窗口的各种消息交给谁处理呢?所以VC在调用Windows的API(CreateWindow或者CreateWindowEx)创建窗口之前,要求程序员必须定义一个窗口类(不是传统C++意义上的类)来规...
标签: Web开发
其它的一些,比如分页类,异常类(用于信息提示),文件操作类(未完成),经常用到的工具类及验证输入的表单验证类(ASP版,配合前台JS版使用更佳): 分页类Pager % Class Pager Private IUrl Private IPage Private IParam Private IPageSize Private IPageCount Private IRecordCount Pri...
如何在派生类中的隐藏基类的虚拟重载函数? 作者:northtibet     我创建了一个类,基类中有虚拟重载函数。我想在派生类中改写基类中的虚拟重载函数。代码如下: #include <iostream.hclass B {private: int nNumber;public: virtual void test() { cout << "B::test(...
方法一: 在对话框DOMODAL()之前调用CWinAPP中的SetDialogBkColor成员函数,其中第一个参数设置背景色,第二个参数设置字体颜色,但只能对所有的对话框统一设置,不能针对某一个指定的对话框 方法二: 重载OnPaint(),即WM_PAINT消息,加入代码: CRect rect; GetClientRect(&rect); dc.FillSolidRect(rect,RGB(0,255,0)); 方法三: 重...

经验教程

75

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部