Java 语言基础知识

Java 语言基础知识

Java 基础是学习 Java EE/大数据/Android 开发的基石

计算机软件

软件即一系列的数据和指令的集合(固定交流的便捷方式)软件分为系统软件和应用软件

  1. 操作系统(系统软件)(CLI命令行界面(使用命令行操作) GUI图形化界面(不需要管理底层 直接图形化操作))
  2. 应用软件(存于系统软件之上)

常用的 Dos 命令

  1. dir(Directory) ---> 显示文件夹目录
  2. md(Make directory) ---> 创建文件夹
  3. rd(Remove directory) ---> 删除文件夹(只能删除空文件夹)
  4. echo ---> 创建文件 ---> eg: echo demo>demo.text (创建文件demo.text 文件内容是 demo)
  5. cd\ ---> 返回磁盘根目录
  6. del ---> 删除文件
  7. (del + rd) ---> 删除文件夹(首先使用 del folder ---> 删除文件夹下搜友文件 ---> rd folder(删除空文件夹))

Java 语言的特点

  1. 面向对象
    • 两个基本概念:类 对象
    • 三大特性:继承 封装 多态
  2. 健壮性
    • 吸收 C/C++ 语言的优点 舍弃影响健壮性的部分(指针 内存的申请与释放等) 提供了相对安全的管理和访问机制
  3. 跨平台性
    • 根据 Java 虚拟机(JVM ---> JVM 是一个虚拟的计算机 具有指令集并能使用不同的存储区域 负责执行指令 管理数据/内存/寄存器 Java 程序在 JVM 上运行)
    • (Write once,Run anywhere)

Java 语言两种核心机制

  1. Java 虚拟机(JVM)(JVM 是一个虚拟的计算机 具有指令集并使用不同的存储区域 负责执行指令 管理数据/内存/寄存器)
  2. Java 垃圾回收机制(GC)(垃圾回收在 Java 程序运行中自动进行 程序员无法精确的控制和干预)

注: Java 程序有 GC 还会出现内存泄漏和溢出吗?
会!和自己写的程序相关 有的程序会让GC机制无法识别是否进行回收

Java 的开发工具包和运行环境

Java 开发工具包(JDK)

包含 Java 的开发工具(编译工具(javac.exe) 打包工具(jar.exe)... .. .) 也包含了 JRE 所以安装了 JDK 就不用单独安装 JRE

Java 运行环境(JRE)

包含 Java 虚拟机(JVM) Java 核心类库

Java 语言注释(Comment)

Java 规范三种注释

  1. 单行注释
  2. 多行注释
  3. 文档注释

注释的作用

  1. 对所写的程序进行解释说明 增强解读性
  2. 调试代码(程序出现错误 对某可能出现错误的地方进行注释 然后调试程序)

注释的特点

  1. 单行注释和多行注释 注释内容不参与编译(编译生成的字节码文件中不包含注释后的信息)

文档注释的使用

  1. 注释的内容可被 Java 提供的工具 javadoc 解析 生成网页文件形式体现该程序的“说明文档” javadoc 只能提取文档注释

第一个 Java 程序

public class Demo {
	// main ---> 程序运行的入口 main 方法的格式是固定的
	// args ---> arguments:参数
	public static void main(String[] args) {
		System.out.println("Demo... .. .");
	}
}

第一个 Java 程序的解释说明

  1. Java 程序 编写/编译/运行的过程
    1. 编写:我们将编写的 Java 代码保存在以“.java”为结尾的源文件中
    2. 编译:使用 javac.exe 命令编译".java"源文件 获得“.class”字节码文件
    3. 运行:使用 java.exe 命令解释运行字节码文件
  2. 单个源文件可以声明多个类(并列关系 编译后形成多个字节码文件/取决声明类的数量)但是只能有一个类声明为 public (和文件同名的类)
  3. 程序的入口是“main”方法 其格式是固定的
  4. println(); 输出数据然后换行/print();只输出数据不换行
  5. 每行执行语句以“;”结尾

