Day02
任务目标
注释
关键字
常量
变量
数据类型 转换
运算符
基本概念
注释
目的:解释说明
特点:
(1)编译器不会检查这部分内容的语法格式
(2)运行的时候会忽略掉这部分内容
分类:
单行注释:
// ctrl+/ 对当前行进行解释
单行注释 能不能嵌套? 能!
多行注释:多行解释说明 /* */ 写完文本ctrl+shift+/
多行注释不能实现嵌套?不能!
文档注释 /* enter补齐 开发中进行书写(姓名,时间,功能)
注释的作用:
(1)对程序进行解释说明:要求代码中,有30%行数都是用来写注释的
(2)对程序的思路进行描述
(3)对程序进行调试:通过注释的方式,快速定位出现错误的代码位置
关键字
1、在java语言中,被赋予了特殊含义,特殊功能的英文单词 public class
2、特点:
(1)全部小写
(2)不可以与关键字,保留字重名
(3)有两个保留字 goto const ,暂时版本没有使用,但是不确定以后是否使用
标识符(法律)
1、标识符:用于给类、接口、方法、变量、常量、枚举起名字的字符序列
2、组成:
(1)英文a-z A-z
(2)数字0-9
(3)特殊符号$ _
(4)不常用符号:除了其他符号,例如:中文(不建议写)
3、标识符的注意事项:是否合法
(1)不要和关键字重名,mychar合法 、char不合法
(2)数字不要开头,abc123合法、123abc不合法、123不合法
Java的命名规则(道德)
1、约定俗成的规则,编译器不会检查,但是在开发中必须要遵守的规则。
2、规则:见名知意
包:全部小写,域名倒着写
例如:com.ujiuye.demo1 com.baidu
类和接口:每个单词的首字母大写,其余其母都小写,一般是一个名词
例如:HelloWorld Day01
方法:第一个单词的首字母小写,从第二个单词开始,首字母大写,其余字母全小写
一般是一个动词或者动宾结构
例如:main getName() getMax()
变量:第一个单词的首字母小写,从第二个单词开始,首字母大写,其余字母全小写
一般是一个名词或者形容词
例如:name age myAge
常量:所有字母都大写,单词和单词之间,使用_分隔,一般是一个名词
例如:HELLO_WORLD PI
常量
1、常量:在程序运行过程中,其值不会发生改变的量,就是常量
2、常量按照表示形式的分类:
字面值常量:写出常量就可以知道常量的值 1 2 1.5 true
符号常量:给常量起了一个名字,看到名字就知道常量的意义,不知道常量的值 PI
3、常量按照数据类型分类:
基本数据类型:简单的数据
整数常量:所有的整数 1 2 180 90
小数常量:所有小数 无论正负 181.5 93.2 0.1 -1.2
字符常量:单引号 ‘a’ ‘A’
布尔常量:true false
引用数据类型:基本类型组装而成的一些数据类型
字符串常量:双引号 ”HelloWorld” “你今天真帅!”
空常量:表示空,不指向任何数据,null
变量
1、变量:在程序运行过程中,其值会发生改变的量。
理解:
酒店(内存) 房间 房间类型 房间号 房间住的人
变量 数据类型 变量名 变量值
年龄 数据类型 age 20 -> 21
(整数)
2、定义格式:
声明格式 数据类型 变量名;
赋值 变量名 = 20;
声明和赋值 数据类型 变量名 = 变量值;
Int age = 20;
3、使用变量的原因:
在程序中,有一些代表相同意义的数据,在不断发生变化,例如年龄
定义一个不变的变量名称,表示那些不断变化的数字
在内存中,其实就是一段内存空间,空间中的数据可以不断的变化
4、图示:
数据类型
1、java是一个强类型语言:需要显式的说明内存空间的大小,声明变量的时候,就需要说明变量的数据类型,以此来表示内存的大小。
2、数据类型的分类:
基本数据类型:在jdk中已经定义好的一些类型,这些类型无法增加,描述的都是一些简单的数据。这些数据描述的是数值【本身】。
引用数据类型:数据描述的不是数据本身,而是在描述真正数据的【地址】。一般都是使用一些自定义的类去描述,相当于各种基本类型的组合,形成一个复杂的类型。
3、基本数据类型:四类八种
四类 八种 字节数 数据表示范围
整型
(精确)
byte 1 -128~127
short 2 -32768~32767
int(默认) 4 -2147483648~2147483647
long 8 -263~263-1
浮点型
(不精确) float 4 -3.403E38~3.403E38
double(默认) 8 -1.798E308~1.798E308
字符型
char 2 表示一个字符,如(‘a’,‘A’,‘0’,‘家’)
布尔型
boolean 只有两个值true与false
整数类型
byte 1个字节(8条电路,8个位,8bit) -128~127
short 2个字节 -2^15~2^15-1
int 4个字节 -2^31~2^31-1
long 8个字节 -2^63~2^63-1(后加L)
小数类型:IEEE754标准(科学计数法)
float 4个字节 >8个字节long类型 (后加F)
double 8个字节 >4个字节的float类型
字符类型:
char 2个字节 0-65535
布尔类型:
boolean 未知 true\false
数据类型转换之隐式转换
1、当小的范围的数据类型和大的范围的数据类型在运算是,会先将小的范围的数据类型的数据,提升为大的范围的数据类型,再进行运算。运算的结果还是大的范围的数据类型。
2、数据类型表示范围的比较:
byte < short = char < int < long < float < double
3、注意事项:
byte、short、char、int在相互运算时,会直接统统提升为int类型,而非较大类型
int以及int以上的类型,在相互运算时,会提升为较大类型
数据类型转换之强制转换
1、大的范围的数据类型的数据,要转成小范围的数据类型,就需要使用强制转换。
2、转换格式:
(要转成的数据类型)需要转换的数据
3、注意事项:
运算的结果,未必和生活中的结果不相同
字符类型
1、使用单引号引起来的,单个符号。使用的关键字,char
2、在计算机中,所有的数据都是使用数字来进行表示,字符也不例外。
3、看到的字符,和计算机中的数字,有一个转换对应关系:
从字符到数字的过程,叫做【编码】
从数字到字符的过程,叫做【解码】
其中,在转换过程中的对应关系,就叫做【编码表】
4、编码表,别称:字符集,最开始只有英文、数字和英文状态的特殊符号,定义在ASCII编码表中
5、ASCII编码表:
规律:数字本身连续,数字到大写字母不连续;大写字母本身连续,大写字母到小写字母不连续;小写字母本身连续。
6、各个国家都有自己的字符,所以都需要定义自己的编码表,其中中国的编码表:GB2312,GBK,其中都是中国的文字,GBK编码表中,前面的128个数字都是ASCII编码表中相同的内容。表示一个英文使用1个字节,表示一个中文2个字节。
在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节。
7、转义
\n 换行
\t 制表符 Tab
\r 回车
A --> 65 a --> 97 0–>48
字符串类型
1、使用双引号引起来的一系列的字符组合,是一种引用数据类型,字符串类型的变量空间中,记录的是数据的地址
2、声明字符串使用的数据类型,String
3、字符串和其他类型数据的运算:+
表示拼接:先把其他类型的数据,转成字符串类型,然后再和当前的字符串进行拼接,结果是一个更长的字符串
运算符
对常量和变量进行操作的符号称为运算符
表达式
用运算符把常量或者变量连接起来符号java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。
定义两个int类型的变量a,b,做加法(a + b)
常用运算符
算术运算符
赋值运算符
关系运算符
逻辑运算符
三元运算符
算数运算符
1、运用做算数运算的符号
2、+ - * / %
3、+ :加法运算符:
(1)表示正数
(2)表示算数的加法
(3)表示字符串的拼接
4、/:除法运算符:
(1)如果是两个整数相除,结果还是一个整数
(2)如果任意一个操作数是小数,那么结果就是小数
5、%:取模运算符、取余运算符:获取两数相除的余数
(1)注意事项:取余的结果的符号只和%前面的操作数的符号有关
(2)作用:获取余数;判断是否整除;判断奇偶
自增自减运算符
1、++、–
2、++:自增运算符
3、作用:在某个变量的基础上,自增1
4、注意事项:
(1)自增运算符既可以写在变量的前面,也可以写在变量的后面
(2)当a++和++a作为一个语句存在时,没有任何区别,都是表示一个自增的动作,都可以把a自增1
(3)当a++和++a作为一个表达式存在时,有区别的,表示的数量的值是有区别的:a++是先获取a的值,然后再自增;++a先自增,然后再获取a的值。
总结:无论先++ 还是后++ 自己本身一定+1(自增一个1)
运算:先++ 先去+1 然后赋值 (b = ++a)
后++ 先去赋值 然后+1 (b = a ++)
代码演示:
独立运算:变量在独立运算时, 前++ 和后++ 没有区别 。
public static void main(String[] args) {
int a = 1;
a++; //a + 1
System.out.println(a);//2
++a; //a + 1
System.out.println(a);//3
}
和其他变量放在一起运算,就产生了不同:
前++计算方式:变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
后++计算方式:变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1。
public static void main(String[] args) {
int a = 1;
//int b = ++a;//a:2 b:2 注意:++在前表示先计算++ 再赋值
int b = a++;//a:2 b:1 注意:++在后表示先赋值 再计算++
System.out.println(a);
System.out.println(b);
}
赋值运算符
1、用于给变量进行赋值的运算符。
2、分类:
基本的赋值运算符:=
扩展的赋值运算符:+= -= *= /= %=
3、基本的赋值运算符:
将赋值运算符右边的数量,赋值给左边的变量
4、扩展的赋值运算符:
将符号左右两边的数量进行算数运算,将结果赋值给符号左边的变量
练习1:
下面代码的运行结果为?
public static void main(String[] args) {
int a = 1;
short b = 2;
b = b + a;
//b += a; //3
System.out.println(b);
}
分析:
第一个编译报错,a int类型 b short类型 a+b int类型 赋值给b short,所以只能强转(short) ,b = (short)(a + b)
第二个编译不报错,+=会进行转换,不需手动转
练习2:
下面代码的运行结果为?
public static void main(String[] args) {
byte b1 = 1;
byte b2 = 2;
//byte b3 = 1 + 2; //
//byte b3 = b1 + b2; //
//System.out.println(b3);
}
分析:
b3=1+2,1和2是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了1+2的结果并没有超过byte类型的取值范围,可以赋值给变量b3,因此b3=1+2 是正确的。
常量优化机制:
有一些计算,非常简单,例如常量和常量的计算就非常简单,在编译阶段就可以把这些简单的运算计算完。
反之, b4=b1+b2 ,b1和b2是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b1+b2的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。
比较运算符
1、用于比较两个数据是否相等,比较两个数据的大小关系的运算符
2、分类:
== !=:可以比较任意的数据类型
> >= < <=:可以比较数值类型(整数类型、小数类型、字符类型)
3、运算的结果:
boolean类型,要么是true、要么是false
逻辑运算符
1、用于处理逻辑值的运算符,就是逻辑运算符
2、处理的数据:逻辑值;处理的结果:逻辑值
3、&&:逻辑与。全真为真,否则为假 一假则假
true && true true
true && false false
false && true false
false && false false
4、||:逻辑或。全假为假,否则为真 一真必真
true || true true
true || false true
false || true true
false || false false
5、!:逻辑非。遇真为假、遇假为真【常用】
!true false
!false true
位移运算符
1、对于数据在内存中的表示,进行按照位来移动,以此达到对数据进行运算的目的。
2、说明:只能操作整数类型的数据,运算结果还是整数
3、罗列:<< >> >>>
4、<<:左移运算符,每次移动一位,会将原来的数字扩大2倍
5、>>:右移运算符,每次移动一位,会将原来的数字缩小为原来的二分之一
6、>>>:无符号右移,每次移动一位,会将原来的数字缩小为原来的二分之一,这个运算符只能针对正数操作。效率高于右移运算符。
7、总结特点:
运算比直接乘以2或者除以2的效率要高很多
三元运算符
1、元:可以操作的数据或者表达式
2、三元运算符:同时可以操作三个数据或者表达式的运算符
3、格式:
表达式1?表达式2:表达式3;
4、说明:
(1)表达式1必须是boolean类型的表达式,计算的结果只能是true、或者false
(2)表达式2和表达式3可以是任意类型的表达式
5、运算流程:
(1)表达式1,boolean类型
(2)表达式1成立,表达式2
(3)表达式1没成立,表达式3