鸟菜Java基础篇_2012_8_4

0.前言
不知从何说起呢,那就不说了。作为java小鸟菜,要学习的还有很多。坚持。欢迎大家拍砖。
本文分两部分:1.说说一些基本的东东 2. 小小的谈谈java泛型 
(注:后续博客会专门针对Java的某个点展开,免得中心不明确)

1.一基本的 && 之前想的有出入 && 有意思的 
 a.  基本名词解释:
     JRE: java runtime environment 即java运行时环境,这个不是GRE! 该环境仅用来运行java相关程序,比如浏览器applet;
     JDK:java development kit  开发包 用来开发java代码的,很明显JDK包含JRE;
     以上地球人都知道。
     问题1:那么安装JDK时,是否必须要配置CLASSPATH?
     回答:1.4版之前是需要的!之后是不需要的。
      CLASSPATH的作用是啥呢?就是当使用java  ×××(java类名) 命令来运行×××程序时,jre会按CLASSPATH路径搜×××文件,以及编译和运行需要的dt.jar和tools.jar。1.4以后的版本,JRE会自动搜索当前路径下的类文件,也会自动加载dt.jar和tools.jar,所以不需要配置CLASSPATH。
       楼主亲自试过的,不信你也试试!!
       另外: jdk安装路径下src.rar是所有核心类库源代码 
       至于jre内部搜索类的顺序,还望高人赐教!!跪求!!

b.  JAVA的GC机制
     刚看到GC,我以为是GC呢。就是垃圾回收机制。小鸟菜以后会深入研究,目前仅知道有一种叫做引用计数的算法。就是当某个对象无人引用的时候,就会被JVM资源回收。     
     想起学习C++的时候,某位叫兽举了一个非常彪悍的例子:用C++写程序,new出来的对象不回收,就像上了厕所没冲马桶一样!
     现在都交给JVM了,那是不是就高枕无忧了?也不是。不同的JVM对于GC的策略是不同的,有些和运行的线程同步进行,有些会停掉当前线程。
     当GC发生的时候,jvm不仅仅做了垃圾的回收,还做了内存碎片的整理。
     注意:仅仅是对堆内存!至于什么数据库连接,文件IO是不负责的。
     GC以后会继续谈。

c. java基本类型就8种,byte ,char,short , int ,long ,float,double ,boolean 
   对于基本数值类型,都有对应的包装类,他们全是引用类型
   特别提一句,对于引用类型,运算符"=="比较的是各自引用的对象是否是同一个,而不是其中的数值。举例如下:
  

  Integer aa = new Integer(10);
      Integer bb = new Integer(10);
      if(aa==bb)
    	  System.out.print("same");
       else
           System.out.print("different");
//输出为:different
//因为比较的是 aa和bb所引用的对象是否相同 而不是数值
//此出aa和bb都是new出来的 分配了不同的空间  
//所以会输出different
  问题2:以下输出是什么?
Integer a = 127;
Integer b = 127; 
if(a==b)                       //语句1
   System.out.print("same"); 
Integer a1 = 128;
Integer b1 = 128;
if(a1==b1)                      //语句 2
   System.out.print("same");   
//语句1 输出:same
//语句2 无输出  
这就诡异了,明明都是引用类型,为什么127就可以?看一下Integer内部方法就知道了:
 public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];  //有一个-128到127的缓存
        return new Integer(i);
    }
-128到+127在Integer内部已经生成并存入cache数组中。
当参数i传入时,先判断是否在-128到127之间,如果是,就返回对应cache中对象引用;
如果不是,就要new Interger(i) 然后返回对引用。
所以128就是 new出来的,而127是Integer内部早就分配好的,相同的入参i返回的自然是相同的引用(地址);
总之还是要注意两个引用类型的判断和比较,不要把引用和内部数值的比较混为一谈。

小结:
 关于java泛型的学习心得将在下一章和大家分享。以上都是很小的点,作为鸟菜还有很多知识要学习。
先休息一下,去翻翻C++的模板,和java泛型的差异。

你可能感兴趣的:(java,jvm,jdk,cache,Integer,applet)