• 程序的运行过程

    高级编程语言编写源程序,把它编译为可执行程序,然后在操作系统中运行可执行程序。

  • Java 语言的跨平台特性

    同一个Java程序可以在多个操作系统中运行。Java语言的跨平台特性主要归功于Java虚拟机

  • Java 虚拟机的主要功能

    运行Java程序。Java虚拟机本身也是可执行程序,不同的系统中,Java虚拟机实现方式是不一样的。但是Java虚拟机都会按照同样的方式来解析和运行Java程序。

  • JDK 组成

    Java虚拟机程序(java.exe)
    Java编译器(javac.exe)
    JDK类库

  • Java 程序的入口 main() 方法

    private static main(String[] args){}

  • 程序的创建、编译和运行过程

    .javac.exe –> 编译.java源文件 –> .class字节码文件
    .java.exe –> 运行.class字节码文件 –> 执行.class文件中的main()方法

  • Java 源文件结构

    一个Java程序可以包含多个 Java 源文件,一个源文件可以定义多个类,只有一个类是public类型Java源文件以public类型的类的名字来命名

  • 关键字

    关键字是Java语言中的一些特使字符,public、class、import、package、void等。每个关键字都有特性的含义。关键字不能用来作为标识符。

  • 标识符

    标识符是程序中包、类、变量或者方法的名字。有编码人员命名。

  • 包申明语句

    import 关键字来声明类属于特定的包中。必须书写在Java源文件第一行。

  • 包引入语句

    如果类A和类B在不同的包,并且类A需要访问类B,那么类A需要通过 import 语句引入类B所在的包

  • 方法的声明

    一个方法可以有0或n个参数,可以有0或1个返回值,关键字void表示没有返回值。关键字return用于给定返回值,并且推出当前方法。

  • 注释

    ‘/ … /‘ 单行注释
    ‘/* … */‘ 多行注释
    ‘/** … */‘ 文档注释
    注释语句用于解释程序代码的作用,编译器会忽略程序中的注释语句。

数据类型

  • 基本数据类型

    整数:byte、short、int、long
    浮点:float、double
    字符:char
    布尔:boolean

  • 引用类型

    引用类型的变量用于引用特定的对象,程序通过引用类型的变量来访问特定对象的属性和方法。

  • 基本类型和引用类型的区别

    1、基本类型代表简单的数据类型;而引用类型所引用的对象能表示任意一种复杂的数据结构。
    2、基本类型仅表示数据类型,而引用类型所引用的对象除了表示复杂数据类型,还能包括操纵这种数据类型的行为。
    3、Java虚拟机处理引用类型变量和基本类型变量的方式是不一样的;
    对于基本类型的变量,虚拟机会为其分配数据类型实际占用的内存大小,而对于引用类型变量,仅仅是一个指向内存中某个对象的指针(地址)

  • 直接数的类型

    直接数是指直接赋给变量的具体数值,共7种:
    int:123,-123
    long:234L,4562,123141
    float:7.8F,-0.254f
    double:87.904,-98.34D
    boolean:true,false
    char:’a’,’\r’,’\u0041’
    String:”HelloWorld”

变量

  • 变量的作用域

    成员变量、局部变量、方法参数

  • 实例变量和静态变量

    实例变量和静态变量属于成员变量
    静态变量:用static关键字修饰。类的静态变量在内存中仅有一份,被类的实例共享
    实例变量:类的每个实例都有对应的实例变量

  • 成员变量和局部变量同名

    在一个作用域内不允许定义同名的多个变量。在一个方法内,可以定义和成员变量同名局部变量或参数,此时成员变量被屏蔽。此时访问实例变量,可以通过this关键字访问。

  • 对象的默认引用:this

    当一个对象创建好后,虚拟机会给它分配一个引用自身的指针:this。所有对象默认的引用都叫this。

  • 变量初始化

    Java语言要求变量遵循先定义,再初始化,再使用的规则。
    1、成员变量初始化:对于类的成员变量,不管程序有没有显式的进行初始化,虚拟机会自动初始化默认值。
    数字类型默认值:0;字符类型默认值:‘\u0000’;布尔类型默认值:false;引用类型默认值:null
    2、局部变量初始化:局部变量声明后,虚拟机不会自动初始化,因此必须显式初始化才能使用。

  • new 关键字创建对象

    对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值
    如果实例变量声明时显式初始化,那么将初始化值赋给实例变量
    调用构造方法
    返回对象的引用

操作符

算术操作符、逻辑操作符、比较操作符、赋值操作符、特殊操作符

流程控制

if-else:最常用的分支语句
switch:多路分支语句
while:最常用的循环语句,先检查循环条件,再执行循环体
do-while:先执行循环体,再检查循环条件,循环体至少会执行一次
for:最常用的循环语句,先检查循环条件,再执行循环体,通常会事先确定循环次数

if-else、while、do-while和for语句的条件表达式都必须是布尔表达式,不能为数字类型;
switch表达式必须是byte、short、char或int类型,case表达式必须是常量

break:从switch语句或循环语句中退出
continue:跳过本次循环,执行下一次循环
return:退出本方法,跳到上层调用方法

