Java基础笔记

Java基础

1、JDK、JRE、JVM

JDK:Java开发工具包,包括JRE和开发的工具(如编译工具:javac.exe、打包工具:jar.exe等)
JRE:Java运行环境
JVM:Java虚拟机
image-20210819202244987

为什么要配置path环境变量?

​ 为了在任何路径下都可以运行Java指令

2、使用文本文档进行java代码的编写

  • 将java代码编写到.java为后缀名的文件中
  • 通过javac命令对该java文件进行编译
  • 通过java命令对生成的class文件进行运行
image-20210819203250048

示例:

  1. 用记事本编写java代码,后缀名改为.java

    class HelloWorld{
           public static void main(String[] args){
                 System.out.print("hello,Xiangxiang!");
           }
    }
    
  2. 在该目录下打开cmd,输入javac hello.java进行编译

    image-20210819204833190

    出现错误!

    错误原因为记事本文件编码为UTF-8,而Windows的cmd编码为GBK

    解决方法:编译语句改为javac -encoding UTF-8 hello.java

    编译成功,出现.class文件

    image-20210819205432974

  3. 使用java命令运行.class文件

    image-20210819205549154

3、注释

//单行注释

/**/多行注释

/** */文档注释(java注释,注释内容可以被JDK所提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档)

文档注释示例:

  1. 添加文档注释

    /**
        @author  李想想
        @version v1.0
    */
    public class HelloWorld{
           public static void main(String[] args){
                 System.out.print("hello,Xiangxiang!");
           }
    }
    
  2. 通过javadoc进行解析

    javadoc -d myhello -author -version -encoding UTF-8 HelloWorld.java
    

    运行成功,打开index.html网页

    image-20210819212015519

注意

  • 使用javadoc解析的类必须声明为public
  • 类名和文件名需要一致
  • 解决中文乱码问题可以通过修改文件编码为ANSI或者编译时添加-encoding UTF-8

4、关键字、保留字、标识符

image-20210819220425098

保留字:现有Java版本尚未使用,但以后可能会作为关键字使用,如gotoconst

标识符:对各种变量方法等要素命名时使用的字符序列

标识符命名规则

  • 由26个英文字母大小写,0~9,下划线_,$组成
  • 由英文字母,_或者$开头
  • 不能使用关键字和保留字
  • 不能有空格
  • 严格区分大小写,长度无限制

5、变量

变量格式:数据类型 变量名 = 变量值

数据类型

  1. 基本数据类型

    • 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节,以L或者l结尾)
    • 浮点型:float(4字节,以F或者f结尾)、double(8字节)
    • 字符型:char(2字节)
    • 布尔型:boolean

    运算规则

    ​ a)自动类型提升(容量小–>容量大)

    bytecharshort–>int–>long–>float–>double

    ​ b)强制类型转换(容量大–>容量小)

                  ```java
                  double d1=12.9;
                  int i1=(int)d1;
                  System.out.print(i1);   //输出为12
                  ```
    

    注意

    ​ 对于整型常量,默认类型为int型,对于浮点型常量,默认类型为double

       ```java
       byte b=12;
       byte b1=b+1;   //编译错误,1默认为int型
       ```
    
  2. 引用数据类型

    • 类:class
    • 接口:interface
    • 数组:array

String

  • 几个例子

    String s1="hello world";
    String s2=3.5f+"";  //3.5
    System.out.println(3+4+"hello!");   //7hello!
    System.out.println("hello!"+3+4);   //hello!34
    System.out.println('a'+1+"hello!");    //98hello!
    Systrm.out.println("hello!"+'a'+1);    //hello!a1
    

6、运算符

  • 算术运算符
image-20210820144943285

注意

​ % 最终结果符号与被模数符号一致

  • 赋值运算符:=、+=、-=、*=、/=、%=
  • 比较运算符:>、<、<=、>=、==、!=、instanceof
  • 逻辑运算符:&、|、!、&&、||、^
  • 位运算符:<<、>>、>>>、&、|、^、~
  • 三元运算符:(条件表达式)?表达式1:表达式2

7、程序流程结构

顺序结构、循环结构、分支结构

