JAVA 基础知识

1.   什么是SDK,JDK, JRE,JVM 以及他们的区别或异同?
SDK--------Software Develop Kit,
中文意思就是“软件开发工具包”。这是一个覆盖面相当广泛的名词,
                  可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。
JDK---------Java SKD, 最早也叫JSDK (Java Software Develop Kit). 后来改名为JDK (Java Develop Kit). JDK 作为Java开发工具包,
                 主要用于构建在java平台上运行的应用程序, applet, 组件,是JAVA的核心所在,包括了java 的运行环境JRE
                (JAVA RUN ENVIRONMENT), java工具,基础类库(rt.jar).
JRE--------Java Runtime Environment是指Java的运行环境,是面向Java程序的使用者,而不是开发者. JDK 安装完后基本目录为:
                 ---Java
                        |----jdk1.6.0_21
                                    |----bin             (包含了JDK所提供的工具,如:Java.exe  , javac.exe )
                                    |----include
                                    |----lib
                                    |----jre
                                           |-----lib       (包含基础类库  rt.jar )
                                           |-----bin
                                    |----src
                                    |----(others folder/files)
                        |----jre1.6.0_21
                                    |----bin
                                    |----lib JVM ------ 
2.  为何会有两套JRE ?   以及 java程序又是如何选择合适的JRE来运行程序的(或者说系统是如何分配哪套JRE执行的)?
      如果我们只是需要运行java程序,那么只需要下载并安装一个jre 就可以,而不需要安装JDK。JDK 包含了java程序员开发时候用               到的一些工具,而JDK本身就是一些java程序,需要有一套自己的jre来支持,两套jre主要是用来分担工作。
       如果用户之需要运行java程序,那么有 c:\program files\java\jre 就ok.
       当用户是 java 程序员,需要 java 开发环境,那么开发时,系统就会优先去找“ java(java.exe) 、 javac(javac.exe) ”
       这些命令本身的目录或者他们的 父目录的 jre; 这样开发时一般运行的是 jdk 下的 jre
       (即:C:\Program Files\Java\jdk1.6.0_21\jre )
       而运行外部程序时,一般运行的是 c:\program files\java\jre ,实现了分工,不同的 jre 负责各自范围的内容.  

      既然您的電腦裡頭至少有兩套 JRE ,那麼誰來決定用哪一套 JRE 呢 ? 這個重責大任就落在 java.exe 的身上.
      當我們在命令列輸入java XXX的時候, java.exe 的工作就是找到合適的 JRE 來執行類 別 檔。
      java.exe 依照底下邏輯來尋找 JRE:
            1. 自己的目錄下有 沒 有 JRE 目錄。 ( 這個部分這樣 說 並不是非常精確,原因請詳見 JDK 原始碼,這此不特 別說 明 )
            2. 父目錄底下 JRE 子目錄。
            3. 查詢 Windows Registry( HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\ ) 。
    所以, java.exe 的執行結果和您電腦裡面哪一個 java.exe 被執行,然後哪一 套 JRE 被拿來執行 Java 應用程式有莫大的關係.



3.   如何设置换环境变量  
     JAVA 用到的环境变量主要有3 个,JAVA_HOME、classpath、path ,我们逐个分析下:   

    JAVA_HOME 指向的是JDK 的安装路径,如C:\Program Files\Java\jdk1.6.0_21

           如何设置path, classpath       
           现在可以明白设path和classpath的作用了:path是为jdk提供的那些工具设的,如java.exe,javac.exe,
           (set the path, you can use those command in any directory, if not, you should specify the full path,
              e.g   
             if you don't set path variable you need to      >C:\Program Files\Java\jdk1.5.0_22\bin\javac   Hello.java
             if you set path variable,  you just need to:     >javac Hello.java         
                  )
           而 classpath是为java程序所用到的库文件所设的,  (java_home=C:\Program Files\Java\jdk1.6.0_21)        
           于是path设成:java_home\bin;
           而classpath设为:java_home\jre\lib\rt.jar,

如果是Win2000或者XP,使用鼠标右击"我的电脑"->属性->高级->环境变量
系统变量->新建->变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.6.0_21
系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib\rt.jar
系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%\bin;

看好了CLASSPATH中第一 个".",这个代表当前目录,很多人HelloWorld没有运行起来大多是这个原因。

基础类库(rt.jar)
DK

4.  静态函数(static)中,不能使用 this.

1.  解释型语言与编译型语言的区别.
      计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
      翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
     编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了 (exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
      解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比 如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较 低。   
      编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开 发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object   Pascal(Delphi)、VB等基本都可视为编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性 有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、MATLAB 等等。    
      但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级 语言上。
例如: 
      Java不一样他首先由编译器编译成.class类型的文件,这个是java自己类型的文件然后在通过虚拟机(JVM)从.class文件中读一行解释执 行一行,所以他是解释型的语言,而由于java对于多种不同的操作系统有不同的JVM所以 Java实现了真正意义上的跨平台!
请观看下面两张图 了解一下Java的虚拟机机制:

(1)  java语言的编译--> 解释---> 执行过程

Java 学习笔记 - yql_dragonfly - 朝闻道,夕死可矣


 (2)java的虚拟机
Java 学习笔记 - yql_dragonfly - 朝闻道,夕死可矣

2. 进程  ,       线程  以及区别.   (还需要专门学习 )

3. java 基本数据类型以及其对应的类:  (above the detail info , please refer to JAVA Platform Standard documentation )
  Boolean      VS        boolean 
  Byte           VS        byte
  Character    VS        char
  Double        VS        double
  Float           VS        float
  Integer         VS        int
  Long            VS        long
  Short           VS        short

 

1. 静态方法可以通过类名直接引用, 如: Math.sqrt();  而非静态方法,一定要通过对象(此对象已完成初始化)来引用
2. JAVA 同时支持多维数组和嵌套数组吗?
   答: 不对,Java只支持嵌套数组,不支持多维数组.  多维数组被称为数组的数组,其定义是一维数组的嵌套来实现的。
    由于java多维数组是数组的数组,所以java多维数组(二维)并不是规则的矩阵。
    e.g:    int  x= new[3][] ;

  这句代码表示数组x3个元素,每个元素都是int类型的一维数组,相当于定义了3个数组变量,分别为:x[0][]x[1][]x[2][]。 在这里可以把x[0]x[1]x[2]看作变量名,通过new运算符使其指向它们的数组对象,如:

 

x[0]=new int[3];

 

x[1]=new int[2];

由此可以看出,二维数组x的每行长度可以是不一样的。
3. 函数参数传递:1. 基本类型的参数是值传递; 2. 对象类型的参数是引用传递
  (参数对象的值改变了,原始对象会有影响;参数对象本身改变了,原始引用对象不会改变)

  e.g:   Point   T= new Point(10, 20)  ; // 原始值
           static  void changeValue1(Point A)   // A 为port 类型,调用方式为:  changeValue(T) ;
             {
                   A = new Point( 200, 400);     // A has been changed, but T not.            
              }
          static void changeValue2(Point B)
          {  
                 B.x = 15;
                 B.y = 25;              // Here  B changed, T also changed.    
           }

posted @ 2012-10-21 21:02  yql_dragonfly  阅读(314)  评论(0编辑  收藏  举报