java基础篇(一) 标识符、常量、变量、运算符

一、标识符的学习和规则
1.定义
在程序中我们自定义的一些名称
在编程的过程中,经常需要在程序中定义一些符号来标记一些名称,
如包名、类名、方法名、参数名、变量名,这些符号被称为标识符。
2.组成元素
52个大小写英文字母a~z  26*2=52个
数字0~9  10个
下划线_和美元符号$  2个
3.规则
不可以以数字打头
	如:4student
不可以使用java的关键字
	class不能使用
严格区分大小写
	date和Date,是两个变量
4.原则
	见名知意,驼峰命名 eg: timeUtil
5.规范掌握
包名
	多个单词组成时,所有单词都小写。
	举例:com.baidu.map
	
类名和接口名
	多个单词组成时,所有单词的首字母大写。
	举例:StudentGradeService

变量名和函数名
	多个单词组成时,第一个单词的首字母小写,
后面的单词的首字母都大写。举例:studentName

常量名
	所有字母都大写,多单词时每个单词用下划线_连接。
举例:ERROR_USER_NAME
二、关键字
定义和特点
关键字:被java语言赋予特定含义的单词。
特点:组成关键字单词的字母全部小写。

注意:
	A:goto和const是保留字
	B:类似于Notepad++、editplus这样的高级记事本,针对关键字都有特殊的颜色标记。
三、常量
1.定义
	java中固定不变的数值。
2.分类
2.1字面值常量
		(1).整数常量
			二进制binary:以0b打头
				由0,1组成。以0b开头。JDK7以后的新特性。
				
			八进制octal :以0打头
				由0-7组成。以0开头。
			十进制decimal 
			
				由0-9组成。默认就是十进制。
				
			十六进制hex:以0x打头
				由0-9,A-F(不区分大小写)组成,以0x开头。
				
		(2).小数常量
			单精度浮点数float:以F结尾
			双精度浮点数double:以D结尾或者省略
		(3).字符串常量
			将一个或者多个字符用双引号("")标识声明,
			""空内容的字符串,是长度为0的字符串常量
		(4).字符常量
			将一个数字、字母或者符号、汉字用单引号('')
			标识声明,以及由转义序列来表示的特殊字符。
			只能放单个字符‘a';'4';'+';'我';'\r';'\u0000';
			'\u0000'表示一个空白字符,即单引号之间无任何字符。
			一个char是大小占两个字节,而一个中文也是两个字节。
		(5).布尔常量
			较为特有,只有两个数值:true | false,是Java关键字
		(6).null常量
			只有一个值null,表示对象的引用为空。
2.2自定义常量
	eg: public static final int aaa = 1;
	    private static final  String bbb = "Hello world!";
3.注意事项
	常量可以直接被输出。
4.转义字符
	定义
		在字符常量中,反斜杠\是一个特殊的字符,被称为转义字符
	作用
		用来转义后面一个字符
	常见转义字符
		\r:表示回车符,将光标定位到当前行的开头,不会跳到下一行return
		\n:表示换行符,光标换到下一行开头 next
		\t:表示制表符,将光标移到下一个制表符tab的位置
		\b:表示退格符号,就像键盘上的Backspace键
	转义特殊符号
		\':表示单引号字符
		\":表示双引号字符
		\\:表示反斜杠字符

这里写图片描述

这里写图片描述

四、进制特点与转换
1.进制的由来
进制的由来:任何数据在计算机中都是以二进制的形式存在的。二进制早起由电信号开关演变而来。
一个整数在内存中一样也是二进制的,但是使用一大串的1或者0组成的数值进行使用很麻烦。
所以就想把一大串缩短点儿,将二进制中的3位用一位表示,就是八进制;
但是对于过长的二进制变成八进制还是太长,所以出现了用4个二进制位表示一位的情况。四个二
进制位最大是15,这就是十六进制。
2.规律
	进制越大,表现形式越短
3.分类
	二进制
		由0和1组成的数字序列,以0b或者0B打头
	八进制
		以0开头并且其后由0~7范围的整数组成的数字序列
	十进制
		由数字0~9范围的整数组成的数字序列
	十六进制
		以0x或者0X开头并且其后由0~9、A~F组成的数字序列
4.进制间转换
4.1其他进制到十进制
	结论:把系数*(基数的权次幂)相加即可。
		系数:就是每一位上的数据。
		基数:X进制,基数就是X。
		权:在右边,从0开始编号,对应位上的编号即为该位的权。
4.2十进制到其他进制
	除基取余,直到商为0,余数反转。
4.3快速转换
	8421码:二进制与十进制互转
	二进制--八进制(3位组合)---拆分组合法
	二进制--十六进制(4位组合)---拆分组合法
五、变量
1.定义
	就是将不确定的数据进行存储,也就是在内存中开辟一个空间。
	开辟内存空间就是通过明确数据类型,变量名称,数值来完成的。
	数据类型 变量名称 = 数值;
	eg: String s = "hello";
特点
	1.内存中的一个存储区域
	2.该区域有自己的名称(变量)和类型(数据类型)
	3.该区域的数据(数值)可以在同一类型范围内不断变换
