Java入门知识
图
Java是一门面向对象的编程语言,Java语言具有功能强大和简单易用两个特征,Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程

JDK安装

JDK安装版本回退问题:JDK8升级到JDK17后,回退JDK8更改环境变量无效,是由于JDK11及以上的安装包会将相关可执行文件复制到C:\Program Files (x86)\Common Files\Oracle\Java\javapath目录,并自动添加环境变量,且该配置优先级较高,需要删除自行配置

C:\Program Files\Common Files\Oracle\Java\javapath
C:\Program Files (x86)\Common Files\Oracle\Java\javapath

跨平台机制

图

编译器将源文件编译成字节码(.class)文件,然后由JVM将字节码文件加载并翻译成特定平台下的机器码,最后运行,对于不同的运行平台,需要安装不同版本的JVM,这就是Java虚拟机机制,该机制屏蔽了不同运行平台的底层差异,实现了跨平台性

由此可以看出,Java语言是混合型语言,因为即有编译过程也有解释过程(半编译半解释)

JVM/JRE/JDK

  • JVM:Java Virtual Machine
    • Java虚拟机,加载.class文件并运行.class文件
  • JRE:Java Runtime Environment
    • Java运行环境,除了包含JVM以外还包含了运行Java程序所必须的环境
    • JRE=JVM+系统类库
  • JDK:Java Development Kit
    • Java开发工具包,除了包含JRE以外还包含了开发Java程序所必须的环境
    • JDK=JRE+编译、运行等工具命令

注释

单行注释://
多行注释:/*  */
文档注释:/**  */

标识符

规定

  • 只能包含字母、数字、_和$符,且不能以数字开头
  • 严格区分大小写,且长度无限制
  • 不能使用关键字
  • 可以中文命名,但不建议

规范

  • 包名必须全小写
  • 类名每个单词的首字母大写,帕斯卡命名
  • 方法和变量第一个单词小写,从第二个单词开始首字母大写
  • 常量名全大写,用_分割单词

变量

变量的本质:变量的本质就是代表一个“可操作的存储空间”,空间位置是确定的,但是里面放置什么不确定,我们可以通过变量名来访问对应的存储空间,从而操作这个存储空间的值。Java是一种强类型语言,每个变量都必须声明其数据类型,变量的数据类型决定了变量占据存储空间的大小

类型 声明位置 从属于 生命周期
局部变量 方法或语句块内部 方法/语句块 从声明位置开始,直到语句块执行完毕,局部变量消失
成员变量 实例变量 类内部,方法外部 对象 对象创建,成员变量也跟着创建,对象消失,成员变量也跟着消失
静态变量 类内部,static修饰 类被加载,静态变量就有效,类被卸载,静态变量消失

数据类型

                                    整数类型(byte、short、int、long)
                                  /
                            数值型
                          /       \
                         /          浮点类型(float、double)
                        /          
            基本数据类型 -- 字符类型(char)
          /             \
         /               \
        /                 \
数据类型                    布尔型(boolean)
        \
         \                类(class)
          \             /
            引用数据类型 -- 接口(interface)
                        \ 
                          数组

图

  • int整型

    • 整数直接量默认为int型,但不能超出范围,超范围则编译错误
    • 两个整数相除,结果还是整数,小数位无条件舍弃(不会四舍五入)
    • 整数运算时若超出范围则发生溢出,溢出是需要避免的
  • long整型

    • 长整型直接量需在数字后加L或l
    • 运算时若有可能溢出,建议在第1个数字加L
    • System.currentTimeMillis()用于获取自1970.1.1零时到此时此刻的毫秒数(时间戳)
  • double浮点型

    • 浮点数直接量默认为double型,表示float需在数字后加F或f
    • double或float型数据在参与运算时,有可能发生舍入误差
  • 浮点数

    • 浮点数存在舍入误差,数字不能精确表示,如果需要精确计算,使用“BigDecimal”类。
  • 字符类型

    • 注意字符用单引号,字符串用双引号

自动类型转换

图

实现表示无数据丢失

自动的型转换,而虚线表示在转换时可能有精度类损失的。在算术运算中,数据会自动向上型提升,注意byte、short、char会先转为int类型再进行运算

运算符

运算符

图

逻辑运算符

图

位运算符

图

左移(<<):在内存中将该变量的二进制数直接向左移动,超出内存的丢弃,右边补0,所以结果将乘2的n次幂

带符号右移(>>):在内存中将该变量的二进制数直接向右移动,超出部分丢弃,左边根据最高位(最边左)是什么补什么,所以结果将除2的n次幂

无符号右移(>>>):与带符号右移的区别是左边始终补0,负数的无符号右移慎用

数组创建

int[] array3 = new int[](1,2,3); // 在声明数组的同时进行初始化
int[] array1 = {1,2,3}; // 简化写法
int[] array2 = new int[3]; // 动态初始化,只指定数组的长度

重载

在同一个类中,方法名相同参数不同,构成重载,与返回值无关。其中参数不同包含类型、个数、顺序不同

封装

Java语言的三大特性即是:封装、继承、多态

修饰符 同一个类 同一个包 子类 所有类
private
default
protected
public

封装的优点:

  • 提高代码的安全性
  • 提高代码的复用性

高内聚:封装细节,便于修改内部代码,提高可维护性
低耦合:简化外部调用,便于调用者使用,便于扩展和协作

继承

继承是一个对象获取父对象的所有属性和行为的机制。关键字为:extends,继承的优势:

  • 提高代码的复用性(相同属性、方法都在父类中定义)
  • 子类可在父类的基础上增加其他功能,使子类更强大

子类可继承内容:

修饰符 构造方法 成员变量 成员方法
public x
private x x

重点:Java只支持单继承,不支持多继承,可以多层继承。每个类都直接或间接的继承于Object

多态

多态是同一个行为具有多个不同表现形式或形态的能力。实现多态有3个必要条件:

  • 继承
  • 重写
  • 向上转型

多态的优势和弊端:

  • 优势:方法中使用父类类型作为参数,可以接受所有子类对象
  • 弊端:不能使用子类的特有功能(如需使用配合instanceof进行类型强转)

包装类

byte     -->  Byte
short    -->  Short
char     -->  Character
int      -->  Integer        -128~127已创建
long     -->  Long
float    -->  Float
double   -->  Double
boolean  -->  Boolean