导论
0.软件
1、概念:指一系列按照特定顺序组织的数计算机数据与指令的集合
数据:能够被计算机识别的东西,在硬盘中以文件形式存在
指令:对数据进行的相关操作
2、分类
系统软件:主要负责控制和管理计算底层硬件,为用户提供最基本的计算机功能,也是专门用于运行其他应用程序的平台。
应用软件:主要处理特殊领域问题的软件,为用户提供更多专项的计算机功能,基于系统软件才能实现。
正文
一、关键字
被赋予了特殊含义的单词,不能随便使用,关键字的字母全为小写(如class、pubic、static、void)
那么String、System不是关键字,是Java自带类的名称,也不能随意使用。
二、标识符
在写代码的过程中自定义的名称(变量名、类名、函数名、接口名)
特殊:main也算是标识符,但是被写死了
组成规则:
(1)由字母、数字、下划线_、美元符$组成
(2)数字不能开头
(3) 严格区分大小写
(4)不可以使用关键字和Java的自带类名称
ps:尽量起有意义的名字,提高阅读性
组成规范:
(1)小驼峰式命名法:有多个单词组成一个词,除了第一个单词首字母小写 ,其余单词的首字母大写 myName、yourPen;主要应用:变量名、函数名
(2)大驼峰式命名法:所有单词的首字母都大写,应用:类名、接口
(3)全大写命名法:全大写。单词与单词用下划线连接(MAX_VALUE)应用:常量
三、注释
存在意义:代码过多情况下,会遗忘一些,起到提示的作用,不属于代码范畴
分类:
- 单行注释(//...........)直到换行为止
- 多行注释(/*........*/)第一个*注释开始,第二个*结束
- 文档注释(/**..........*/)可以通过文档注释制作程序说明书
javadoc.exe工具制作程序说明书
PS:单行里面可以套多行
多行里可以套单行
多行不能套多行
四、常量与进制
常量:在程序中直接出现的数据,数据本身不能被改变
分为:
(1)整数
二进制、八进制、十进制(一般)、十六进制
二进制:也是一种计数方式 逢2进1
二进制:0 1 10 11 100 .......
十进制:0 1 2 3 4 .......
二进制转十进制:
十进制转二进制
二进制转八进制以及八进制转十进制
二进制转十六进制以及十六进制转十进制
负数二进制表示(取反加1)重新看看
二进制0b开头 八进制0 十六进制0x开头
(2)浮点数
一般小数 3.14
科学计数小数 3.89e3=3.89*10^3
(3)字符
由一个数字、字母、符号被单引号包含的数据
报错
单引号里面必须有数据,空格也行
(4)字符串
由一个或多个数字、字母、符号被双引号所包含 的数据
双引号里面没数据也行,称为空串
(5)布尔类型
只有true false 表示真假
true false 是关键字的一种,表示确切的某个值
(6)空
null 关键字
五、变量与数据类型
1、变量:本身可以改变的数据
变量的出现可以解决重复性数据更迭问题
在计算机计算的过程中,为方便调用临时的数据,则用变量将其存储起来
本质就是在内存之中某一个进程里的一个临时存储区域
每一个变量空间在创建的时候都会被随机的分配地址(真实的物理内存地址)
变量空间中的数据在变化的过程中必须保持是可兼容的(至少是同一类型的)本来是整数,变其他如布尔,则不是同一类型
如果直接在代码中用变量的物理地址去访问空间中的数据,可能访问不到
为了避免地址的不确定性,引入了变量名这个概念。
变量空间的地址,其实就是C里面的指针
常量都在常量池当中,变量空间存的就是常量在常量池中的地址。
int a = 5;
double b = 5.00
System.out.println(a==b); true
//a int 两边类型不同,a自动变double再和b进行了比较
//把b转int
System.out.println(a==(int)b);
System.out.println(a+b); 10.0
具体看下C指针
&取地址的意思
如何定义变量
(1)数据类型 变量名=常量
(2)数据类型 变量;
变量=常量;
2、数据类型
目的:
- 为了限制当前变量当中存储的数据,变量当中的数据必须是可兼容的
- 为了限制当前变量空间的大小。
数据类型的分类:
(1)八大基本数据类型:
- 整数(byte、short、int、long)
byte 1字节
2^8=256个数据可用 范围(-128至127 -2^7至 2^7-1)
(1字节=8bit 比特位 )
short 2字节
2^16=65536 范围(-32768至32767 -2^15至 2^15-1)
int 4字节 (-2^31至 2^31-1)
long 8字节 (-2^63至 2^63-1)
测试代码
class Test1{
public static void main(String[] args){
/*
00000000 00000000 00000000 01100100
01100100
4两的碗 里面放了不到1量的饭
装到1两的碗里,能放下
因为整数常量100的有效数据可以直接放入byte里面
所以计算机将常量100之前的所有空的字节 阉割了
向下自动类型转换int->byte 从大字节到小字节
*/
byte b1 =100;
System.out.println(b1); //100
/*
00000000 00000000 00000001 00101100
00101100
4两的碗 里面放了1两多的饭
装到1两的碗里,放不下
先去尝试着去向下自动类型转换
如果你想强行的将300放到byte中-强制类型转换
强转一定是从大到小的!
*/
byte b2 =300;
System.out.println(b2);//报错,不兼容的类型:从int转换到byte可能会有损失
//强转
byte b3=(byte)300;
System.out.println(b3);//44 前面的丢失只留下00101100
/*
对于b6而言 它的后面跟着的是两个变量
b6不能确定 b4 b5变量的值
对于整数之间进行加法运算时,得到的值是int值
*/
byte b4=3;
byte b5=7;
byte b6=b4+b5;//得到是int值
System.out.println(b6);//报错,不兼容的类型:从int转换到byte可能会有损失
//强转
byte b4 =3;
byte b5 =7;
byte b6 =byte(b4+b5);
/*
00000000 00000000 00000000 11001000
11001000
11001000 -1
11000111 取反
00111000 56 -56
*/
byte b4=100;
byte b5=100;
byte b6=byte(b4+b5);//-56
//short部分
short s1=3;
short s2=7;
//报错 原因同上 除非强转
short s3=s1+s2;
//强转
short s3=(short)(s1+s2);
System.out.println(s3);
//int
int i1=3;
int i2=1;
int i3=i1+i2;
//此处为什么没有报错?左边右边都是int 无转换
System.out.println(i3);//4
int i4=Integer.MAX_VALUE;//表示int类型 的最大值 2147483647
int i5=i4+i2;
/*2147483647二进制
01111111 11111111 11111111 11111111 加一
0 10000000 00000000 00000000 00000000 最开始的零为符号位,溢出去了,忽略
10000000 00000000 00000000 00000000 1表负数,故需要进行减1然后取反
01111111 11111111 11111111 11111111 减1
10000000 00000000 00000000 00000000 取反 故i5为-2147483648
*/
System.out.println(i5);//整型溢出
//long
long l1 =300;
long l2 =300;
long l3 =l1+l2;
System.out.println(l3);//600 long8字节
//整数常量默认为int 此时已经超了int的值了
//再大超出long的范围,解决办法BigInteger BigDecimal两个类去解决,之后介绍
long l4 =123456789123123;
System.out.println(l4);//报错 过大的整数 整数常量后面加L就变为long常量
}
}
- 浮点数(float、double)
float 4字节
double 8字节
浮点型常量默认是double类型
public class Test2{
public static void main(String[] args){
//浮点型常量默认是double类型
//double类型向float转换可能会有损失
//解决办法 float f =3.14F;
float f =3.14;
System.out.println(f);//报错
double d1=3.14;
double d2=3.14
System.out.println(d1+d2);//6.28
/*
byte+short=short 以此类推,在整数/浮点数变量之间进行运算的时候,
小字节+大字节=大字节
大小:byte->short->int->long->float->double
*/
}
}
- 字符(char)
char 2字节
取值范围:0-65535 指的就是字符编号
在计算机当中存储字符的方式:
public class Test3{
public static void main(String[] args){
/*
在打印这个字符变量的时候,前去码表中编号相对应的字符再打印
*/
char c1=97;//代表将一个字符编号给字符变量
System.out.println(c1);//a
char c2='A';//将一个字符常量给字符变量,那么直接打印
System.out.println(c1);//A
//字符变量在参与运算时,是以编号身份参加
char c3 ='a';
System.out.println(c3+1);//98 小加大int
//查看'我'这个字符的编码
System.out.println('我'+0);
//查看'我'后面的字符
System.out.println((char)('我'+0));//强转 转char
}
}
常见字符编号:
'a' 97
A 65
'0' 48
- 布尔(boolean)
只允许取值true或false
如果boolean是一个变量的话 1字节
如果boolean是一个数组的话 每个空间是4个字节
根据数字取值范围进行划分的基本数据类型
(2)引用数据类型:
字符串、null、数组、对象
六、运算符
- 算数运算符
- + 加法运算
如果+号的两边都是数字的话,那么这个+表示的数学上的加法
如果+号的两边,只有有一个字符串,那么这个+表示的是字符串连接符
- - 减法运算
- * 乘法运算
- / 除法运算
如果两边都是整数 结果就是整数(整除)
如果两边至少存在一个小数,结果就是小数
- % 取余运算
相当于是整除运算,但是得到的结果是余数
- ++ 自加运算
前++ ++i i本身直接+1再参与运算
后++ i++ i先参与运算再本身+1
- -- 自减运算
注意:
(1)如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但若被模数是负数那就另当别论;
(2)对于取模运算m%n:
- 当m等于n时,结果为0;
- 当m大于n时,结果为m/n的余数;
- 当m小于n时,结果为m
class Test04{
public static void main(String[] args){
System.out.println(2+3);//5
System.out.println("哈哈"+"啦啦");//"哈哈啦啦"
System.out.println(1+2+3+"456");//"6456"
System.out.println("123"+4+5+6);//123456
//"123"+4="1234"+5="12345"+6="123456"
System.out.println("123"+(4+5+6));//12315
System.out.println(3/10);//0
System.out.println(3.0/10);//0.3
System.out.println(10/3);// 3
System.out.println(10%3);// 1
}
}
class Test05{
public static void main(String[] args){
/*
i++
1.先开辟一个临时存储区
2.将i的值复制到存储区
3.i自身+1
4.临时存储区的值等待被调用(参与运算,输出,赋值)
*/
int i=3;
i++;
System.out.println(i); //4
System.out.println(i++);//4
int j=i++;
System.out.println(j); //5
System.out.println(i); //6
i=i++;
System.out.println(i); //6
i=i++;
System.out.println(i); //6
i=1;
j= i++ + ++i + ++i + i++;
// 1 3 4 4
System.out.println(j); //12
System.out.println(i); //5
}
}
2.赋值运算符
- +=
- -=
- *=
- /=
- %=
- =
class Test06{
public static void main(String[] args){
int a=3;
a=a+3;等同于a+=3
a+=3;
a=a+1;等同于a+=1; ++a; a++;
a+=1;
++a;
a++;
short s=3;
//s=s+3;报错,不兼容的类型: 从int转换到short可能会有损失
s+=3;
System.out.println(s);//6
a=1;
System.out.println(a++==1);true
}
}
3.比较运算符
4. 逻辑运算符
5.位运算符
指的就是二进制之间的运算
- &
- |
- ^
- >>右移
- <<左移
class Test06{
public static void main(String[] args){
int m=7;
int n=11;
System.out.println(m&n); //3
/*
0111
1011
&0011 3
*/
System.out.println(m|n); //15
/*
0111
1011
|1111 15
*/
System.out.println(m^n); //12
/*异或:不同为真 相同为假
0111
1011
^1100 12
*/
System.out.println(m>>2); //1
/*
0111
01 11
*/
System.out.println(m<<2); //28
/*
0111
011100
*/
System.out.println(0b10010101>>3);//18
//10010
System.out.println(0b10010101<<3);
//10010101000
//x>>y x/2^y
//x<<y x*2^y
}
}
6.三目运算符