JAVA-基本知识

时间:2021-06-29 17:01:59

1.JAVA跨平台

  其实就是在每个平台上要安装对应该操作系统的JVM,JVM负责解析执行,即实现了跨平台。JVM是操作系统与java程序之间的桥梁。

2。JRE:java运行环境,包含JVM+核心类库,运行一个java程序,只需JRE就可以了。

  JDK:java开发工具包,包含java开发工具+JRE,所以安装了JDK就可以不用再安装JRE了。

java开发工具包包含:编译工具(javac.exe),打包工具(jar.exe)

  即:使用JDK开发完java程序,交给JRE运行。

3. DOS命令行

  1.进入到E盘   e:

  2.列出e盘下的文件目录 dir

  3.在e盘中进入到某个文件夹,用cd  文件夹名  (可以使用cd  jdk*  来匹配文件名)

  4.返回上一级目录  cd..

  5.返回e盘根目录 cd\

  6.md abc  在e盘根目录创建文件夹abc

  7.删除文件夹 abc     rd abc   注意这样删除文件夹必须确保abc文件夹是空的,如果abc有内容,则删不掉,为了保护数据,防止误删。

   其实Windows的删除文件夹,内部也是先删里面的文件,在删除文件夹。只不过微软封装起来了。

  8.删除文件是del a.txt  全部删除是del *        注意:rd是删除文件夹,del是删除文件

  9.exit 退出DOS命令行

  

  10.help  可以查看所有命令

     help cd  查看 cd 命名用法

4. 环境变量

  javac.exe只能在jdk安装目录的bin下才能执行,其他路径找不到javac.exe,如果想要在任何路径下都能执行javac,必须配置环境变量。

  如在命令行窗口的d盘符下输入notepad,首先会在d盘搜索notepad.exe,如果找不到,会到系统的环境变量path路径里去寻找有没有notepad.exe。如果还找不到就会报错。

  环境变量path中存储的是系统中各应用程序的路径。

javac -version查看运行版本

临时环境变量设置:

可以把jdk的安装目录拷贝到U盘中,插到别的电脑中运行,此时只需要设置临时环境变量就可以运行。

1.打开cmd

2.set,可以查询系统中的所有环境变量

3.set path 查看path环境变量里的值

4.set path=H:\Program Files\Java\jdk1.8.0_74\bin     把系统环境变量path的值修改为当前值,注意:只在当前命令行窗口有效,也就是临时环境变量设置

set path=H:\Program Files\Java\jdk1.8.0_74\bin;%path%  在原来path的基础上追加新的路径

5.    *. java文件通过javac.exe编译成 *.class字节码,然后通过java.exe运行程序

  

6.classpath  类似path设置

 classpath是告诉系统在该路径下查找 *.class文件去执行,如果不设置classpath,必须到class类文件下才能执行,否则报错,找不到类文件

path是告诉系统javac 所在的路径

set classpath=.;d:\myclass;    . 是指cmd命令行盘符所在的路径

set classpath=.;%classpath%;

7.  break :跳出switch语句或者循环(循环不再执行了),break只能用于switch语句或者循环语句中。

  break语句后面不能有其他语句,不然会报错。会报告有无法访问的语句。

  注意:如果是循环嵌套,break只作用于最近的那个循环。即break只跳出当前循环,如果想要跳出外层的循环,可以给循环加个名字,break 名字   结束指定的循环。

  continue:结束本次循环,继续下一次循环。如果continue后面有其他语句,也不会执行,

8. 内存的划分

1.寄存器  :CPU来操作处理

  2.本地方法区:和所在系统相关的

  3.方法区:

  4.堆内存:存储的是数组和对象,数组也是对象,即凡是new建立出来的对象都在堆内存中。

   1。堆内存的变量都会默认初始化,整数初始值为0,

2。每一个实体都有首地址 ,该地址值一般会赋值给栈内存的变量,即栈内存变量指向该地址,如果没有变量指向该地址,这块内存就会成为垃圾,将会被回收。

3.垃圾回收机制   内存管理

  5.栈内存:存储的都是局部变量,而且变量所处的作用域一旦结束,该变量就会自动释放,生命周期都比较短。

  栈内存的变量不会初始化,不赋值就操作会报错。

注意:javac  Test.java  编译只是检查语法问题,不会分配内存空间,分配空间是运行时分配的,即java Test  才分配内存空间。

9.

  数组定义格式1:

  int [] arr=new int[3];//不明确数组里的数据时候用

  数组定义格式2://数组里的数据已确定时用

  int [] arr=new int[]{14,55,44};

  int [] arr={14,55,44};

10.

  /*
    冒泡排序。
  */
  public static void bubbleSort(int[] arr)
  {
    for(int x=0; x<arr.length-1; x++)
    {
      for(int y=0; y<arr.length-1-x; y++)
      {
        if(arr[y]>arr[y+1])
        {
          int temp = arr[y];
          arr[y] = arr[y+1];
          arr[y+1] = temp;
 
        }
      }
    }
  }

  /*
    选择排序。
  */
  public static void selectSort(int[] arr)
  {
    for(int x=0; x<arr.length-1; x++)
    {
      for(int y=x+1; y<arr.length; y++)
      {
        if(arr[x]>arr[y])
        {
          int temp = arr[x];
          arr[x] = arr[y];
          arr[y] = temp;

        }
      }
    }
  }

  /*
    二分查找法(折半查找)。前提必须是有序数组
  有序的数组可以使用二分查找,无序的数组不能使用,更不能对无序数组先排序后使用二分查找,因为无序数组排序后,角标已经变化了,查找出来的角标也不正确了。、

无序的数组,可以直接循环数组判断即可。

一般数组是有序的,而且涉及到查找,一般使用二分查找法。
  */
  public static int halfSearch(int[] arr,int key)
  {
    int max,min,mid;
    min = 0;
    max = arr.length-1;
    mid = (max+min)/2;

    while(arr[mid]!=key)
    {
      if(key>arr[mid])
        min = mid + 1;
      else if(key<arr[mid])
        max = mid - 1;

      if(max<min)
        return -1;

      mid = (max+min)/2;
    }
    return mid;

  }