`
许真恩
  • 浏览: 38938 次
  • 来自: ...
社区版块
存档分类
最新评论

JAVA从头来

阅读更多
三个月计划、从头开始补缺补漏JAVA

[目标]
     1、掌握知识的用法、包括JAVA,WEB,J2EE
     2、培养 "研究深"、"完全弄通"的习惯、任何知识学透、想透、用透
      3、摸索一下学习方法论、也就是学习作者是如何推导出其所要证实的结论的

[关键]
       关键要学而用、一定要用;在用中巩固所学消化所学

[计划]

四月计划  JAVA知识

1、JDK 相关 : 安装、常用命令及其参数、JVM内存管理和CLASSLOADER
2、JAVA语法
3、JAVA面向对象特性 继承、构造器、抽象类、接口、多态、重载、覆盖、异常处理机制
4、JAVA类库:四个类库 java.lang,java.io,java.util,java.sql


五月计划 WEB知识

1、HTTP协议
2、Servlet和JSP
3、MVC
4、TOMCAT

六月计划 J2EE知识

JNDI、JTA、RMI、JMS、UML、设计模式、SPRING、AOP




分享到:
评论
3 楼 许真恩 2008-04-08  
第5章 package和import

javac在找到待执行的JRE后、启动JRE、然后启动三个classloader、各个classloader根据其类装载路径loader自己的类、然后javac开始尝试编译类、比如

c:\java\javac com\neil\pay\Consumer.java

javac 在JRE就绪后做下面的事情来完成Consumer.java的编译

1、根据classpath构建类路径参考表、作为本次编译进行的根路径
2、解析Consumer.java 类的import部分、确保在以1建立的根路径下可以找到Consumer.java 中import中声明的类和包、如果包不存在抛出package don't exsit、如果类不存在抛出can't resolve symbol
3、继续解析Consumer.java、找出其用到的所有的其他的类、一般会找出两种声明类型的类、比如Consumer.java中使用了User类以及com.neil.pay.Address.java类、对于User类、javac会先根据2中得到的信息、把User类名补全(比如补全为com.neil.pay.User.java)、然后在1根路径下查找是否存在com.neil.pay.User.java、找到后就编译他、如果找不到或者找到多个、那么编译失败;对于com.neil.pay.Address.java类其实不用再判断是否存在、因为2中已经检查过了;

上述描述中还有好多种情况没有描述出来、慢慢想投了再补充

我希望最终我可以清楚的写一篇javac/java 运行内幕!!
2 楼 许真恩 2008-04-04  
--第2章--深入类加载器

1、类加载器的作用

顾名思义、类加载器就是用来从文件系统中把静态类加载到虚拟机中、即把.class文件加载到虚拟机中、而虚拟机中把所有载入其中的类描述为一个个的Class、所以可以这么认为:类加载器加载某个类到虚拟机中、其结果就是在虚拟机中创建了这个.class文件的Class实例、大胆假设、以后从这个类new出来的一个个对象其实是根据这个.class文件的Class实例来创建的;

总结一下:类加载器负责加载静态类文件到虚拟机中、并创建其Class实例

2、JAVA的几种类加载器及其关系

有三种类加载器:根类加载器(BootStrap ClassLoader)、扩展类加载器(ExtClassLoader)、应用类加载器(AppClassLoader、又称系统类加载器SystemClassLoader)

BootStrap ClassLoader是用C++语言编写的
ExtClassLoader 是用java语言编写的
AppClassLoader 是用java语言编写的


从类的继承关系来讲ExtClassLoader 和 AppClassLoader 都集成自URLClassLoader
URLClassLoader允许指定从那个目录下来加载类

BootStrap ClassLoader默认从System的key=sun.boot.class.path指向的路径来加载类
ExtClassLoader 默认从System的key=java.ext.dirs指向的路径来加载类
AppClassLoader 默认从System的key=ClassPath指向的路径来加载类

你可以通过System.getProperty(String)来看出上述key的值

而三种类加载器都定义了一个属性为parent、改parent引用了另外一个类加载器(我不愿意用父加载器来描述、这常常和类的继承概念混淆了)

3、虚拟机启动过程

虚拟机启动时首先会产生BootStrap ClassLoader(不是载入)、该BootStrap ClassLoader的parent=null、然后BootStrap ClassLoader载入ExtClassLoader、并把其parent置为BootStrap ClassLoader、然后BootStrap ClassLoader载入AppClassLoader 、并把其parent置为ExtClassLoader;至此三种类加载器都已经在虚拟机中激活可用了、然后BootStrap ClassLoader就根据sun.boot.class.path指向的路径下的类都加载到虚拟机内、ExtClassLoader根据java.ext.dirs指向的路径下的类加载到虚拟机内、但此时AppClassLoader并不会把classpath指向目录的类都加载到虚拟机内、对于这些类只有在真正需要载入的的时候AppClassLoader才会帮我们加载

4、类加载机制

   1)类加载器载入一个类时,会先请求其parent指向的类加载器来加载类、如果其parent指向的类加载器在其类加载路径中加载不到需要的类时那么改类加载器才尝试自己来加载、而"寻找parent指向的类加载器"动作是具有递归性、也就是会一直找到BootStrapClassLoader
   2)在虚拟机启动后默认是用AppClassLoader来作为起始的类加载器
    3)如果类A最终是被类加载器CC加载的、那么类A中引用的类会用CC来作为其实类加载器进行

5、总和应用

[题目]
     在cmd下执行java Test 系统做了什么?

[描述]
1、确认哪个java.exe被执行:读取系统变量path、找出第一个含有java.exe的路径并执行
2、确认哪个JRE被使用:找到了java.exe、那么变根据java.exe查找JRE的机制来定位JRE(前面的评论已经描述过了)、启动之、JRE为我们创建BootStrapClassLoader实例、然后BootStrapClassLoader实例为我们创建ExtClassLoader和AppClassLoader实例、而后类加载器BootStrapClassLoader和ExtClassLoader载入其设定目录下的所有类
3、查找Test.class并加载到虚拟机中、调用Test.class的main方法:AppClassLoader类加载器作为起点来请求其parent加载器ExtClassLoader来加载Test.class、ExtClassLoader又会请求其parent加载器BootStrapClassLoader来加载Test.class、如果在BootStrapClassLoader或ExtClassLoader的类加载路径下发现了Test.class、那么便把类载入、否则AppClassLoader便尝试自己从ClassPath下来查找类并加载;而如果Test.class是被BootStrapClassLoader加载到了、如果Test.class引用了My.class类、那么默认会把BootStrapClassLoader作为起点类加载来加载My.class

最后就是执行Test.class的main方法了










1 楼 许真恩 2008-04-03  
-JAVA深度历险-笔记

第2章

1、描述JDK、JRE、JVM 之间的关系

JDK:Java Develope Kit
JRE:Java Runtime Envierment
JVM:Java Virtual Machine

* JDK所提供的javac.exe/java.exe等java都是用java语言写的
* 所有java语言写的程序都需要在JRE中运行
* javac.exe/java.exe等用java语言写的都需要在JRE中允许
* 安装sun提供的JDK时、会安装两个JRE、一个是JDK安装目录下的JRE、一个是     C:/prog~/java下的JRE;
* javac.exe/java.exe执行过程包括很关键的一步:查找JRE;首先查找javac.exe/java.exe所在目录的JRE、其次查找javac.exe/java.exe的父目录、最后查找注册表中注册的JRE

所以执行javac.exe/java.exe时关键要确认的
1)哪一个javac.exe/java.exe被执行
2)哪一个JRE被执行

相关推荐

    j从头开始学java

    《从头开始学Java》这份课程资料包含了Java编程的基础到进阶内容,旨在为初学者提供全面的学习指导。以下是对各个章节内容的详细解析: 1. **Java语言概述**:这部分通常会介绍Java的历史背景、特点和应用领域,...

    本项目用于从头开始梳理Java知识体系,梳理路线为,Java基础—Java高级—Java并发—常用框架—常用中间件—.zip

    java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料 java开发实践案例 项目学习 源代码 供参考java基础知识学习资料...

    java的试题操作,从头学JAVA(个人笔记)

    这份"java的试题操作,从头学JAVA(个人笔记)"资源,很可能是某位开发者在学习过程中整理的一系列Java编程问题与解答,旨在帮助初学者逐步掌握Java的核心概念和技术。 首先,从标题来看,我们可以预见到这将涵盖Java...

    FileSystem:用Java从头开始编写的文件系统API的实现

    用Java从头开始编写的文件系统API的实现 首先编译类文件:filehandle.java FileBuffer.java FileServer.java fileSystemAPI.java FileSystemClientAPI.java testClient.java确保所有文件都在同一目录中。 首先通过...

    从头学XML和Java编程一例通.part2.rar

    从头学XML和Java编程一例通.part2.rar

    免费版 Java Word控件-Free Spire.Doc for Java_2.0.0.zip

    在实际应用中,Free Spire.Doc for Java可以通过简单的API调用来集成到Java项目中。例如,以下是一个简单的示例,演示如何使用该库创建一个新的Word文档并保存到磁盘: ```java import com.spire.doc.*; public ...

    Java转Pas文件官方工具(delphi的Pas文件)

    总的来说,"Java转Pas文件官方工具"为Java和Delphi之间的代码互操作提供了一个桥梁,它允许开发者利用Java的丰富库和工具集来增强Delphi项目,同时也能让Java开发者更轻松地进入Delphi开发领域。通过深入理解和有效...

    java程序注册windows 服务

    通常,开发者会使用一个名为“服务包装器”(如`wapper安装windows 32bit 服务`所暗示的)的工具,它是一个可执行文件,能够将Java应用作为Windows服务来管理。服务包装器可以处理启动、停止、监视以及错误处理等...

    Java开发环境的搭建以及使用eclipse创建项目

    Java 开发环境的搭建是 Java 开发的第一步,这篇文章将指导读者在 Windows 环境下配置 Java 环境,并使用 Eclipse 创建 Java 项目。 一、Java 开发环境的搭建 Java 开发环境的搭建是 Java 开发的基础。为了配置 ...

    使用JAVA实现日历功能

    在本文中,我们将使用Java语言来实现日历功能。 知识点2:数组 在实现日历功能时,我们需要使用数组来存储月份和星期的名称。数组是一种基本的数据结构,在Java语言中,我们可以使用`{}`来定义一个数组。例如,在...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    总的来说,这个项目提供了从头开始构建一个NTRIP客户端的机会,涵盖了Android应用开发的多个方面,包括网络通信、协议解析、用户界面设计以及错误处理。对于想要深入理解Android开发和NTRIP协议的开发者来说,这是一...

    Better Faster Lighter Java 轻松快速学习java编程

    我们正接近一个极限,程序设计师为了撰写程序来支持所选择的结构比解决真正的问题所花的时间更多,但是有必要把 Java 搞的这么困难吗? 不,不是这样的。《轻快的好Java》能指引你一条出路。不论是要维护一个应用...

    Java Word控件-Free Spire.Doc for Java_2.0.0

    总的来说,Free Spire.Doc for Java是一个功能强大的Word文档处理工具,为Java开发者提供了一种高效、易用的方式来操作Word文档。它适用于需要大量处理Word文档的场景,如自动化报告生成、数据分析报告、合同模板...

    java课程设计java音乐播放器

    6. **自动重复播放**:此功能通常与播放模式相结合,当一首歌曲播放完后,再次从头开始播放。 在设计用户界面时,可以利用JavaFX或Swing库来创建图形化界面。这些库提供了丰富的组件,如按钮、滑块等,可以方便地...

    Java programming for C++ developers

    相比于从头开始的初学者或是来自其他编程背景的开发者,具备C/C++基础的开发者能够更快地掌握Java的核心概念和编程技巧。 ### Java与C/C++的相似性 Java在设计之初借鉴了C/C++中的许多语法特点,使得很多有经验的C...

    java漂亮软件界面 超酷可更改做java软件界面模板

    Java提供了多种库来创建GUI,如Swing和JavaFX。Swing是Java标准版(JSE)的一部分,提供了一套组件,用于创建桌面应用的用户界面。这个模板很可能就是基于Swing构建的,因为它历史悠久,且组件丰富,能满足各种界面...

    Java零基础 - 使用java命令运行Java程序.md

    通过以上步骤的学习,我们可以了解到如何从头开始编写、编译以及运行一个简单的Java程序。这对于初学者来说是非常重要的基础技能之一。随着经验的积累,你可以逐步掌握更复杂的Java编程概念和技术。

    openssl rc4 java 实现

    可能涉及到如何调用OpenSSL库在Java中使用,或者是在Java中从头实现RC4算法。 **文件名解析:** "openssl rc4 算法 java版.doc" 这个文件可能是文档形式的教程或代码示例,详细介绍了如何在Java中实现RC4算法,...

    Java数学表达式计算(Expression Evaluator)

    总结来说,"Java数学表达式计算"涉及到如何在Java环境中解析和评估复杂的数学表达式。这可以通过使用Java内置的方法、第三方库如Apache Commons Math,或是自定义解析器实现。通过分析提供的`ExprEvalSample`代码,...

    从头学XML和Java编程一例通.part3.rar

    从头学XML和Java编程一例通.part3.rar

Global site tag (gtag.js) - Google Analytics