1 Java概述

1.1 Java语言发展史

  • Java5和Java8是更新力度最大的版本

    1.2 计算机进制转换

    太简单以至于我不想做笔记

1.3 计算机存储单元

  • 字节(Byte):计算机最小存储单元
  • 1 Byte = 8 bit

    1.4 常用命令提示符(Windows)

    以下命令提示符过于简单,建议读者自学补充内容

  • 切换盘符 C: (注:所有路径不区分大小写)

  • 切换路径 cd
  • Tab键自动补全
  • 下级目录 \
  • 上级目录 ..
  • 列出子文件 dir
  • 清屏 cls
  • 退出 exit
  • 切换命令——方向键

    1.6 Java语言开发环境搭建

    JVM(Java Virtual Machine)

  • JVM是Java程序的运行环境,是Java跨平台特性的支撑

    JRE/JDK

  • JRE(Java Runtime Environment): 是Java程序的运行环境,包含JVM和运行时所需要的 核心类库

  • JDK(Java Development Kit): 是Java程序开发工具包,包含 JRE 和Java开发人员使用的工具

    想要运行一个已有的Java程序,只需安装 JRE 想要开发一个全新的Java程序,必须安装 JDK

添加环境变量

JDK 安装在 D:\Java\jdk-9.0.4 目录下为例

  • 添加一个全局变量: JAVA_HOME: D:\Java\jdk-9.0.4
  • 改变一个全局变量 Path: 在最前面添加 %JAVA_HOME%\bin

    使用命令行运行java程序

  • 新建一个java文件(类名必须与函数名完全一致)

  • 使用 javac 进行编译(增加一个后缀为 class 的同名文件)
  • 使用 java 进行运行
  • 在源文件修改之后,必须重新进行编译才会生效

    1.7 Java基本概念

  • // 为单行注释, /**/ 之间为多行(区块)注释

  • 关键字的特点
    • 完全小写的英文字母
    • 编译器中有特殊颜色
  • 标识符
    • 可以包括英文字母(区分大小写),阿拉伯数字, $_
    • 不能以数字开头
    • 不能是关键字
  • 一个文件只允许最多有一个 public
  • println 输出后自动换行, print 输出后并不会进行换行

    1.8 IDEA介绍

  • IDEA项目结构

    • 由上级到下级:项目(Project)-模块(Module)-包(Package)
    • 所有的代码写在 src 文件中
    • src 下添加package,用 . 分隔,代表文件树的结构,例如 train.basic.hellworld 实际上是新建了三个嵌套文件夹
  • idea常用的快捷键

    • command + option + L:自动格式化
    • control + space:代码自动补全

      2 Java基本概念

      2.1 基本数据类型

  • 字符串不是基本类型,而是引用类型

  • 浮点数默认类型为double,如果一定要使用float,需要加上后缀F
  • 整数默认为int类型,如果一定要使用long,需要加上后缀L
  • 数据的宽泛性与占用内存大小并不一定相关,例如float占用4字节,long占用8字节,但float能表示的数据更加广泛
  • 类型转换

    • 隐式类型转换:数据范围从小到大,自动进行类型转换
    • 显式类型转换:加上强制转换的类型
    • 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,则编译器会自动进行强制类型转换(但是注意,这种类型转换只针对常量进行,如果右侧含有变量,则会报错)

      整数型

  • byte(1字节)

  • short(2字节)
  • int(4字节)
  • long(8字节)

    浮点型

  • float(4字节)

  • double(8字节)

    字符型

  • char(2字节)

    布尔型

  • boolean(1字节)

2.2 常量

final Type Name = Expression;

  • 约定俗成的规定:常量标识符的名字采用大写字母,单词之间用下划线隔开
  • final KILOGRAMS_PER_POUND = 0.4545
  • 一些内置的常量

    1. Integer.MAX_VALUE // int类型最大正整数值
    2. Integer.MIN_VALUE // int类型最小负整数值
    3. Double.MAX_VALUE // double类型最大正数
    4. Double.MIN_VALUE // double类型最大正数
    5. Double.POSITIVE_INFINITY // double类型正无限大值
    6. Double.NEGATIVE_INFINITY // double类型负无限大值
    7. Double.NaN // double类型中非数字类型的值
    8. // Float则定义了类似于Double类的为double定义的常量

    2.3 变量

  • Java编译器要求所有变量在使用之前必须初始化

  • Math.round() 是四舍五入函数,传入参数为double或float类型的浮点数
  • 字符串的连接直接使用 + 进行

    2.4 运算符

  • + 有三种用法

    • 对于数值,进行加法运算
    • 对于char类型,char被提升为int,然后再进行加法计算
    • 对于字符串String类型,代表字符串的连接操作
  • 自增与自减运算符
    • 单独使用时,++i与i++没有任何区别
    • 与其他操作符混合使用时,++i先进行自增,i++先进行其他操作再自增
  • 赋值转换
    • 如果赋值转换是从低级到高级,Java会自动进行转换
    • 如果赋值转换是从高级到低级,则需要强制进行转换
  • 三元运算符 <条件语句>?<表达式1>:<表达式2>

