zoukankan      html  css  js  c++  java
  • 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.    
               }

  • 相关阅读:
    Ubuntu16.04 安装Teamviewer
    Redis 中的事务
    apache rewrite .htaccess 站点内容重定向实例
    PHP_EOL常量
    PHP 设计模式之适配器模式
    MYSQL优化
    php设计模式之简单工厂模式
    php设计模式之单例模式
    PHP设计模式之策略模式
    PHP 设计模式之观察者模式 (转载)
  • 原文地址:https://www.cnblogs.com/dragonflyyi/p/2732948.html
Copyright © 2011-2022 走看看