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.    
               }

  • 相关阅读:
    RE
    【LeetCode】198. House Robber
    【LeetCode】053. Maximum Subarray
    【LeetCode】152. Maximum Product Subarray
    【LeetCode】238.Product of Array Except Self
    【LeetCode】042 Trapping Rain Water
    【LeetCode】011 Container With Most Water
    【LeetCode】004. Median of Two Sorted Arrays
    【LeetCode】454 4Sum II
    【LeetCode】259 3Sum Smaller
  • 原文地址:https://www.cnblogs.com/dragonflyyi/p/2732948.html
Copyright © 2011-2022 走看看