Java 语言关键字

被 Java 语言赋予特殊含义的字符序列(所有字母小写)
Java 语言保留字:未赋予特殊含义但被保留后用(goto const)

Java 语言标识符

Java 语言对各种变量 方法 类等(凡是自己可以起名地方... .. .)要素命名时使用的字符序列

Java 标识符命名规则(相当于法律规范)

  1. 26个英文 10个数字(0~9) "_" "$"
  2. 数字不能开头使用
  3. 不能使用关键字/保留字 但可以包含
  4. 空格不能使用

Java 标识符命名规范(相当于社会道德/遵守则有利读写代码)

  1. 包名:小写格式
  2. 类/接口名:大驼峰格式
  3. 方法/变量名:小驼峰格式
  4. 常量:大写格式

注:Java 采用 Unicode 字符集 可以识别中文但是不建议使用中文命名... .. .

变量

程序中最基本的存储单元 变量的访问是使用变量名访问区域中变量

1. 变量的使用方法

数据类型 变量名 = 存储值

2. 变量的说明

  1. 变量必须先定义后使用 定义变量时需先初始化变量
  2. 变量定义域于作用域中 作用域 = 有效域(同作用域不能出现同名变量)

3. 变量的数据类型

  1. 基本数据类型(Primitive type)
    • 整型(byte short int long)(声明 long 型 必须以 l/L结尾)(开发中常用 int 型)
    • 浮点型(float double)
    • 字符型(char)
    • 布尔型(boolean)
  2. 引用数据类型(Reference type)
    • 类(class)/String 属于 class 类型
    • 接口型(interface)

4. 基本数据类型的存储数据范围

  1. bit 表示0/1 | 1byte = 8bit 所以 1byte 存储范围(2^8) ---> (-128~127)
  2. short(2byte)
  3. int(4byte)/(范围约21个亿)
  4. long(8byte)

5. 浮点类型的存储数据范围(浮点型:表示带小数点的数值)

  1. float(4byte)
    • 因为采用科学计数方法 所以表达的范围相比 long 广阔
    • 尾数可以精确到7位有效数字 很多情况下精度很难满足
    • 定义 float 类型 变量需要 f/F 结尾
  2. double(8byte) 精度是 float 的两倍 通常定义浮点型变量采用此种类型

