准备

安装JDK

下载电脑对应版本,记住安装路径

配置环境变量

	1.  我的电脑-->右键-->属性
	2.  环境变量-->JAVA_HOME
            		3.  配置path变量

测试JDK是否安装成功

  1. 打开cmd
  2. java -version

Java运行机制

编译型与解释型

Java语法

注释

  • 单行注释

    //

  • 多行注释

    /**/

  • 文档注释

    /**

    */

标识符

Java所有的组成部分都需要名字;不能使用关键字作为变量名或方法名;标识符是大小写敏感的

关键字

1569073296989.png

数据类型

1569073728138.png

1569077150785.png

低 --------------------------------------------------------------> 高

byte,short,char—> int —> long—> float —> double

数据类型转换必须满足如下规则:

  • 不能对boolean类型进行类型转换。
  • 不能把对象类型转换成不相关类的对象。
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  • 转换过程中可能导致溢出或损失精度

常量、变量

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
  • 变量名必须是合法的标识符。
  • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束

变量的命名规范

  1. 所有变量、方法、类名:见名知意
  2. 类成员变量:首字母小写和驼峰原则 : monthSalary
  3. 局部变量:首字母小写和驼峰原则
  4. 常量:大写字母和下划线:MAX_VALUE
  5. 类名:首字母大写和驼峰原则: Man, GoodMan
  6. 方法名:首字母小写和驼峰原则: run(), runRun()

运算符

Java 语言支持如下运算符:

  • 算术运算符: +,-,*,/,%,++,--
  • 赋值运算符 =
  • 关系运算符: >,<,>=,<=,==,!= instanceof
  • 逻辑运算符: &&,||,!
  • 位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
  • 条件运算符 ?:
  • 扩展赋值运算符:+=,-=,*=,/=

a++ 先赋值再自增

++a 先自增再赋值

关系运算符

1569077695124.png

逻辑运算符

1569077787907.png

包机制、JavaDoc

