第一章 计算机基础
1.1 计算机的结构体系
通过CPU的控制器将输入设备中数据读取到CPU中的存储器中,然后通过运算器将存储器的数据进行运算,最后再有控制器将运算器的结果显示到输出设备中。 这个结构我们称之为冯诺依曼体系结构
。
第二章 Java基础环境搭建
2.1Java技术体系
- JDK :
java development kit
java开发工具包,作为程序员需要安装的就是JDK。里面包含了JRE + 工具集 ; - JRE:
java runtime environment
java运行时环境,如果你在自己的电脑上想要运行一个java程序,必须要保证存在JRE。JRE中包含了JVM+Libs类库信息; - JVM :
java virtual machine
java虚拟机,这个东西是一个 虚拟的 计算机 。这个虚拟的计算机是用来专门处理.class(字节码文件 / bytecode文件 )文件的。它是Java跨平台的基础。
2.2 Java跨平台
程序员编写.java
程序 ,然后通过编译器将.java
编译为对应的.class
字节码文件,然后电脑上都会安装JDK
, 所以电脑上会存在JVM
,JVM获取到用户发送的字节码文件之后,开始解释执行字节码文件。执行过程就是将字节码文件
解释为对应平台上可以识别的汇编指令或者是机器码。
第三章 第一个HelloWord
3.1 下载安装编辑工具
常用工具 | 下载链接 |
---|---|
editor Plus | https://www.editplus.com/download.html |
UE | |
sublime | https://www.sublimetext.com/download |
notpad |
3.2.2 修改文件名称
public class HelloWord{
public static void main (String[]args){
System.out.println("hello Word")
}
}
3.3运行程序
打开DOS程序
编译以及运行一个Java程序
第四章 第一个程序常见的问题
4.1常见的问题归类
-
错误分类
-
- 编译期间发生的错误
-
-
- 单词拼写 (多敲)
- 中英文符号问题 (全部是英文符号)
- 当一个类被
public
修饰了之后,就是主类,主类的名称要和文件的文件名保持一致 - 大小写问题
-
-
- 运行时发生的错误
-
-
main
方法的定义不要写错了 (最常写错的就是main)
-
Tips: 如果你修改了源代码(.java)文件中的内容,一定要记得保存,并且重新编译。
第五章 Java基础知识
5.1 注释
解释说明的文字信息 用来让别人能够看懂你程序的。
// 测试使用注释
public class Annotation{
public static void main(String[] args){
/*
用来原样打印输出 hehehehehehehe
System.out.println --> 打印 将内容显示在控制台上
"" --> 原样输出
*/
System.out.println("hehehehehehehe");
}
}
注释分类 | 编写格式 | 注意事项 |
---|---|---|
单行注释 | // 注释内容 | 只能注释一行内容 |
多行注释 | /* 注释内容 */ | 可以编写多行注释信息 |
文档型注释 | /** 注释内容 */ | 不能和多行注释嵌套使用 它可以用来生成帮助文档。 |
Tips: 注释是一个源码期的行为,在编译之后注释信息就不存在了。
5.2 标识符
Java中用来给各个类、变量、常量、接口等等起名字的。 标注 识别的符号
3 个规则 (不能打破的)
- 不能以数字开头 以字母、下划线
**_**
、美元符号**$**
开头 后跟 字母、下划线**_**
、美元符号**$**
或者数字 - 严格区分大小写
- 不能是Java中的****关键词
2 个标准 (约定俗称的不建议打破)
-
见名知意 (我们希望命名的时候能够通俗易懂一点)
-
驼峰原则 (单词长、多 --> 严格区分大小写)
-
- 类: 每个单词的首字母均要大写 usercontroller --> UserController
1 个注意事项 (笔试题目)
- Java采用的字符集合是Unicode,所以我们这里所说的字母不是26个英文字母,它代表的是各个国家字符信息。 这里我们需要记住的是可以使用中文命名。
以下能够作为标识符的有(B、C、E、F)
A:class B:张三 C:hangZ D: void E: _11 F:$12
5.3 关键词
Java中比较关键单词,这些单词Java已经规定其用法,所以关键词是不能作为标识符的。
tips: 关键词和保留字其实是有一定区别的。
保留字 : Java中的保留字只有两个 goto const ,其他语言的剩余部分。
5.4 字符集合
随着时间的推演,越来越多的国家开始使用自己的字符集合,用来让计算机可以识别自己国家的字符信息,所以字符集合越来越多。
字符集合在数据传递中的作用
每一次用户在输入字符信息或者进行数据传递的时候,都需要做查表
操作,也就是我们说的字符信息需要转换为对应的数字信息被存储到计算机中,那么如果在数据传递过程中,表是不一致,就会造成乱码问题。解决方式就是保证字符集合统一。
字符集合造成的问题以及解决方案
前提,当我们自己编写的代码通过utf-8进行编码,但是CMD中的默认编码格式是GBK,所以造成在显示输出的时候会出现乱码。
第六章 变量vs常量
6.1 变量
在程序运行期间,其值可以发生改变的计量单位。
目前现阶段我们不知道数据类型的情况下,所有的变量统一类型 int
6.1.1 变量声明以及使用
变量声明的格式 variable_type name
将10这个字面值赋值给int类型的变量n存储
// 测试使用变量 声明以及使用
public class VariableInit{
public static void main(String[] args){
// 声明一个变量 type name;
int n;
// 初始化 给n这个变量赋值
n = 10; // 将10这个字面值赋值给int类型的变量n存储 背
// 使用变量
System.out.println(n); // 将n变量的中值瞜一眼
}
}
Tips: 变量声明完成之后无法直接使用,想要使用必须要保证初始化,初始化的方式就是通过=
进行赋值动作。
6.1.2 变量使用问题
// 使用变量 的注意事项
public class VariableUseing{
public static void main(String[] args){
//1: 声明一个变量 声明和初始化放在了一行语句中执行
// 每行语句的;代表该行语句结束了
int n = 10; // 将字面值10赋值给int类型的变量n存储
System.out.println(n);
//2:重新给变量进行赋值
n = 20;
System.out.println(n);
//3:重新定义一个变量 n
int n = 5;// 在main方法中不能定义同名变量
}
}
6.1.3 变量的三要素
第一要素: 变量类型
第二要素: 变量名
第三要素: 生命周期、作用范围
Tips: 关于Java语言,它是一门强类型语言(所有的变量具备类型,所有的数据具备类型)。
6.2 数据类型
Java是强类型语言,所以它对于所有数据都限定了具体的类型,一共分为以下几类:
6.2.1 数据类型分类
6.2.2 整数
I、字节型 Bety
// 测试byte数据类型
public class ByteTest{
public static void main(String[] args){
//1: 测试byte这种数据类型他能够存储的范围
// 声明一个byte类型的变量 存储数值
byte b = 100;
// 打印输出
System.out.println(b);
// 修改b的值的
/*
ByteTest.java:14: 错误: 不兼容的类型:
从int转换到byte可能会有损失
b = 128;
*/
b = 128;
System.out.println(b);
}
}
数据类型 | 占用空间 | 表数范围 |
---|---|---|
字节型 byte | 1个字节 1B = 8b | [-128,127] |
Tips: byte数据类型能够标识的数据的范围有限,大家在使用的是有一定要注意存储数据的值不要超过byte范围。
II、短整型 Short
// 测试short数据类型
public class ShortTest{
public static void main(String[] args){
// 声明一个short类型的变量 存储数值
short b = 128;
// 打印输出
System.out.println(b);
// 修改short的值
/*
ShortTest.java:12: 错误: 不兼容的类型:
从int转换到short可能会有损失
b = -32769;
^
1 个错误
*/
b = -32769;
System.out.println(b);
}
}
数据类型 | 占用空间 | 表数范围 |
---|---|---|
短整型 short | 2个字节 2B = 16b | [-32768,32767] |
Tips: JDK11 它允许直接通过java命令执行一个.java文件,而且不会生成对应的字节码文件。但是有个前提(java中的代码是简单代码)。
> java .java文件 ## 就可以直接运行该程序了。
III、整型 Int
// 测试int数据类型
public class IntTest{
public static void main(String[] args){
// 声明一个int类型的变量 存储数值
int b = 32768;
// 打印输出
System.out.println(b);
//修改变量b的值
/*
IntTest.java:12: 错误: 整数太大
b = 2147483648;
^
1 个错误
*/
b = 2147483648;
System.out.println(b);
}
}
数据类型 | 占用空间 | 表数范围 |
---|---|---|
整型 int | 4个字节 4B = 32b | ±21亿左右 |
Tips: 一般情况下在使用整数的时候优先使用int。
IV、长整型 Long
// 测试long数据类型
public class LongTest{
public static void main(String[] args){
// 声明一个long类型的变量 存储数值
long b = 2147483647;
// 打印输出
System.out.println(b);
// 重新给b赋值
/*
LongTest.java:12: 错误: 整数太大
b = 2147483648;
^
1 个错误
*/
b = 2147483648L;
System.out.println(b);
}
}
数据类型 | 占用空间 | 表数范围 |
---|---|---|
长整型 long | 8个字节 8B = 64b | 灰常灰常大 [ −2的63,2的63−1] |
Tips:
1: 在java中所有整数的字面值(1,2,123) 默认类型是int;
2: 当我们将一个int的字面整数赋值给byte、short类型的变量的时候,如果没有超过byte、short的范围可以正常赋值成功,但是如果超过了那么此时会报错,因为=赋值符号右侧是一个大类型的值,左侧是一个小类型,放不下,所以报错信息 不兼容的类型: 从XX类型转换到XX类型可能会有损失。
3:当我们要赋值一个超过了int范围的字面值给long类型的变量时候,需要给字面值后面加l或者是L(推荐);
V、整数的赋值方式
// 测试整数的赋值方式
public class InitValue{
public static void main(String[] args){
//1: 正常赋值 10进制数
int num = 90;
System.out.println(num);
//2: 可以通过二进制进行赋值 JKD7之后的
num = 0B11011; // 以0B 0b 开头
System.out.println(num);
//3: 可以通过8进制进行赋值
num = 043; //以 0开头
System.out.println(num);
//4: 可以通过16进制进行赋值
//A:10 B:11 C:12 D:13 E:14 F:15
num = 0x2CF; //以 0x oX开头
System.out.println(num);
// 为了能好看一点赋值时 字面值中可以通过_分割
// JDK7之后
num = 123_456_789;
System.out.println(num);
}
}
VI、 整数的进制转换
VII、整数的储存方式
- 无符号整数按其二进制的形式直接存储
- 有符号整数按其补码的形式存储
6.2.3 小数
扩展知识:
在计算机中,小数的存储有两种方式,一种称之为定点数,一种称之为浮点数。
定点式: 小数点在存储的时候固定位置 更加精准的 浪费内存
浮点数: 小数点在存储的时候不固定 精准度差一点 但是节省内存
I、双精度 double
// 测试double类型的变量
public class DoubleTest{
public static void main(String[] args){
//1: 声明一个double类型的小数
double d = 3.14;
System.out.println(d);
//2: 测试小数的问题 不要使用小数进行四则运算
System.out.println((0.6*10-0.5*10)/10); //0.09999999999999998
}
}
数据类型 | 占用空间 | 精度范围 |
---|---|---|
双精度 double | 8个字节 | 14位左右 |
Tips:
1: 进行运算的过程中,小数有几个特殊的值:Infinity -Infinity NaN
2:NaN是一个状态信息,0是不可以作为除数的 所以下面式子是不合法的,但是在计算机中0是无法通过小数进行精确表示的 所以 理论上而言这个0.0/0.0合理的 通过NaN描述了这种合法但是不合理的状态 NaN是一个数字 not a number
3:我们在进行小数运算的时候一定要特别注意,因为计算机描述小数时不精准的,所以我们采用的解决方案是:
- 扩大和缩小倍数
- 使用BigDecimal完成小数运算(定点数)
4:如果遇到了精确度要求比较高的需求,解决方案,要么使用BigDecimal还有一种就是降低单位。
II、单精度 float
数据类型 | 占用空间 | 精度范围 |
---|---|---|
单精度 | 4个字节 | 7位左右 |
在Java中所有的小数字面值都是double类型,当把一个小数赋值给float类型变量的时候,需要在给这个字面值后面加f 或者是F。
III、小数的存储方式
小数在内存中是以浮点数的形式存储的。浮点数并不是一种数值分类,它和整数、小数、实数等不是一个层面的概念。浮点数是数字(或者说数值)在内存中的一种存储格式,它和定点数是相对的。
IV、小数的转换进制
6.2.4 boolean 逻辑性 布尔
数据类型 | 占用空间 | 取值 |
---|---|---|
boolean 逻辑性 | 1个字节 实际只需要1b | true(1) false(0) |
在Java中所有的小数字面值都是double类型,当把一个小数赋值给float类型变量的时候,需要在给这个字面值后面加f 或者是F。
补充知识:
在dos命令中,当前所在位置和当前要执行的类不再同一路径下,通过java -cp指定类所在的路径。具体做法如下:
编译的.class文件在c:\Users\laoxue目录下
c:\Users> java -cp laoxue HelloWorld
ps: 会在c:\Users\laoxue这个路径下去执行HelloWorld这个类
6.2.5 字符型
数据类型 | 占用空间 | 取值 |
---|---|---|
char 字符型 | 2个字节 | 1、单引号引起的单个字符2、通过一个正整数赋值 [0,65535] 3、通过\u开头后一个4位的16进制数 Unicode代码点 |
6.2.6 类型转换
在任何编程语言中,不同的数据类型之间是可以互相转换的。 不会管基本数据类型的类型转换,我们用的最多的是引用类型的类型转换。
-
自动类型转换
小变大 自动转
a:在四则运算的过程中,类型会自动提升。
b:如果字面值在做四则运算,那么编译阶段会确定这个字面值以及类型 (常量折叠),但是如果存在变量的做四则运算的话,那么只能确定类型,不能确定值。
-
强制类型转换
大变小 需强转
小类型 = (小类型)大类型;
强转过程中,会使得值发生改变,所以应该小心使用。
6.3 常量
在程序运行期间,其值不可以发生改变的计量单位。
通过final修饰的变量称之为常量,常量在整个程序的值是不可以修改的。
分类:
自定义常量
字面值常量:
整数常量: -5, 0,100
小数常量: -3.3, 0.14
布尔常量:ture,false
字符常量:’ ’ , ’ a ’
空常量:null
字符串常量: " " " abc " “中国”
6.4 关于DOS命令
学习linux之前稍微看一下这部分内容
6.4.1 操作系统的分类
6.4.2 DOS系统
- 内部命令
安装完操作系统之后,操作系统会将自己的一些命令内置到当前的DOS系统中。
- 外部命令
- 安装其他程序之后,将程序本身的命令注册到当前的计算机中,此时该程序就存在一个命令与之对应。 这些命令都称之为外部命令。
命令寻址过程
- 批处理文件
脚本文件 (.bat文件)
第七章 运算符
什么是运算符 ?
可以运算的符号。常见的比如算数运算符、赋值运算符等等。
7.1运算符的基本概念
7.2 赋值运算符
“=” 一个等号是赋值
int num = 10; // 唯一注意的是:赋值运算符是自右向左进行运算的 优先级最低 括号优先级最高
7.3 算术运算符
“+”,“-”,“*”,“/”,“%”,“++”,“–”
+号: 链接符号,当加号左右两边存在字符串的时候,此时加号表达的是连接符号的作用,会将左右两边的操作数组成一个新的字符串,继续运算。
++和–:
1>、如果它们是单独一条语句的时候,前加 前减和后加 后减效果是一样的,都是自增1或者是自减1;
2>、如果不是单独一条语句:
a: 前加、前减 先自增、自减然后运算
b: 后加、后减 先运算,然后自增、自减
7.4扩展运算符
是算术运算符+赋值运算符 或者是 位运算符+赋值运算符
/**
* 测试扩展运算符
*/
public class OperatorTest02 {
public static void main(String[] args) {
//1: 声明两个变量 计算两个变量之和
int zhangScore = 10;
int liScore = 20;
int sum = 0;
sum += zhangScore; // <=> sum = sum+zhangScore;
sum = sum+liScore;
System.out.println(sum);
// 声明一个int类型的变量
int n = 10;
byte m = 0;
m += n;
System.out.println(m);
}
}
优势:
1>、编译效率高
2>、提升程序开发效率
3>、自动强制类型转换
劣势:
1>、阅读体验差
7.5 关系运算符
有 “ > , <, >= ,<= ,==, != ”
1:关系运算符得到的结果是boolean类型的值;
2:> < >= <= 只能比较基本数据类型中除了boolean以外的类型
3:== != 可以比较基本数据类型和引用类型
4: instanceof 只能比较引用类型 判定某个值是否从属于某个引用类型
7.6 逻辑运算符
“ &, | ,^ , 即时逻辑运算符 也是位运算符”
1: &和&& |和||的区别和联系? 逻辑&:
左右变量操作的都为true,其结果为true,其余都是fasle。所以&&发现第一个操作数是fasle的情况下,后面一个操作数就不计算了,直接返回false。
逻辑|:
左右变量操作数有一个是true,其结果为true,其余都是fasle。所以||发现第一个操作数是true的情况下,后面一个操作数就不计算了,直接返回true。
7.7条件运算符
唯一的一个三目运算符,存在三个操作数。
格式:表达式?表达式2:表达式3
计算过程:计算表达式1的值,如果表达式1的值是ture,则整个条件运算符的结果是表达式2的值,反之则是表达式3的值。