文章目录
计算机硬件基础
冯诺依曼
中央处理器(CPU)
由控制单元和算数逻辑单元组成
- 控制单元:控制和协调其他组件的动作;
- 算数逻辑单元:完成数值运算和逻辑运算;
时钟
每台计算机内部都有一个内部时钟,以固定速度发射电子脉冲。时钟速度越快,在给定时间段内执行的指令就越多。计量单位是赫兹(Hz),1Hz相当于每秒一个脉冲。随着CPU速度不断提高,目前以千兆赫兹(GHz)来表示。
IT定律
- 摩尔定律:等价买到的电脑性能,每隔18-24个月会翻一倍以上。
- 安迪-比尔定律:”比尔拿走了安迪的东西“,软件厂商吃掉硬件提升带来的好处。
- 反摩尔定律:IT公司今天和18个月之前卖掉同样多的相同产品,那他的营业额会降一半。
存储设备
- 磁盘驱动器。硬盘用以永久的保存数据和程序。
- 光盘驱动器。CD和DVD。
- USB闪存驱动器。用于存储和传输数据。
内存
计算机中最小的存储单位,比特(bit),值为0/1。
计算机中最基本的存储单元,字节(byte),一个字节由八个比特构成。
内存采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。
RAM断电后数据不在保存,可读也可写;ROM存储计算机BIOS等基本程序,只可读不可写;
内存一个程序和他的数据在被CPU执行前必须移动到计算机的内存中。
操作系统
- 控制和监视系统的活动;
- 分配和调配系统资源;
- 调度操作;
万维网
常简称Web,分为Web客户端和Web服务器程序。让Web客户端访问Web服务器上的页面。每个页面由“统一资源标识符(URI)”标识。通过超文本传输协议(HTTP)传送给用户。
互联网>英特网>万维网
Java(sun公司)
软件
软件是一系列按照特定顺序组织的计算机数据和指令的集合。分为系统软件和应用软件。
人机交互方式分为图形化界面(GUI)和命令行方式(CLI)
计算机语言
第一代语言:机器语言。二进制代码形式存在。
第二代语言:汇编语言。使用助记符表示机器指令。
第三代语言:高级语言。Java、Python…
Java语言特点
特点一:面向对象
- 封装、继承、多态
特点二:健壮性(例如,垃圾回收机制)
特点三:跨平台性(JVM)
核心机制
- Java虚拟机(JVM);
- 垃圾回收机制(GC);
JDK、JRE、JVM
JDK>JRE>JVM
- JDK:Java开发工具包。包含Java开发工具,例如编译工具、打包工具等,此外也包括了JRE。
- JRE:Java运行环境。包括JVM和核心类库。
标识符
凡是自己可以取名字的地方都叫做标识符。
命名规则
- 不能以数字开头;
- 不能使用关键字和保留字;
- 区分大小写;
- 不能包含空格;
命名规范
- 包名:所有字母小写;
- 类名、接口名:多单词首字母分别大写(驼峰);
- 变量名、方法名:第一个单词首字母小写,之后的单词首字母大写;
- 常量:所有字母大写,且用下划线分割;
变量
变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。
变量用于在内存中保存数据。
类型
-
基本数据类型
- 数值型
- 整数类型:int、short、long、byte
- 浮点类型:float、double
- 字符型
- 布尔型
- 数值型
-
引用数据类
- 类:class
- 接口:interface
- 数组:[]
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节 = 8bit(位) | -128-127 |
short | 2字节 | -215-215-1 |
int | 4字节 | -231-231-1 |
long | 8字节 | -263-263-1 |
类型 | 占用才存储空间 | 表数范围 |
---|---|---|
单精度float | 4字节 | 7位有效数组 |
双精度double | 8字节 | 15位有效数字 |
(通常使用double。定义float变量时,变量要以”f“或”F“结尾)
字符型char:(1字符=2字节)定义char型变量通常使用一对单引号。
注意:
char e1 = 97; //此时97为ASCII码为97对应的字符
System.out.println(e1);//输出‘a’
char e2 = '5';
int e3= e2;//自动类型转换为ASCII码是‘5’对应的整型数字
System.out.println(e3);//输出53
布尔型boolean:true或false,常用在循环语句。
类型转换
1.自动类型提升:(小到大)
byte、char、short->int->long->float->double
当容量小的与容量大的变量做运算时,结果自动提升为容量大的数据类型。特别地,byte、char、short三种做运算时,结果为int。
2.强制类型转换:(大到小)
需要使用强转符:()。可能导致精度损失。
整型常量默认为int型,浮点型常量默认为double型。
按位置分类
-
成员变量
- 实例变量(不以static修饰)
- 类变量(以static修饰)
-
局部变量
-
形参(方法、构造函数中定义的变量)
-
方法局部变量(在方法内定义)
-
代码块局部变量(在代码块内定义)
-
字符串类型
String类型,不是基本数据类型,属于引用数据类型,使用双引号进行定义(不能直接赋值数字)。
String类型可以和8种基本数据类型做运算,且运算只能是连接运算,结果也是String类型。
例:String转int
String hello = "123";
int a = Integer.parseInt(hello);
进制
二进制:以0b或0B开头;
八进制:以0开头;
十六进制:以0x或0X开头,A-F不区分大小写;
互相转换:
Integer.toBinaryString();
Integer.toOctalString();
Integer.toHexString();
Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当long型时,第64位是符号位。
二进制整数有三种形式:原码、反码、补码。
- 正数的原码、反码和补码相同
- 负数反码为原码除符号位依次取反,补码为反码加一
计算机底层都以补码的方式来存储数据。
运算符
算数运算符
+、-、*、/、%、++、–、+(连接)
负数取余:
int m1 = -12;
int m2 = -5;
System.out.println(m1 % m2);//输出-2
自增自减不会改变数据类型。
byte b2 = 127;
b2++;
System.out.println(b2);//结果为10000000(-128的补码),输出-128
赋值运算符
= 、+=、-+、*=、/=、%=
当”=“两侧数据类型不一致时,可以使用自动类型转换或强制类型转换进行处理,支持连续赋值。
”+=、-+、*=、/=、%=“不会改变变量本身的数据类型。
short s2 = 10;
//s2 = s2 + 5; //编译失败
s2 += 5;
比较运算符
==、!=、>=、<=、>、>、instanceof
逻辑运算符
&(逻辑与)、&&(短路与)、|、||、!、^(异或)
操作的数据类型都是布尔类型
逻辑与&和短路与&&的异同(|与||类似):
相同点:1.运算结果相同;2.符号左边是true时,都会执行右边的语句。
不同点:1.符号左边为false时,&仍执行右边语句,但&&不执行右边语句。
位运算符
<<、>>、>>>、&、|、^、~
注意:
- 位运算符<<:空位补0,被移除的高位丢弃。
- 位运算符>>:最高位为0,则补0;最高位为1,则补1。
- 位运算符>>>:无论最高位是0或1,都补0。
- ^异或、~逐位取反。
- 2*8 等价于 2<<3,后者运算效率更高。
- 无<<<;数据类型为布尔类型时,&和|为逻辑运算符,数字类型时为位运算符。
骚操作:
交换两个变量的值,例如交换m和n:
m = m ^ n;
n = n ^ m;
m = m ^ n;
三元运算符
(条件表达式)?A:B; 其中A、B需为相同数据类型。
凡是用三元运算符的地方,都可以改写为if-else,反之不成立,三元运算符的执行效率高于if-else。
字符串转字符数组:
char[] str = s.toCharArray();
字符数组转字符串:
String.valueOf(str)
集合初始化:
HashSet<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
List<Character> vowels = Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U');
注意:这种方式添加的是不可变的
List<Character> vowels = new ArrayList<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
上述方式的基础上使用 ArrayList 再包装一下,即转变为可变集合。