java语法基础
字符编码集
Unicode码介绍
Java中使用的是统一码(Unicode)。
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
Unicode用16位表示,比ASCII码字符集要大的多。
汉字字符集
GB2312-80
中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,国家标准总局发布,1981年5月1日实施,收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个
GBK
全国信息技术化技术委员会于1995年12月1日《汉字内码扩展规范》,GBK共收入21886个汉字和图形符号
BIG5
1983年10月,台湾国家科学委员会、教育部国语推行委员会、中央标准局、行政院共同制定了《通用汉字标准交换码》,后经修订于1992年5月公布,更名为《中文标准交换码》,BIG5收录13461个汉字和符号
为什么要使用Unicode码?
Java中使用的不同字符集编码的内码定义不一样
汉字 GBK BIG5
一 D2BB A440
标识符
组成
1. 只能以以下字符组成:
a) 字母(A~Z、a~z)
b) 特殊符号($、_)
c) 数字(0~9)
2. 第一个字母不能为数字
3. 不能为关键字
4. 区分大小写
命名规则
类与接口:首字母大写,其余子首字母大写,其他字母都小写。
变量:首字母小写,其余子首字母大写,其他全部小写。
方法名:首字母小写,其余字母首字母大写,其他全部小写。
常量:全部大写,字与字之间用_分割。
关键字
if long throw public strictfp
do case while return abstract
for null short throws continue
int char super finally transient
try void break default interface
new float static private protected
this class native volatile instanceof
goto final double boolean implements
byte const import extends synchronized
else catch switch package
分隔符
空白符:出现在任意两个字之间,一个等同多个
public static void main
public static void
分号:每个语句的结束标志。for循环条件表达式中也使用到
System.out.println(“Hello”);
逗号:用于分隔定义相同类型的变量或对象
char c,c1,ch;
冒号:用做语句标点和语句之间的分隔符。
f=a>b?c+d:c-d;
{}号:界定类、方法、复合语句的作用域。
for(……){……}
注释
单行注释://
多行注释:/*………………….*/
文档注释:/**……………………..*/ Java特有的一种注释语句,使用javadoc工具从源代码和文档注释中将信息取出,然后转换为HTML文件
进制
二进制:00001010
八进制:0754
十进制1254
十六进制0x1254
进制转换
十进制转换成二进制:除二取余
106 = 1101010
二进制转成十进制:
1101010 = 106
二进制与八进制之间的转换:
1101010=0152
二进制与十六进制之间的转换:
1101010=0x6a
负数的进制表示形式
原码 01101010 11101010
正数的原码是其本身,负数的原码还是其本身
反码 01101010 10010101
正数的反码是其原码,负数的反码是其原码的每一位求反(符号位除外)
补码 01101010 10010110
正数的补码是其原码,负数的补码是其反码+1
数据类型
Java语言的数据类型分为两大类:
基本数据类型:8种
复合数据类型:3种
基本数据类型
整数类型
byte:8位,一个字节
short:16位,两个字节
int:32位,四个字节
long:64位,八个字节
实数类型:
float:单精度浮点数 32位 4个字节
double:双精度浮点数 64位 8个字节
字符型:
char:字符型 16位 2个字节
boolean:布尔类型 8位 1个字节
复合数据类型
类(class)
接口(interface)
数组
常量
整型常量
表示所有的整数,常用八进制,十进制,十六进制来表示
整型常量有正负之分
Long型常量必须在后面加L或l
实型常量
表示所有的浮点数(小数)
实型常量分为两种
单精度实数(float),数字后面加字符f(或F)
双精度实数(double),数字后面加字符d(或D或省略)
实型常量如无字母标识,默认为双精度实数
实型常量表示形式分两种
十进制:由数字与小数点组成 0. 12 ,.12,12.,12.0
科学计数法:1.23e3 123E1 12.3e2 0.123E4 -2E
布尔型常量
true false
字符型常量
用单引号括起来的单个字符
‘a’ ‘A’ ‘@’ ‘’//错误
转义/特殊字符
‘已经被定义为描述字符的范围,表示字符’时,要使用转义字符的形式,还有其他多种字符需要使用转义字符
\’ \” \\
\n \r \b \t
\t制表占位符,可以用于描述成1到8个空格
\b退格键
\r光标移动到行首
\n光标移动到下一行(回车)
字符串常量
使用双引号括起来的0到多个字符
“river” “class” “”
字符串中如需表示引号字符,使用转义字符
null 常量
null常量描述了一个不存在的指向
变量
变量描述的是内存中对应的存储区域
变量的定义规则
数据类型 变量名;
数据类型 变量名1,变量名2;
数据类型 变量名=值;
数据类型 变量名1 = 值1, 变量名2=值2….;
数据类型 变量名1, 变量名2=值….;
int a; int a,b; int a=1,b;inta=1,b=1;
变量作用域
变量的作用域即从某个变量定义位置开始,到其所在的大括号结束处。
数据类型转换
高类型与低类型
byte 低
short .
int .
long .
float . float与double类型转换成
double 高 时只取整数部分
数据类型转换总结:
发生场景:
1. 赋值
a) 如果等号右边的式子只用常量,则在不超过左边数据范围的情况下,类型不同,会发生自动类型转换
b) 如果等号右边的式子类型比左边式子的类型低,发生自动类型转换
c) 如果等号右边的式子类型比左边的类型高,必须使用强制类型转换
d) 实型转整型时,必须使用强制类型转换,转换结果只取实型的整数部分
2. 二元运算
a) 两个操作数类型不同时,低类型转高类型,然后再进行运算
b) 运算中如果有变量参与运算,运算的结果如果类型不足int,将自动升级为int
例子
<span style="white-space:pre"> </span>int a ;
a = (int)1000000000000000000L;//丢失精度,强制类型转换的数据有可能与原始数据没有任何关系
System.out.println(a);
long l= 100; //自动类型转换
System.out.println(l);
byte b = 1;
byte bb =(byte) (b + 1);//b先提升至int
System.out.println(bb);
byte a = 1;
int b = 2;
long c = (byte)(a + b);//a+b的结果为int
System.out.println(c);
byte b;
b = 1 + 2;//右边的式子没有超过左边类型表示的范围
System.out.println(b);
*/
byte b;
byte bb = 126;
b = bb+1; //有变量参与运算,bb+1为int
System.out.println(b);
byte b = 1;
short c = 2;
short res = b + c;//b + c 的结果为int
System.out.println(res);
float f = 1;
System.out.println(f);//整型数据可以自动转换成实型数据
long a =(long)12.53e1f;//125.3
char与int
char型数据每个值都有一个int型的表示格式
char c = ‘a’;
c的值是‘a’,在参与算术时,‘a’的值取其unicode码值
char c = ‘a’;
System.out.println(c);
System.out.println(c+0);
System.out.println(c+‘b’);
整数运算的临界值
当整数进行算术运算时,如果超过了边界值将自动截断超出部分,只保留对应数据范围内的数据,此数据将失去原始值所表示的真实性
byte b = 127;
b++;
System.out.println(b);//-128
int long short byte 达到最大值时循环
运算符
算术运算符
+ - * / % ++ --
字符串连接运算符+
System.out.println(1+2+3+”a”+1+2+3);//6a123
System.out.println(1+2+3+’a’+1+2+3);//109
System.out.println('a'+"b"+'c');//abc
自增自减运算符 ++ --
/*int a = 1;
a++;
System.out.println(a); *///2
/*int a = 1;
++a;
System.out.println(a);*///2
System.out.println(a++);//1
System.out.println(++a);//2
int a=1;
int b=2;
System.out.println(a+b++);//3
System.out.println(a++ + b++);//3
System.out.println(++a + ++b);//5
System.out.println(a++ + a++ + a++);//6
分析:
式子 a 整个式子
a++ 1 2 1 + a++ + a++
a++ 2 3 1+2 + a++
a++ 3 3 1+2+3=6
System.out.println(a++ + --a + ++a + a--);//1+1+2+2=6 a=1
关系运算符
用于比较两个值之间的关系,运算结果为布尔值的true或false
java中=号用于做赋值运算,而且要求等号左边必须是一个变量,右边必须是一个值
大于 > 3>4//false
大于等于 >= 3>=4//false
小于 < 3<4//true
小于等于 <= 3<=4//true
等于 == 3==4//false
不等于 != 3!=4//true
==号两边只要类型相同或相兼容,就可以进行运算
System.out.println(‘a’==97);
逻辑运算符
&(&&):描述一种同时成立的情况,&符号两边的布尔值同时为true则为true 同真则真
&&与&功能相同,不同之处在于&&如果断定左边式子为false,则右边的式子就不再判断。&则左右两边式子的真假值都要判断。在进行运算过程中,&&要对前面的式子进行一次检测,因此,在整个式子运行过程中,会比&多进行一次判定。
|(||)描述两者有一个成立就成立的情况,布尔值 或者 布尔值
或。符号两边的布尔值同时为false整体为false。同假则假。||与|功能相同,不同之处在于||如果断定左边式子为true,则右边的式子就不再判断。|则左右两边式子的真假值都要判断。在进行运算过程中,||要对前面的式子进行一次检测,因此,在整个式子运行过程中,会比|多进行一次判定。
非 ! 非真即假,非假即真
异或 :^ java中描述不能同时成立的关系使用^布尔值 异或 布尔值。异或 ^ :描述二者不能同时成立的情况,^符号两边的布尔值相同为false,不同为true。相同为假,不同为真。
移位运算符
对操作数的二进制表示形式进行左右移动,移位运算发生在整型变量或常量间
移位运算共包含三种运算
左移 <<
<<运算,每左移1位,相当于在原始数的基础上乘2,每次左移后,原数右侧补0
int a = 101;// /int型变量a,a左移b,实际上移动的位置应该是a<<(b%32)
System.out.println(a<<1);
System.out.println(a<<33);
右移 >>
>>运算,每右移1位,相当于在原始数的基础上/2, 每次右移后,正数左侧补0,负数左侧补1(补码基础上)
无符号右移 >>>
每次右移后,左侧补0(补码基础上)
int a = -102;
System.out.println(a>>>1);
条件运算符
条件表达式?值1:值2
条件表达式:需要一个结果为true或false的式子
int a = 11;
int b = 2;
int c = a >b ? a :b;
int a = 10;
doubled = 9.7;
System.out.println(a > d ? a : d );//10.0
System.out.println( true ?false : true ? false : true );//false
System.out.println(3 > 2? 1 : true );//1
int a = 3 > 2 ? 1 : true;
System.out.println(3 > 2? 1 : true );//编译失败
位运算符
位运算操作的是整型数字(二进制格式),位运算可以对常量或变量进行: ~ & | ^
按位取反 ~ ~15
按位与 & 13&21
按位或 | 33|15
按位异或 ^ 171^14
/*按位与+按位或应用
让你给我描述一个人的信息,全部是这种对立状态的数据3个*/
/*
booleangender = true;
booleanmember1 = true;
booleanpart = true;
32个byte保存32个值,需要32byte空间
0000-00000000-0000 0000-0000 0000-0000
右向左第一位代表性别
0000-00000000-0000 0000-0000 0000-0001 男
0000-00000000-0000 0000-0000 0000-0000 女
右向左第二位代表是不是华侨
0000-00000000-0000 0000-0000 0000-0011 男华侨
0000-00000000-0000 0000-0000 0000-0001 男不是华侨
某人的个人信息
0010-11011111-0010 1101-0000 0001-1111 ->int
?取性别
0010-11011111-0010 1101-0000 0001-1111 & 1 大于0男 等于0女
做手术
0010-11011111-0010 1101-0000 0001-1111
0010-11011111-0010 1101-0000 0001-1111 & 1111111111111111111111111
*/
//交换两个整形变量的值
inta = 10;
intb = 20;
//1.设计一个第三变量完成
intc = a;
a =b;
b =c;
//2.不能创建第三变量
System.out.println("a="+a+",b="+b);
a =a + b;
b =a - b;
a =a - b;
System.out.println("a="+a+",b="+b);
//3.位运算^
System.out.println(44^101);
System.out.println(73^44);
System.out.println(73^101);
//System.out.println(101^44^44);//101
a =a^b;
b =a^b;// a^b^b
a =a^b;// a^ a^b
*/
表达式
使用运算符和括号将操作数连接起来求值的式子
操作数可以是变量、常量或方法(后期)
表达式类型
算术表达式
a+b
关系表达式
a>b
逻辑表达式
a&&b
赋值表达式
a =2;
复合赋值运算
+= -= *= /= %=
<<= >>= >>>= &= |=
a+=b 等同于 a = a + b //可以理解成这样的计算
int a = 1;
a += a++ + (a=1);
分析:
a = a + ( a++ + (a=1))
a = 1 + ( a++ + (a=1))
a = 1 + ( 1 + (a=1)) a= 2
a = 1 + ( 1 + a); a= 1
a = 1 + ( 1 + 1);
a = 3;