以 /** 开始,以* / 结束。

@author 作者名

@version 版本号

@since 指明需要最早使用的jdk版本

@param 参数名

@return 返回值情况

@throws 异常抛出情况

Java流程控制

用户交互Scanner

Scanner s = new Scanner(System.in);

两者区别:

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • 4、next() 不能得到带有空格的字符串。

nextLine():

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。

顺序结构

选择结构

if单选择结构

if(布尔表达式){
   //如果布尔表达式为true将执行的语句
}

if双选择结构

if(布尔表达式){
   //如果布尔表达式的值为true
}else{
   //如果布尔表达式的值为false
}

if多选择结构

if(布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
   //如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
   //如果布尔表达式 3的值为true执行代码
}else {
   //如果以上布尔表达式都不为true执行代码
}

嵌套的if结构

if(布尔表达式 1){
   ////如果布尔表达式 1的值为true执行代码
   if(布尔表达式 2){
      ////如果布尔表达式 2的值为true执行代码
   }
}

switch多选择结构

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}

循环结构

while循环

while( 布尔表达式 ) {
  //循环内容
}

do..while循环

do {
       //代码语句
}while(布尔表达式);

for循环

for(初始化; 布尔表达式; 更新) {
    //代码语句
}

增强for循环

for(声明语句 : 表达式)
{
   //代码句子
}

break & continue

break 关键字

continue 关键字

两者区别

break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)

continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

Java方法

何谓方法?

在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢?

  • println() 是一个方法。
  • System 是系统类。
  • out 是标准输出对象。

这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。

那么什么是方法呢?

Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。

方法的优点

  • 使程序变得更简短而清晰。
  • 有利于程序维护。
  • 可以提高程序开发的效率。
  • 提高了代码的重用性。

方法的定义

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}

方法调用

方法的重载

递归

1569159903216.png

能不用递归就不用递归,递归都可以用迭代来代替

Java数组

数组声明创建

1、声明数组

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

dataType[] arrayRefVar;   // 首选的方法
或
dataType arrayRefVar[];  // 效果相同,但不是首选方法

建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。

double[] myList;         // 首选的方法
或
double myList[];         //  效果相同,但不是首选方法

2、创建数组

Java语言使用new操作符来创建数组,语法如下:

arrayRefVar = new dataType[arraySize];

上面的语法语句做了两件事:

  • 一、使用 dataType[arraySize] 创建了一个数组。
  • 二、把新创建的数组的引用赋值给变量 arrayRefVar。

数组变量的声明,和创建数组可以用一条语句完成,如下所示:

dataType[] arrayRefVar = new dataType[arraySize];

3、内存分析

1569160087386.png

  1. 明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。因此,声明数组时不能指定其长度(数组中元素的个数),例如: int a[5]; //非法
  2. 声明一个数组的时候并没有数组被真正的创建。
  3. 构造一个数组,必须指定长度
//1.声明一个数组
int[] myList = null;

1569160110208.png

//2.创建一个数组 myList = new int[10];

1569160145769.png

//3.像数组中存值
myList[0] = 1;
myList[1] = 2;
myList[2] = 3;
myList[3] = 4;
myList[4] = 5;
myList[5] = 6;
myList[6] = 7;
myList[7] = 8;
myList[8] = 9;
myList[9] = 10;

1569160169353.png

4、三种初始化

静态初始化

int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};

动态初始化

int[] a = new int[2];
a[0]=1;
a[1]=2;

数组的默认初始化

public static void main(String[] args) {
    int[] a=new int[2];
    boolean[] b = new boolean[2];
    String[] s = new String[2];
    System.out.println(a[0]+":"+a[1]); //0,0
    System.out.println(b[0]+":"+b[1]);  //false,false
    System.out.println(s[0]+":"+s[1]); //null, null
}

5、数组边界

ArrayIndexOutOfBoundsException : 数组下标越界异常!

面向对象

三大特性:封装、继承、多态

封装

继承

super

  1. super调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法或者构造方法中
  3. super和this不能同时调用构造方法

vs this

​ 代表的对象不同

​ this:本身调用者这个对象

​ super:代表父类对象的应用

​ 前提

​ this:没有继承也可以使用

​ super:只能在继承条件才可以使用

​ 构造方法

​ this():本类的构造

​ super():父类的构造

需要有继承关系,子类重写父类的方法

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大 public>protected>default>private
  4. 抛出的异常:范围可以被缩小 ClassNotFoundException --> Exception

重写,子类方法和父类必要一致,方法体不同

多态

  1. 多态是方法的多态,属性没有
  2. 父类和子类,有联系 类型转换异常 ClassCastException
  3. 存在条件 继承关系,方法需要重写,父类引用指向子类对象
father f1 = new Son();

抽象类

接口

  1. 约束
  2. 定义一些方法,让不同的人实现
  3. public abstract
  4. public static final
  5. 接口不能被实例化,接口中没有构造方法
  6. implements可以实现多个接口
  7. 必须要重写接口中的方法

内部类

成员内部类

异常机制

Error

Exception

CTRL+ALT+T

集合框架

ArrayList

底层是Object数组。有序、可重复

LInekedList

底层是链表。增删快,查询慢

HashSet

底层是哈希表。无序、不可重复

TreeSet

底层是二叉树。不可重复、但有序(实现Comparable、Comparator接口的类型)

Map集合

双列型,存放数据无序,key不可以重复,value可以重复

HashMap

底层是哈希表。

TreeMap

底层是二叉树。可以根据key进行排序

IO

多线程

线程不一定立即执行

Thread

继承Thread类;单继承的局限性

Runnable

实现Runnable接口;避免单继承局限性,灵活方便

Callable

实现Callable接口;可以定义返回值、可以抛出异常

注解:annotation

可以被程序读取

内置注解

  • @Override 重写
  • @Deprecated 被弃用
  • @SupperessWarnings 镇压警告

元注解

  • @Target 用于描述注解的适用范围
  • @Retention 表示需要在什么级别保存该注释信息
  • @Document 说明该注解将被包含在JavaDoc中
  • @Lnherited 子类可以继承父类的注解

反射:Reflection