zoukankan      html  css  js  c++  java
  • java基础入门-预定义类与自定义类

    预定义类与自定义类

    先上代码


    <span style="font-size:14px;">package com.ray.object;
    
    import java.util.Date;
    
    /**
     * 预定义类与自定义类
     * 
     * @author ray
     * @since 2015-04-22
     * @version 1.0
     * 
     */
    public class Person {
    	
    	public static void main(String[] args) {
    		Person bill = new Person();
    		Person jack = new Person();
    		System.out.println(bill.equals(jack));
    		Date date1 = new Date();
    		Date date2 = new Date();
    		System.out.println(date1.equals(date2));
    	}
    
    }
    </span>



    输出结果:

    false

    true

    从上面的输出结果可以看见,

    1.自定义类Person实例化后,指向两个不同的对象,也可以说指向不同的内存块

    2.预定义类Date实例化后,指向的是同一个对象,也就是说指向同一个内存块

    为什么?

    在这里我就需要说一下jvm的加载机制

    启动(Bootstrap)类加载器:引导类装入器是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib 下面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。可以通过System.out.println(System.getProperty("sun.boot.class.path"));得到启动类加载器可以加载的路径,一般将java class文件(不是jar包)放在<Java_Runtime_Home>/classes路径中将会被启动类加载器加载。

    标准扩展(Extension)类加载器:扩展类加载器是由 Sun 的 ExtClassLoader(sun.misc.Launcher$ExtClassLoader) 实现的。它负责将 < Java_Runtime_Home >/lib/ext 或者由系统变量 java.ext.dir 指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。可以通过System.out.println(System.getProperty("java.ext.dirs"));得到扩展类加载器可以加载的路径,将jar文件放在这个路径中将会被扩展类加载器加载。

    系统(System)类加载器:系统类加载器是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。由于ClassLoader.getSystemClassLoader()返回的是这个类加载器,因此得名系统类加载器。


    在jvm启动的时候,其实有一部分预定义的类就加载到内存里面去,所以上面会得到不同的结果。



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    穷举字符串的一种算法
    使用VirtualBox SDK之初步编译
    Install Shield 中判断安装还是卸载
    [转] win32内核程序中进程的pid,handle,eprocess之间相互转换的方法
    如何做PHD (1)
    在TFS 2010中使用邮件提醒功能(Email Notification)
    Chrome的Awesome Screenshot的插件离线下载
    Visual Studio 2010下生成Crypto++ lib
    VirtualBox开发环境的搭建详解
    VC版PwdHash
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4774586.html
Copyright © 2011-2022 走看看