继承

  • 继承的作用和语法

    继承是提高代码的复用的手段。extends关键字用于声明一个子类继承某个父类,子类会自动拥有父类的一些属性和方法。一个类只能有一个直接父类,但是可以有多个间接父类。所有的类都是继承Object类。

  • 重载方法必须满足条件

    方法名必须相同;方法的参数签名必须不相同

  • 方法覆盖必须满足条件

    子类方法的名称及参数签名必须与所覆盖方法相同
    子类方法的返回类型必须与所覆盖方法相同
    子类方法不能缩小所覆盖方法的访问级别
    子类方法不能抛出比覆盖方法更多的异常

  • super关键字的用途

    子类的某个方法覆盖了父类的一个方法,在子类范围内,父类的方法不可见;
    子类中定义了和父类同名的成员变量,子类的范围内,父类的成员变量不可见;
    在这两种情况下,在子类中可通过super关键字来访问父类的被屏蔽的成员变量和方法。

  • 多态

    1、对于一个引用类型的变量,编译器按照声明的类型处理
    2、运行时Java虚拟机按照实际引用的对象处理
    3、运行环境中,通过引用类型变量来访问所引用对象的方法和属性,Java虚拟机采用以下绑定规则:实例方法与引用变量实际引用的对象的方法绑定;静态方法与引用变量所声明的类型的方法绑定;成员变量与引用变量所声明的类型的成员变量绑定。

引用类型操作符

  • “+” 字符串连接操作

    “String” + “(String)任意类型 / 引用类型.toString()”

  • “==” 操作符

    比较两个引用类型变量是否引用同一个对象

  • equals()方法

    Object类的equals(Object obj)方法和”==“比较规则一样;当参数obj引用的对象和当前对象为同一个对象,返回true,否则返回false
    在JDK类库中,一些类覆盖了Object类的equals()方法,它们的比较规则为:两个对象的类型一致,并且内容一致,返回true。对于用户自定义的Java类,也可以覆盖Object类的equals()方法,重新定义比较规则。

  • “!=” 操作符

  • “=”操作符

  • “instanceof”

    判断一个引用类型变量所引用的对象是否为一个类的实例。

访问修饰符

访问级别 4种:

1、公开级别:public
2、受保护级别:protected,向子类及同一个包中的类公开
3、默认级别:没有访问控制修饰符,向同一个包中的类公开
4、私有毕节:private,只有类本身可以访问,不对外公开

使用访问修饰符的注意事项

1、public访问级别最高,其次protected、默认和private
2、类的成员变量和成员方法可处于4个访问级别中的一个
3、顶层类可以处于公开或默认级别,不能被protected和private修饰
4、局部变量不能被访问修饰符修饰

abstract修饰符

1、用abstract修饰的类表示抽象类,抽象类表示从具体子类中抽象出的概念,抽象类本身没有实例。
2、用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述类具有什么功能,不提供方法的具体实现。

abstract修饰符的语法规则

1、抽象类中可以没有抽象方法
2、包含了抽象方法的类必须定义为抽象类。如果子类没有实现父类中所有的抽象方法,子类也必须被定义为抽象类。
3、abstract修饰符不能与static修饰符连用
4、抽象类不能被实例化

final修饰符

1、final修饰的类不能被继承,即没有子类
2、不允许被子类的方法覆盖
3、final修饰的变量表示常量,只允许被赋一次值

final修饰符的语法基础

1、final修饰符可以修饰静态变量、实例变量和局部变量,分别表示静态常量、实例常量、局部常量
2、final变量必须显式初始化,否则编译错误。final类型的实例变量:可以在定义变量时,构造方法中进行初始化。final类型的静态变量:只能在定义变量时进行初始化。
3、final变量只能赋值一次,不允许改变final变量的值。

static修饰符

1、static修饰的成员变量被成为静态变量或类变量,可以直接通过类名来访问
2、修饰的成员方法为静态方法或类方法,可以直接通过类名访问
3、修饰的代码块为静态代码块,当Java虚拟机加载类时,会执行该代码块

static修饰符的语法基础

1、静态方法中不能使用引用当前实例的this关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法
2、在类的静态方法中,如果要访问该类的实例变量和实例方法,必须通过该类的特定实例的引用访问
3、实例方法中可以直接访问所属类的静态变量、方法和实例变量、方法
4、类被加载时,静态代码块只被执行一次。类中不同的静态代码块按照顺序依次执行

interface修饰符

接口用于声明其实现类所具备的功能,但不能提供具体的实现

1、为了确保外部程序能够访问到接口中所声明的功能,接口中成员变量和方法必须是public类型
2、接口仅声明实现类能够做什么,不指明如何做,所以接口中的方法都是抽象的
3、接口不涉及任何具体实例相关的实现细节,因此接口没有构造方法,不能被实例化,没有实例变量,接口中的变量都是静态常量

接口与抽象类的区别

1、都位于软件系统的抽象层
2、抽象类的优势在于可以部分方法提供默认的实现,避免子类重复实现它们,提高代码可重用。抽象类用来定制软件系统的扩展点。可以把抽象类看做介于“抽象”和“实现”的半成品,抽象类完成了部分实现,保留部分抽象供子类实现。

1、接口可以多实现,获得这一优势的代价是不允许为任何方法提供实现
2、可以将接口作为软件系统中最高层次的抽象类型

对象生命周期