`

<Java.JavaEE面试整理>(3)

阅读更多

Q 04:  怎么用Java里的Package?
A 04:   利用Java的package,因类同名而造成的冲突就可以轻易地解决掉.这个package的概念也有利于帮助我们的整理一个项目中的文件.
    Java里的java.lang包是自动引入的,而其它的包就得手动用import引入了.

Q 05: 说说你对类加载器的理解?如何来运行一个包中的类?说说对动态类加载器的理解?
A 05:  类加载器是分层地布署的(class loaders are hierachical).在JVM中,类是以这种方式加载进去的,当这个类在一个已运行的类中有引用时,就会由JVM加载进去.说到这里,就会有人问了,那么第一个类是怎么加载进来的呢?第一个类是在自写类的声明的那个static main方法加载进来的.... 一个类加载器会创造一个namespace.所有的JVM中都至少包含一个类加载器,这个加载器就是内置在JVM里的primordial(或bootstrap)类加载器.下面我来看那些non-primodial类加载器.JVM中也另有一个接口可以让用户自定义的类加载器来替代那个primordial类加载器.下面是由JVM创建的类加载器:

CLASS LOADER
 RELOADABLE
EXPLANATION
 Bootstrap(primordial) No  加载JDK自带的那些类,即java.* packages里的类.(这个由sun.boot.class.path这个系统属性配置的.也就是  加载那些rt.jar和i18n.jar)
 Extensions  No
 加载JDK扩展目录下的那些jar包(这个由java.ext.dirs 系统属性配置--通常是JRE下的lib/ext目录)
  System                   
 No 加载系统classpath里配置的类(通常由java.class.path属性定义,这个由系统的ClassPath环境变量或命令提示行 里的-classpath或-cp指定.)


   
    见上传的图片:JVM class loaders

    Bootstrap(primordial)(rt.jar,i18n.jar) -->Class loaded by Bootstrap class loader have no visibility into classes loaded by its descendants(ie Extentions and System class loaders).(有了这个visibility后又会有什么用呢?)
    Extensions(lib/ext) -->The classes loaded by system class loader have visibility into classes loaded by its parents(ie Extensions and Bootstrap class loaders).那这里加载的类有了visibility后又会怎么样呢?这里的Extensions类是"javax."这样的标记的么?那么举了例子javax.sql.ConnectionEvent类加载到JVM后有了对这个类"java.sql.Time"的visibility后又会有什么好处呢?在实际编程中,怎么又一点也没有体会这个呢,更没有用到上这个特性.
    System(-classpath) --> If there were any sibling class loaders they(这个"they"是指那个"sibling class loaders"吧?是说一个sibling class loader就不能触及到由其它的sibling class loader加载的类?) cannot see classes loaded by each other.They can only see the classes loaded by their parent class loader.For example Sibling1 class loader cannot see classes loaded by Sibling2 class loader.

    Sibling1 classloader or Sibling2 classloader: -->Both Sibling1 and Sibling2 class loaders have visibility into classes loaded by their parent class loaders(eg: System,Extensions,and Bootstrap).

    Class loaders are hierachical and use a delegation model when loading a class.Class loaders request their parent to load the class first before attemping to load it themselves.When a class loads a class,the child class loaders in the hierachy will never reload the class again.Hence uniqueness is maintained.Classes loaded by a child class loader have visibility into classes loaded by its parents up the hierachy but the reverse is not true as explained in the above diagram.
Q. what do you need to do to run a class with a main() method in a package?
    Important: Two objects loaded by different class loaders are never equal even if they carry the same values,which mean a class is uniquely identified in the context of the associated class loader.This applies to singletons too, where each class loader will have its own singleton.
Q. 说说你对动态加载与静态加载的区别?

 

static  class loading
dynamic  classl  oading
类的静态加载是通过Java里的关键字"new"来完成的:
    Class MyClass{
        public static void main(String[] args){
            Car c = new Car();
        }
    }
Dynamic loading is a technique for programmatically invoking the functions of a
class loader at run time. Let us look at how to load classes dynamically.
 
Class.forName (String className); //static method which returns a Class
 
The above static method returns the class object associated with the class
name. The string className can be supplied dynamically at run time. Unlike the
static loading, the dynamic  loading will decide whether to load the class Car or
the class  Jeep at  runtime  based on a properties file and/or other runtime
conditions. Once the class is dynamically loaded the following method returns an
instance of the loaded class. It’s just like creating a class object with no
arguments.
 
class.newInstance (); //A non-static method, which creates an instance of a  
                                     //class (i.e. creates an object).
      
Jeep myJeep = null ;
//myClassName should be read from a .properties file or a Constants class.  
// stay away from hard coding values in your program. CO
String myClassName = "au.com.Jeep" ;
Class vehicleClass = Class.forName(myClassName) ;
myJeep = (Jeep) vehicleClass.newInstance();
myJeep.setFuelCapacity(50);
A NoClassDefFoundException is thrown if a class is referenced with Java’s “new” operator (i.e. static loading)but the runtime system cannot find the referenced class.
A  ClassNotFoundException  is thrown when an application tries to load in a
class through its string name using the following methods but no definition for the
class with the specified name could be found:
 
  • ƒ  The forName(..) method in class - Class.
  • ƒ  The findSystemClass(..) method in class - ClassLoader.
  • ƒ  The loadClass(..) method in class - ClassLoader. 


 Q. What are "static initializers" or "static blocks with no function names"? When a class is loaded, all blocks
that are declared static and don’t have function name (i.e. static initializers) are executed even before the
constructors are executed. As the name suggests they are typically used to initialize static fields. CO

    public class StaticInitializer {
       public static final int A = 5;
       public static final int B; //note that it is not Æ public static final int B = null;
       //note that since B is final, it can be initialized only once.
     
       //Static initializer block, which is executed only once when the class is loaded. 
       
       static {
          if(A == 5)
         B = 10;
          else
         B = 5;   
       }
     
       public StaticInitializer(){}  //constructor is called only after static initializer block
    }

The following code gives an Output of A=5, B=10.
 
    public class Test {
        System.out.println("A =" + StaticInitializer.A + ", B =" + StaticInitializer.B);
    }

  • 描述: JVM class loaders
  • 大小: 28 KB
2
1
分享到:
评论

相关推荐

    最全面的JAVA和JAVAEE面试题

    【描述】:这是一份精心整理的JAVA和JAVAEE面试题集锦,包含了我在多次面试过程中遇到的各类问题,旨在为准备面试的朋友提供全面且实用的参考资料。这份文档将帮助你深入了解Java编程语言以及Java Enterprise ...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解...

    javaEE面试宝典自整理

    JavaEE面试宝典是每一位Java开发者在求职过程中必备的参考资料,涵盖了从基础知识到高级技术的全方位面试准备。这里,我们将深入探讨其中的关键知识点,帮助你更好地理解和掌握。 首先,我们从基础开始。Java语言的...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx ...

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188).zip

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188) 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring...

    java开发校招面试题库(附答案与解析)java篇.pdf

    Java开发校招面试题库是互联网学习求职神器牛客网针对广大求职者整理的一套面试资源,它包含的不仅是题目和答案,还有详细的解析,帮助求职者全面理解和掌握知识点,为应聘Java开发岗位的校招面试做好充分准备。...

    IT名企JavaEE面试题最新整理(附答案)

    在本段内容中,涉及到JavaEE面试中常见的知识点,包括Java Web技术、集合框架、异常处理、多线程、设计模式、数据库操作等方面。以下是详细的知识点梳理: Servlet生命周期:Servlet的生命周期包括初始化(init)、...

    JAVA核心知识点整理.pdf

    这份文档旨在整理和复习这些关键知识点,帮助开发者在面试和日常工作中提升技能。 ### 1. JVM (Java虚拟机) JVM是Java程序的运行环境,它负责将字节码转换为机器码执行。JVM的内存结构对性能优化有着直接影响。 #...

    2018 年蚂蚁课堂(每特教育) Java工程师面试宝典-V1.0.docx

    2018 年蚂蚁课堂(每特教育) Java工程师面试宝典-V1.0.docx。 Java高级工程师面试宝典 该面试宝典由蚂蚁课堂创始人-余胜军原创整理 内容含括了:JavaSE、JavaEE、微服务、分布式、项目等。 java

    资深工程师整理面试题:Java

    Java 面试题整理 下面是对给定文件的详细知识点总结: 1. J2EE 是什么? 答:J2EE 是 Sun 公司提出的多层、分布式、基于组件的企业级应用模型。在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又...

    最新javaee就业面试宝典2016

    这是本人通过面试经历和网上面试者的面试整理出的一份javaee最新面试题,涵盖了从java基础到系统架构的所有面试题,并且配有详细的解答和分析,是做java开发人员的面试必备宝典。

    Java面试宝典5.0And6.0.zip

    该宝典系统地整理了Java初级,中级,高级的基础知识,代码质量,解题思路,优化效率等面试要点,面试的基础知识从编程语言,数据结构及算法三方面总结程序员面试知识点,世间事,很多都可投机取巧,但技术却必须靠日积月累的...

    【电子版】校招面试题库(附答案与解析)java篇-破解密码.pdf

    本资料详细整理了JavaSE、JavaEE、JavaWeb、JDBC、XML编程、计算机网络、操作系统、算法与数据结构、设计模式以及场景题等多个方面,旨在帮助求职者全面准备Java相关岗位的面试。 1. JavaSE部分 - Java基础:这...

    最新大厂Java面试题(上).pdf

    ### Java面试题:JVM篇 #### Java内存区域 Java内存区域主要指JVM在执行Java程序过程中管理的内存空间,具体分为以下几个主要区域: 1. **程序计数器(Program Counter Register)**:是当前线程所执行的字节码的...

    自整理Java关于基础和框架的面试题

    ### 自整理Java关于基础和框架的面试题 #### 基础知识点 ##### JDK常用的包 - **java.lang**: 包含所有基本类,如`String`、`Math`等。 - **java.util**: 提供集合框架、日期/时间设施、事件模型、杂项实用程序类...

    整理过的Java方面的面试题目

    Java工程师面试题目通常涵盖多个方面,包括基础语法、面向对象编程、集合框架、多线程、JVM内存模型、异常处理、I/O流、网络编程、数据库操作、设计模式、Spring框架、JavaEE相关技术(如JSP)以及最新的技术趋势,...

    最新的大厂面试资料全面

    4. **Java**:这是核心标签,意味着所有的面试题都与Java语言相关,可能包括了JavaSE、JavaEE以及相关的开源框架和工具。 根据压缩包子文件的文件名称“面经”,我们可以推断这是一份集成了众多面试经验的文档,...

    java资料面试题

    #### 1.5 JavaSE.JavaEE和JavaME有什么区别? - **Java SE (Standard Edition)**:标准版,提供核心 Java 技术,包括基本的类库和开发工具,适用于桌面应用程序开发。 - **Java EE (Enterprise Edition)**:企业版...

Global site tag (gtag.js) - Google Analytics