
一、windowns操作系统DOS命令行查找命令的逻辑
优先从当前目录下查找,没有则从环境变量指定路径中查找;都没有则报错
标识符(数字,英文,下划线,美元符号;不能以数字开头)
类名,方法名,变量名,接口名,常量名
规范:
最好见名知意;遵守驼峰式命名方法;
类名,接口名:首字母大写,后面每个单词首字母大写;
变量名,方法名:首字母小写,后面每个单词首字母大写;
常量名:全部大写
关键字
字面值:就是数据,如赋予变量的值
public class 与class的区别
一个.java文件中,只能有一个public class 公共类,且类名必须与.java文件名一致;但是可以同时拥有多个不带任何修饰符的class类;
变量
在同一个作用域中,不能定义相同的变量,但是变量可以被修改赋值
变量的作用域,其实描述的就是变量的有效范围。
在什么范围之内是可以被访问的,只要出了这个范围该变量就无法访问了
变量的作用域只要记住一句话:出了大括号就不认识了
数据类型:
数字类型的第一个为符号位,0表示正数,1表示负数;正数是用原码来表示,
负数是用补码来表示;补码=反码+1;
byte类型最大值:127【二进制表示:01111111】;?byte类型最小值:-128【二进制表示:1000 0001】
十进制负数二进制转换原理:先将负数的绝对值的转换成二进制原码,将原码转换成反码(0换成1,1换成0),在将反码+1即是负数的二进制;
计算机最初只支持英文,最先出现的字符编码是:ASCⅡ码
A=65【01100001】
a=97【01100001】
0=48【】
A------(按照ASCⅡ码解码)----->01100001
01100001-----(按照ASCⅡ码编码)----->A
编码和解码的时候采用同一套字典/对照表,不会出现乱码
当解码和编码的时候采用的不是同一套对照表,会出现乱码问题。
转义字符
n 换行符
t 制表符
' 普通单引号
" 普通双引号
普通反斜杠
u 后面+unicode编码就是unicode编码对应的数;如unicode编码4e2d对应的是'中';char a='u4e2d',System.out.println(a);输出的结果是'中';其中4e2d是十六进制
十进制:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
二进制:0,1,10,11,100,101,110
十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1f,20
八进制:0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20
'中'对应的unicode编码是:4e2d
数据类型 占用空间大小 默认值 取值范围
byte 1 0 -128~127
short 2 0 -32768~32767
int 4 0 -2147483648~2147483647
long 8 0L -2的63方~2的63方-1
foat 4 0.0f 有效位数6-7位
double 8 0.0d 有效位数15位
char 2 'u0000' 0~65535
boolean 1 true/false false(0代表false,1代表true)
java语言当中的“整数型字面值”被默认当做int类型来处理。要让这个“整数型字面值”被当做long类型来处理的话,需要在“整数型字面值”后面添加l/L,建议使用大写L(因为小写l容易当成1)
java语言当中的整数型字面值有三种表示方式
第一种方式:十进制【是一种缺省默认的方式】---常用
第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
如:
int c =10;//常用
int d=010;
int e=0x10;
System.out.println(c);//输出10
System.out.println(d);//输出8
System.out.println(e);//输出16
java语言当中的“整数型字面值”被默认当做int类型来处理
int i=123;
//123这个整数型字面值是int类型;
//i变量声明的时候也是int类型
//int类型的123赋值给int类型的变量i,不存在类型转换;
long x=456;
//456这个整数型字面值是int类型,占用4个字节;
//x变量声明的时候是long类型,占用8个字节;
//int类型的456赋值给long类型的变量x,存在类型转换;
//int类型转换成long类型;
//int类型是小容量,long类型是大容量;
//小容量可以自动转换成大容量,称为自动类型转换机制。
long y=2147483648;
//编译错误:过大的整数:2147483648
//2147483648被当做int类型4个字节处理,但是这个字面值超出int类型范围;
long y=2147483648L;
//解决错误可正常运行
//2147483648L是8个字节的long类型,y是long类型变量,即不存在类型转换
类型转换
long x=100L;
int y=x;
x变量是long类型,8个字节;y变量是int类型,4个字节;导致编译报错,大容量不能直接赋值给小容量;
大容量转换成小容量,需要进行强制转换
强制类型转换需要加“强制类型转换符”
加上强制类型转换符之后编译通过,但是运行阶段可能损失精度
所以强制类型转换谨慎使用,因为损失精度后可能损失很严重
long x=100L;int y=(int) x;
强转原理:
x原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100 //补码
强转之后的数据:00000000 00000000 00000000 01100100 //补码
将左边的4个字节的二进制砍掉(所有的数据强转都是这样完成的)
long k=2147483648L;
int e=(int) k;
k原始数据:00000000 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 //补码
强转之后的数据:10000000 00000000 00000000 00000000 //补码
计算机存储数据都是采用补码的形式存储,
所以e的值为:-2147483648
-4的原码是:10000000 00000000 00000000 00000100;反码是:11111111 11111111 11111111 11111011;补码是:11111111 11111111 11111111 11111100;
4的原码是:00000000 00000000 00000000 00000100;反码=补码=原码
负数的补码=反码+1,负数的反码在原码的基础上,符号位不变,其余的按位取反;1
正数的补码,反码原码本身
反码=
原码=1000000
byte b=50;
50是int类型的字面值,b是byte类型的字面值;
大容量转换成小容量,需要添加强制转换符的
但是,在实际编译的时候,在java语法当中,当一个整数型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值byte类型变量
byte b =50;可以
byte c=127;可以
byte d=128;不可以,编译报错,128这个int类型字面值超出byte类型的取值范围,不能直接赋值给byte类型的变量,需要强制转换才行(损失精度)
纠正:byte d=(byte) 128;