作用
	用来不断的存放同一类型的常量并可以重复使用
2.注意事项
2.1变量的作用范围(作用域):
		
一对{}之间有效.并且,在同一个大括号内不能同时定义同名的变量。

2.2.初始化值:
	使用变量前,一定要初始化
	必须有初始值才可以参与运算,无默认初始化值。
	没有初始化值的变量不能直接使用。
	你只要在使用前给值就行,不一定非要在定义的时候立即给值。
	推荐在定义的时候给值。
2.3.在一行上建议只定义一个变量
	可以定义多个,但是不建议
		
//在一行上定义多个变量
//int a = 10; int b = 20; int c  = 30;
//上面的写法可以,但是不建议。
int a = 10; 
int b = 20; 
int c  = 30;

下面的定义方式允许:
int x=3,y;
y=x+3;
int x=y=z=5;//这是错误的
int x=y=z;//这是错误的
正例:
	int x,y,z;
	x=y=z=5;
3.定义格式
a:数据类型 变量名 = 初始化值;   String name = "zhangsan";
	声明变量时直接初始化.
b:数据类型 变量名;
	变量名 = 初始化值;    String name;
	先声明变量,在使用变量前完成初始化.
4.定义变量的注意问题:
4.1 什么时候定义变量:
当你知道这是一个变化的内容的时候。

4.2 一般定义的范围:
首先是在小范围内,如果不合理,在考虑大范围...
5 基本数据类型
  四类8种
5.1.1整数类型
		byte-字节-1个字节=8个二进制位,-128 (-2^7)~127 (2^7-1)   常用 byte b=2;
		short-短整型-2个字节=16个二进制位,-32768(-2^15)~32767(2^15-1)   short s=30000;
		int-整型-4个字节=32个二进制位 ,-2147483648~ 2147483647 (-2^31)~(2^31-1)默认常用 int i=4;
		long-长整型-8个字节=64个二进制位 long l = 23234234242L;
			
		byte   1字节	-128 (-2^7)~127 (2^7-1)  
		short  2字节	-32768(-2^15)~32767(2^15-1)
		int    4字节(默认类型)
		long   8字节 以L结尾

原码  反码  补码

符号位为1的二进制转十进制负数
相信大家已经知道如何个转法了,不过在此还是说明一下。
补码 1111-1111
①除去符号位减1; 	反码 1111-1110
②除去符号位,按位取反;结果就是负数的源码; 	原码 1000-0001
③原码转成相应的十进制。十进制:-1
5.1.2浮点类型
		float 4个字节 以F结尾 float f=2.3f;
		(默认)double	8个字节
		底数E为10
5.1.3字符型char
		字符型char 在内存中占两个字节,取值范围0~65535
5.1.4 布尔型boolean
		只有两个取值true|false,在Java运算中,不参与类型转换,可以认为是一个字节
5.1.5引用数据类型
		类class
		接口interface
		数组[]
注意
整数默认是int类型
浮点数默认是double类型。
		
长整型后缀用L或者l标记。建议使用L。
单精度浮点数用F或者f标记。建议使用F。
6、数据类型转换
6.1数据类型自动提升
(隐式转换)
		
两种类型兼容
或者目标类型取值大于源类型
byte b = 6;
int i =b;
6.2数据类型强制转换
(强制转换)
两种类型不兼容
或者目标类型取值小于源类型
显示声明强转格式:目标类型 变量名=(目标类型) 值;
注意:在使用赋值运算符(=除外)时,也可自动提升,不需要显示声明
不要随意的去使用强制转换,因为它隐含了精度损失问题。
6.3注意事项
取值范围(小→大)
 byte,short,char < int < long < float < double
		byte,short,char相互之间不转换,但是他们参与运算会首先转换为int类型
		boolean类型不参与转换。
		char可以赋值给int --long -- float -- double
	数值溢出必须声明强转
	如果赋值运算符右边的表达式是字面值常量运算,
	那么先运算,若超出左边定义变量的取值范围
	那么需要强转,若未超出那么可以接收。不报错。
	举例: byte b4 = 3 + 4; //编译通过 。

若等号右边的表达式有int变量参与运算的话(因为自动提升),还是需要经过强制类型转换(只要有变量参与,就会自动提升)
举例:
	int i = 3;
	// byte b = i + 4; // 编译错误,
	byte b = (byte) (i + 4);
6.4思考题
思考题1:请问下面这个有没有问题
		double d = 12.345;
		float f = d;
	
	//把double赋值给float,需要强制类型转换
		double d = 12.345;
		float f = (float)d;
	
思考题2:看看下面两个定义有没有区别呢?
		float f1 = (float)12.345;
		float f2 = 12.345f;
	//答:f1其实是通过一个double类型转换过来的。而f2本身就是一个float类型。
		
思考题3:byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢? // -126
思考题4:byte b = (byte)300; 
	计算机中数据的运算都是补码进行的
A:获取130这个数据的二进制。
		0000-0000 0000-0000 0000-0000 1000-0010
		这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型的了。
		10000010 
		这个结果是补码。