8、Scanner类

  • 导包

    import java.util.Scanner;
    
  • Scanner实例化

    Scanner in=new Scanner(System.in);
    int num=in.nextInt();
    

9、数组

常用算法

  • 查找

    二分法查找

    //二分法查找
     public void search(int[] array,int num){
         int head=0;
         int end=array.length-1;
    
         while (head<=end){
             int mid=(head+end)/2;
    
             if(num==array[mid]){
                 System.out.println("元素位置为"+mid);
                 return;
             }
             else if(num>array[mid]){
                 head=mid+1;
             }
             else {
                 end=mid-1;
             }
         }
         System.out.println("未找到指定元素!");
     }
    
  • 排序

    1. 插入排序

          //插入排序
          public void insertSort(int[] array){
              for(int i=1;i<array.length;i++){
                  int temp=array[i];
                  int j=i-1;
                  while (j>=0&&array[j]>=temp){
                      array[j+1]=array[j];
                      j--;
                  }
                  array[j+1]=temp;
              }
          }
      
    2. 快速排序

       //冒泡排序
          public void bubbleSort(int[] array){
              for(int i=0;i<array.length;i++){
                  for(int j=0;j<array.length-1;j++){
                      if(array[j]>=array[j+1]){
                          int temp=array[j];
                          array[j]=array[j+1];
                          array[j+1]=temp;
                      }
                  }
              }
          }
      
       //快速排序
          public void quickSort(int[] array,int low,int high){
              int a=low,b=high;
              if(a>=b){
                  return;
              }
      
              int pivotkey=array[a];
      
              while (a<b){
                  while (a<b&&array[b]>=pivotkey){
                      b--;
                  }
                  array[a]=array[b];
      
                  while (a<b&&array[a]<=pivotkey){
                      a++;
                  }
                  array[b]=array[a];
              }
              array[a]=pivotkey;
              quickSort(array,low,a-1);
              quickSort(array,a+1,high);
          }
      
    3. 选择排序

      //选择排序
          public void selectSort(int[] array){
              for(int i = 0; i < array.length - 1 ; i++){
                  int min = i;
                  for (int j = i + 1; j < array.length ;j++){
                      if(array[j] < array[min]){
                          min = j;
                      }
                  }
                  if(min != i){
                      int temp =  array[min];
                      array[min] = array[i];
                      array[i] = temp;
                  }
              }
          }
      
    4. 归并排序

      public static void mergeSort(int[] a,int s,int e){
          int m = (s + e) / 2;
          if (s < e){
            mergeSort(a,s,m);
            mergeSort(a,m+1,e);
            //归并
            merge(a,s,m,e);
          }
        }
      
        private static void merge(int[] a, int s, int m, int e) {
          int[] temp = new int[(e - s) + 1];
          int l = s;
          int r = m+1;
          int i = 0;
            
          while (l <= m && r <= e){
            if (a[l] < a[r]){
              temp[i++] = a[l++];
            }else{
              temp[i++] = a[r++];
            }
          }
      
          while (l <= m){
            temp[i++] = a[l++];
          }
          while (r <= e){
            temp[i++] = a[r++];
          }
          
          for (int n = 0; n < temp.length; n++) {
            a[s+n] = temp[n];
          }
          
        }
      

      Arrays工具类

      image-20210903155929751

10、面向对象

  1. 对象的内存解析
image-20210903161542265

引用类型的变量,只可能存储两类值:null或地址值

JVM规范

  • 虚拟机栈,即为平时提到的栈结构。我们将局部变量存储在栈结构中

  • 堆,我们将new出来的结构(比如数组、对象)加载在堆空间中。补充:对象的属性(非static的)加载在堆空间中

  • 方法区:类的加载信息、常量池、静态域

  1. 可变个数形参

    • 格式:数据类型 … 变量名

    • 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个…

  2. 成员变量与局部变量

    • 在类中的位置不同:成员变量在类中方法外,局部变量在类中方法内或方法声明上
    • 在内存中的位置不同:成员变量在堆内存里,局部变量在栈内存里
  3. 权限修饰符

    private缺省protectedpublic

    image-20210903171953192
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值