6. char 类型的存储数据范围(2byte)

  1. 注:
    • 转义字符 ---> 换行"\n" 制表"\t" 添加两个正斜杠符号"(\)"表示不转义(若是需要 println 中符号 (" ) 不表示结束 可以使用 "( \ + ") ")... .. .
    • 直接使用 Unicode 值来表示字符型常量
    • 字符型可以直接赋值数字 会直接转换成对应的 ASCII 码
    • 字符强转换成 int 类型 会自动转换为所对应的 ASCII 码
char c = 97;// 开发中非常少见
System.out.println(c);// a

char c = '5';
// int i = (int)c;
System.out.println(i);// 53
// 字符强转换成 int 类型 会自动转换为所对应的 ASCII 码

7. boolean 类型

只有两个值 只能取其之一 true/false

8. 变量在类中的位置分类

  1. 成员变量
  2. 全局变量

9. 字符集简介

所书所有代码都在底层对应二进制方式 所以具有对应关系 这种对应关系就是字符集 在计算机内部(所有数据使用二进制表示 每个二进制位(bit)具有0/1 两种状态 因此8个二进制位
可以组合出256(2^8)种状态 8bit = 1byte 一个字节可以用来表示256中不同状态 每个状态对应一种符号 也就是256种状态 从00000000~11111111)

  1. ASCII 码(美国-128个字符编码):26个英文字母 + 数字 | 0~9 + 符号 | a -> 97 大小写字母之间相差空格(32)
  2. Unicode:世界上所有符号都在其中 每个符号对应独属编码 使用 Unicode 没有乱码问题(但是 Unicode 只规定了符号的二进制代码 没有规定二进制代码如何存储 无法区分 Unicode and ASCII 码 ---> 计算机无法区分三个字节表示一个符号还是三个符号 在 ASCII 码中英文字母只需一个字节 若 Unicode规定 每三个字节表示一个符号 表示英文 将会造成存储空间极大浪费问题)
  3. UTF-8:互联网上使用范围最广的一种 Unicode 的实现方式 详解:
    • UTF-8 是一种变长的编码方式 它可以使用1~6个字节表示一个符号 根据符号不同而变换字节长度
    • 对于单字节:该字节最高位是0 其余7位用来对应字符进行编码(等同于 ASCII 码)
    • 对于对字节:如果编码包含 n 个字节 那么第一个字节的前 n 位是1 第一个字节的(n+1)位为0 该字节剩余位用来对应字符编码 在第一个字节之后所有的字节都是最高两位为"10" 其余6位用来对字符进行编码

注:

  • 乱码 ---> 世界存在多种编码方式 同一个二进制数字可以被解释成不同符号 因此想要打开一个文件 需要知道其编码方式 使用编码方式不对就会造成乱码
  • Windows 命令窗口默认使用 GBK 解析
  • 科学计数法:科学记数法是一种记数的方法 把一个数表示成 a 与10的 n 次幂相乘的形式
  • 浮点型中所述有效数字:从小数点后算起

基本数据类型之间的转换(不包含 boolean 类型)

1. 自动类型提升

byte/char/short ---> int ---> long ---> float ---> double

  • 当容量小的数据类型变量和容量大的数据类型变量做运算 结果自动提升为容量大的数据类型(容量大小指:表示数的容量范围的大小 而不是占用内存的大小)
  • 重点:当 byte/char/short 三种类型的变量做运算时 结果为 int 类型(byte/char/short 自身类型做运算时 结果也是 int 类型)

2. 强制类型提升

自动提升类型运算的逆运算

  1. 需要使用强转符"()"
  2. 注意点:强制类型转换可能会损失精度

3. String 类型(引用数据类型)(开发常用)

  1. String 属于引用数据类型(String 类型可以存放空串 char 类型不行)
  2. String 可以和8种数据类型做运算且只能起连接作用(使用符号"+" 前后有一个 String 类型 都是起连接作用 若前前后不是 String 类型 起算术作用) 运算的结果仍然是 String类型
public class VariableTest1 {
	public static void main(String[] args) {
		// 自动类型转换
		// byte bTest = 10;
		// char cTest = 'a';
		// short sTest = 11;

		// char resultTestOne = bTest + cTest;// 编译不通过 错误: 不兼容的类型: 从int转换到char可能会有损失
		// short resultTestTwo = bTest + sTest;// 同上
		// byte resultByteTest = bTest + bTest;// 同上
		// char resultCharTest = cTest + cTest;// 同上
		// short resultShortTest = sTest = sTest;// 同上

		// 强制类型转换
		// double bTest = 10.2;
		// int iTest = (int)bTest;

		// int i = 128;
		// byte b = (byte)i;
		// System.out.println(b);

		// // 类型转换注意的两个编码情况
		// // 1. 编码情况
		// long l = 123456;
		// System.out.println(l);
		// // 因为给 i 赋值没有添加 l/L 所以 i 自动转换为 int 类型 没有报错的原因是 没有超过 int 类型的数据容量范围(没有添加 L 是使用四个字节存储 添加 L 是使用
		// // 八个字节存储)
		// // float 类型必须添加后缀(因为浮点型默认是 double 类型 所以会造成大容量向小容量转换 会发生编译错误)
		
		// // 2. 编译情况
		// // 整型常量默认是 int 类型
		// byte b = 1;
		// byte b1 = b + 1;// 编译失败
	}
}
posted @ 2021-03-26 15:28  weinen  阅读(237)  评论(0)    收藏  举报