C:已知补码求原码。
		符号位		数值位
	补码:	1		000-0010
	反码:	1		000-0001
	原码:	1		111-1110
1	1	1	-	1	1	1	0
64	32	16		8	4	2	0 = -126
		
看程序写结果:
	通过字符和一个整数相加,我们给出一张表:ASCII码表。
	通过看完这张表以后,我们要记住三个值:
		'a'		97
		'A'		65
		'0'		48
//直接输出一个字符
System.out.println('a'); //a
//输出一个字符和一个整数做加法
System.out.println('a'+1); //98
字符串数据和其他数据做+,结果是字符串类型。
这里的+不是加法运算,而是字符串连接符。

System.out.println("hello"+'a'+1); //helloa1
System.out.println('a'+1+"hello"); //98hello

System.out.println("5+5="+5+5); //5+5=55
System.out.println(5+5+"=5+5"); //10=5+5
注意:
	如果字符串在最前边,那么+号就是连接符;
	如果前面是可以进行运算的表达式,
	那么+号是算术运算符,先运算再连接
注意:
	与类的向上转型(自动提升)、
	向下转型(强制转换)
	进行区分
7、运算符
算术运算符
	11个:+正号,-负号,+加,-减,*乘,
	/除:整数相除,结果为整数,忽略小数部分(不四舍五入)
		若其中有小数参与运算,结果为小数
	%取模(即求余):正负号只与左边被模数有关
	++自增(前后有别):前先自增后运算,后先运算后自增
	--自减(前后有别):前先自减后运算,后先运算后自减
		
+字符串相加:
	(是否与字符串的前后顺序有关系??? 
	经验证有关系,他的优先级只对字符串+后边的数据起作用)
	字符串数据和任何数据使用+都是相连接,最终都会变成字符串。
	System.out.println("5+5="+(5+5)); 结果为“5+5=10”
	System.out.println("5+5="+5+5); 结果为“5+5=55”
	
/:整数相除,结果只能是整数。
   如果你想要小数,那么参与运算的
	数据必须有一个是浮点数类型。
%: 取得余数
	左边的数据大于右边,结果是余数。
	左边的数据小于右边,结果是左边。
	左边的数据等于右边,结果是0。
	符号跟左边一致。
	++,--:
	单独使用:效果一致,隐含了强制类型转换功能【】
	参与运算使用:前后不一致,
	前,会先++/--,后,是后++/--	
后++,与是否引入第二个变量有关系:
无,打印输入,是未自增的值;
有,打印输出,是自增后的值

赋值运算符
	6个:=赋值,+=加等于,-=减等于,*=乘等于,/=除等于,%=模等于
	int x=y=z=5;//这是错误的
	int x=y=z;//这是错误的

int x,y,z;
x=y=z=5;
+=这种运算符,内含了强制类型转换功能。
short s = 2;
s+=2;等价于s = (short)(s+2);
	
比较运算符
	运算结果为布尔型
	6个:==相等于,!=不等于,<小于,>大于,<=小于等于,>=大于等于
	特点:关系运算符的结果都是boolean类型。
    请千万注意:== 不要写成 =

逻辑运算符
	对结果为布尔型的数据进行操作,结果仍为布尔型
	
	6个:&与,|或,!非,^异或,&&短路与,||短路或
	&:有false则false
	|:有true则true
	!:true变false,false变true
	^:相同false,不同true

&&:有false则false
||:有true则true

&&和&的区别是:如果左边有false了,右边将不再执行。
||和|的区别是:如果左边有true了,右边将不再执行。
		开发中常用:
		&&, ||, ! (s+3);

位运算符

针对二进制数的每一位进行运算的符号
	7个:&按位与,|按位或,~取反,^按位异或,
	    <<左移,>>右移,>>>无符号右移
		<<左移
			原值乘以2的移动的位数次幂,值左移变大
			左边的高位舍弃,右边空出的部分补齐0。
		>>右移
			原值除以2的移动的位数次幂,值右移变小
			如果最高位是0,左边被移空的位就填入0;
		如果最高位是1,左边被移空的位就填入1
		>>>无符号右移
		无论高位是什么,右移后都补0
		^按位异或
			一个数异或另一个数两次,结果还是那个数
			向左移动或者向右移动,
			其实就是把数据增大或者缩小2的指定次幂。

三元运算符(三目运算符)
		  
格式:
    (条件表达式)?表达式1:表达式2;
	执行流程
	如果条件表达式返回true,就把表达式1作为结果。
	如果条件表达式返回false,就把表达式2作为结果。
		嵌套三元表达式
		int a = 20;
		int b = 40;
		int c = 30;

方式1:
		int d = a>b?a:b;
		int e = d>c?d:c;
方式2:
		int f = (a>b)?(a>c?a:c):(b>c?b:c);
		注意:
			
条件表达式说明这里将来只能是结果为true或者false的表达式。
三元运算符的操作都可以使用if语句改进,反之不成立

什么时候不成立呢?
当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,
必须要求有一个结果返回。
而输出语句却不能作为一个返回结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值