计算机基础知识
1.计算机采用二进制表示,只包含0、1两个数,逢二进一,每一个0或1,叫做一个bit(比特,位)
2.字节——计算机中最小的存储字节
位(bit):一个数字0或者一个数字1,代表一位。
字节(Byte):每逢8位是一个字节,数据存储的最小单位。
1Byte=8 bit
1 KB=1024 Byte
1 MB=1024 KB
1 GB=1024 MB
1 TB=1024 PB
3.命令提示符——cmd
启动: win+R
切换盘符: 盘符名称:
进入文件夹: cd 文件夹名称
进入多级文件夹: cd 文件夹1\文件夹2\文件夹3
返回上一级: cd ..
直接回根路径: cd \
查看当前文件夹: dir
清屏: cls
退出: exit
Java基础知识
1.javac.exe:编译器
java.exe: 解释器
→编译器的两点优化:
①对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。
a.如果没有超过左侧的范围,编译器补上强转。
b.如果右侧超过了左侧范围,那么直接编译器报错。
②在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果,“编译器的常量优化”,一旦表达式当中有变量参与,那么就不能进行这种优化了。
2.注释: ① //单行注释
②/* 多行注释 */
3.关键字特点:①完全小写的字母
②在增强版的记事本中有特殊颜色
4.标识符:指在程序中,我们自己定义的内容,如类的名字、方法的名字和变量的名字等等,都是标识符。
①命名规则(硬性要求):
→标识符可以包括英文字母26个(区分大小写)、0-9数字、$(美元符号)和_(下划线)
→标识符不能以数字开头
→标识符不能是关键字
②命名规范(软性建议):
→类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)
→变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)
→方法名规范:同变量名
//第一行的第三个单词必须和所在的文件名称完全一样,大小写也要一样
//public class后面代表定义一个类的名称,类是Java当中所有源代码的基本组织单位
public class HelloWorld {
//第二行的内容是万年不变的固定写法,代表main方法
//这一行代表程序执行的起点
public static void main(String[] args) {
//第三行代表打印输出的语句(其实就是屏幕显示)
//希望显示什么东西,就在小括号当中填写什么内容
System.out.println(“Hello,World!!”);
}
}
5.常量:在程序运行期间,固定不变的量
→常量的分类:
①字符串常量:凡是用双引号引出来的部分,叫做字符串常量。例:“abc”(双引号内可以有多个或者0个)
②整数常量:直接写上的数字,没有小数点。例:100、200
③浮点数常量:直接写上的数字,有小数点。例:2.5、-3.14、0.0
④字符常量:凡是用单引号引出来的部分,叫做字符串常量。例: ’A’(单引号内必须有且只能有一个,不能没有)
⑤布尔常量:只有两种取值,true和false
⑥空常量:null,代表没有任何数据。不能直接打印空常量,即System.out.println(null)是不对的
6.数据类型——基本数据类型+引用数据类型
①基本数据类型:
整数型 byte(1) short(2) int(4) long(8)
浮点型 float(4) double(8,默认)
字符型 char(2)
布尔型 boolean(1)
②引用数据类型:字符串、数组、类、接口、lambda
注意事项:
①字符串不是基本类型,是引用类型
②浮点型可能只是一个近似值,并非精确的值
③数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是八字节
④浮点数当中默认类型是double,如果一定要使用float类型,需要加上一个后缀F
如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L,推荐使用大写字母
例:long num6 = 3000000000L
float num7 = 2.5F
7.变量:程序运行期间,内容可以发生改变的量。
=右侧数值的范围不能超过左侧数据类型的取值范围,否则会出错
注意事项:
①如果创建多个变量,那么变量之间的名称不可重复
②对于float和long类型来说,字母后缀F和L不要丢掉
③如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围
④没有进行赋值的变量,不能直接使用,一定要赋值之后,才能使用
⑤变量使用不能超过作用域的范围
【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止
- 数据类型转换
double num1 = 2.5F
//左边是double类型,右边是默认的float类型,左右不一样,发生自动类型转换
①自动类型转换(隐式)
特点:代码不需要进行特殊处理,自动完成
规则:数据范围从小到大
②强制类型转换(显式)
特点:代码需要进行特殊的格式处理,不能自动完成
格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
→注意事项:
①强制类型转换一般不推荐使用,因为可能发生精度损失、数据溢出
②byte/short/char这三种类型都可以发生数学运算,如加法“+”
③byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后再计算
byte + byte --> int + int --> int
byte + short --> int + int --> int
short result = ( short ) ( num1 + num2 );
//int强制转换为short,注意必须保证逻辑上真实大小本来就没用超过short范围,否则会发生数据溢出
④boolean类型不能发生数据类型转换
9.ASCII码表:美国信息交换标准代码
48 --> 0 65 --> A 97 --> a
Unicode码表:万国码,也是数字和符号的对应关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。
10.运算符
①对于一个整数的表达式来说,除法用的是整除,结果仍然是整数,只看商,不看余数。
②取模=取余,只有对于整数的除法来说,取模运算符才有余数的意义。
③一旦运算当中有不同类型的数据,先变为一样的数据类型然后进行计算,结果将会是数据类型范围大的那种。
④在单独使用时,前++和后++没有任何区别。
→四则运算当中的“+”有常见的三种用法:
①对于数值来说,那就是加法。
②对于字符char类型来说,在计算之前,char会被提升为int,然后再计算。
③对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。
System.out.println(“Hello”+“World”); //HelloWorld(中间无空格)
任何数据类型和字符串进行连接的时候,结果都会变成字符串。
String + int --> String
String + int + int --> String
→逻辑运算符
①与“&&”,或“||”,具有短路效果:如果根据左边已经可以判断得到最终的结果
(&& --> false,|| --> true),那么右边的代码将不再执行,从而节省一定的性能。
②与、或运算符,如果有多个条件,可以连着写
11.三元运算符
数据类型 变量名称 = 条件判断?表达式A:表达式B;
→注意事项:
①必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
②三元运算符的结果必须被使用。
方法入门
1.定义一个方法的格式:
public static void 方法名称 () {
方法体
}
定义方法的完整格式:
修饰符 返回值类型 方法名称(参数类型 参数名称,...) {
方法体
return 返回值;
}
修饰符:现阶段的固定写法,public static
返回值类型:也即是方法最终产生的数据结果是什么类型
方法名称的命名规则和变量一样,使用小驼峰。
方法体:也就是大括号当中可以包含任意条语句。
return:两个作用,第一停止当前的方法,第二将后面的结果数据返回值还给调用处,返回值必须和方法名称前面的“返回值类型”保持对应
→注意事项:
①方法定义的前后顺序无所谓。
②方法应该定义在类当中,但是不能在方法当中再定义方法,不能嵌套。
③方法定义好了之后,不会执行的,如果想要执行,一定要进行方法的调用。
④如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
⑤return后面的返回值类型,必须和方法的返回值类型对应起来。
⑥对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
⑦对于方法当中最后一行的return可以省略不写。
⑧一个方法当中可以有多个return语句,但是必须保证同时只有一个被执行。
2.调用方法的格式:
①单独调用:方法名称( 参数 );
②打印调用: System.out.println( 方法名称 (参数) );
③赋值调用: 数据类型 变量名称 = 方法名称 ( 参数 );
3.有无参数的区别:
①有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。
②无参数:小括号当中留空,一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。
4.有无返回值的区别:
①有返回值:将返回值还给调用处,可以使用单独调用、打印调用或者赋值调用
②无返回值:直接结束,只能使用单独调用,不能能使用打印调用或者赋值调用
5.方法重载
多个方法的名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。
→方法重载与下列因素有关:
①参数个数不同
②参数类型不同
③参数的多类型顺序不同
→方法重载与下列因素无关:
①与参数的名称无关
②与方法的返回值无关
数组
1.数组的初始化:
①动态初始化:指定长度
数据类型[] 数组名称 = new 数据类型[数组长度];
解析含义:
左侧数据类型,也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号,代表我是一个数组
右侧的new:代表创建数组的动作
②静态初始化:指定内容
标准格式:
数据类型[] 数组名称 = new 数据类型[] { 元素1,元素2,... };
省略格式:
数据类型[] 数组名称 = { 元素1,元素2,... };
①虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以在自动推算出来长度。
②静态、动态初始化标准格式可以拆分成两个步骤。
③静态初始化一旦使用省略格式,就不能拆分成两个步骤了。
使用建议:
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体内容,用静态初始化
2.访问数组元素
①直接打印数组名称,得到的是数组对应的内存地址哈希值。
②访问数组元素的格式: 数组名称 [索引值]
索引值:就是一个int数字,代表数组当中元素的编号。从0开始到“数组长度-1”
3.使用动态数组的时候,其中的元素将会自动拥有一个默认值。
整数类型 --> 0 浮点类型 -->0.0
字符类型 -->’\u0000’ 布尔类型 -->false
引用类型 -->null
内存划分
1.Java的内存需要划分成5个部分:
①栈(Stack):存放的都是方法中的局部变量
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失
②堆(Heap):凡是new出来的东西,都在堆中
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值,规则:
整数类型 --> 0 浮点类型 -->0.0
字符类型 -->’\u0000’ 布尔类型 -->false
引用类型 -->null
③方法区(Method Area):存储.class相关信息,包含方法的信息。
④本地方法栈(Native Method Stack):与操作系统相关。
⑤寄存器(pc Register):与CPU相关。