熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

java中Class對象詳解

2013-11-23 18:46:34  來源: Java核心技術 

  java中把生成Class對象和實例對象弄混了更何況生成Class對象和生成instance都有多種方式所以只有弄清其中的原理才可以深入理解首先要生成Class對象然後再生成Instance那Class對象的生成方式有哪些呢以及其中是如何秘密生成的呢?

  Class對象的生成方式如下

  ClassforName(類名字符串

  類名class

  實例對象getClass()

  通過一段小程序來觀察一下Class對象的生成的原理

  [java] view plaincopy /**

  *

  * Administrator

  */

  /**

  * @author 梁煥月

  * 文件名TestClassjava

  * 時間上午

  */

  public class TestClass {

  public  static void main(String[] args)

  {

  try {

  //測試ClassforName()

  Class testTypeForName=ClassforName(TestClassType

  Systemoutprintln(testForName——+testTypeForName)

  //測試類名class

  Class testTypeClass=TestClassTypeclass

  Systemoutprintln(testTypeClass——+testTypeClass)

  //測試ObjectgetClass()

  TestClassType testGetClass= new TestClassType()

  Systemoutprintln(testGetClass——+testGetClassgetClass())

  } catch (ClassNotFoundException e) {

  // TODO Autogenerated catch block

  eprintStackTrace()

  }

  }

  }

  class TestClassType{

  //構造函數

  public TestClassType(){

  Systemoutprintln(——構造函數——

  }

  //靜態的參數初始化

  static{

  Systemoutprintln(——靜態的參數初始化——

  }

  //非靜態的參數初始化

  {

  Systemoutprintln(——非靜態的參數初始化——

  }

  }

  測試的結果如下

  ——靜態的參數初始化——

  testForName——class TestClassType

  testTypeClass——class TestClassType

  非靜態的參數初始化
構造函數

  testGetClass——class TestClassType

  根據結果可以發現三種生成的Class對象一樣的並且三種生成Class對象只打印一次靜態的參數初始化

  我們知道靜態的方法屬性初始化是在加載類的時候初始化而非靜態方法屬性初始化是new類實例對象的時候加載

  因此這段程序說明三種方式生成Class對象其實只有一個Class對象在生成Class對象的時候首先判斷內存中是否已經加載

  所以生成Class對象的過程其實是如此的

  當我們編寫一個新的java類時JVM就會幫我們編譯成class對象存放在同名的class文件中在運行時當需要生成這個類的對象JVM就會檢查此類是否已經裝載內存中若是沒有裝載則把class文件裝入到內存中若是裝載則根據class文件生成實例對象


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25704.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.