3 方法

3.1 方法的定义

  • public static void 方法名称(){方法体}
  • public static int sum(int a, int b){return a + b;}
  • 注意事项

    • 方法定义无先后顺序之分
    • 方法定义不能嵌套
    • 方法定义后需要调用才能执行

      3.2 方法的调用

      太简单以至于不太想做笔记,字面意思理解就好

  • 直接调用

  • 打印调用
  • 赋值调用

    3.3 方法重载

  • 方法重载:多个方法名称一样,但是参数不一样

  • 参数不同的情况
    • 参数个数不同
    • 参数类型不同
    • 参数多类型的顺序不同
  • 方法不可重载的情况

    • 返回值类型不同
    • 参数名称不同

      4 分支语句

      4.1 单if语句

      1. if(关系表达式){
      2. 语句体;
      3. }

      4.2 if…else语句

      1. if(关系表达式){
      2. 语句体1;
      3. }else{
      4. 语句体2;
      5. }

      4.3 if…else if…else语句

      1. if(判断条件1){
      2. 执行语句1;
      3. }else if(判断条件2){
      4. 执行语句2;
      5. }
      6. ...
      7. }else if(判断条件n){
      8. 执行语句n;
      9. }else{
      10. 执行语句n+1;
      11. }

      4.4 switch语句

  • 表达式的类型为:byte/short/char/int/String/enum 中的一种

  • 多个case后面的数值不可以重复
  • switch语句的格式可以很灵活:前后顺序可以颠倒,而且break语句可以省略
  • 从匹配到的case语句开始向下执行,直到遇到break或者整体结束为止(穿透性) ```java switch(表达式){ case 常量值1:
    1. 语句体1;
    2. break;
    case 常量值2:
    1. 语句体2;
    2. break;
    … default:
    1. 语句体n+1;
    2. break;
    }
  1. <a name="p2fWQ"></a>
  2. # 5 循环
  3. <a name="nFd96"></a>
  4. ## 5.1 for循环
  5. ```java
  6. for(初始化表达式;布尔表达式;步进表达式){
  7. 循环体;
  8. }

5.2 while循环

  1. 初始化表达式;
  2. while(布尔表达式){
  3. 循环体;
  4. 步进表达式;
  5. }

5.3 do…while循环

  1. 初始化表达式
  2. do{
  3. 循环体;
  4. 步进表达式;
  5. }while(布尔表达式)

5.4 循环控制

  • break 一旦执行,整个循环立即结束
  • continue 一旦执行,直接跳至下一次循环

    6 数组与集合

    6.1 数组

  1. 数组的特点
  • 数组是一种引用数据类型
  • 数组当中的多个数据,类型必须统一
  • 数组的长度在程序运行期间不可改变
  1. 数组的初始化
    1. 动态初始化(指定长度) int[] array = new int[100];
    2. 静态初始化(指定内容) int[] array = new int[] {5,15,25};
    3. 省略的静态初始化 int[] array = {5, 15, 25};
  2. 数组初始化可以拆分

    1. //动态拆分
    2. int[] arrayA;
    3. arrayA = new int[100];
    4. //静态拆分
    5. int[] arrayB;
    6. arrayB = new int[] {15,25,35};
  3. 使用动态初始化,其中元素会有一个默认值

    1. 整型为0
    2. 浮点型为0.0
    3. 字符型为’\u0000’
    4. 布尔类型为false
    5. 引用类型为null
  4. 使用静态初始化,也有一个赋默认值的过程

    6.2 Java内存划分

  5. 栈(Stack)

    1. 存放方法中的局部变量
    2. 一旦超出作用域,立刻从栈内存当中消失
  6. 堆(Heap)
    1. 存放 new 出来的东西
    2. 堆内存里面的东西都有一个地址值(16进制)
    3. 堆内存里面的数据,都有默认值(同动态初始化数组的默认值)
  7. 方法区(Method Area)
    1. 存储.class相关信息,包含方法的信息
  8. 本地方法栈(Native Method Stack)
    1. 与操作系统相关
  9. 寄存器(pc Register)
    1. 与CPU相关

      6.3 集合

      集合算法
  • static Object max(Collection a) 返回集合a中元素最大值(基于其接口Comparable的方法compareTo())
  • static Object max(Collection a, Comparator c) 根据比较器c的顺序,返回集合a的最大值
  • static Object min(Collection a)
  • static Object min(Collection a, Comparator c)
  • static void reverse(List a)
  • static void shuffle(List a)
  • static void sort(List a)
  • static void sort(List a, Comparator c)