一、关键字&标识符



(一)关键字:


被java赋予了特殊含义的单词。关键所有字母都是小写。


在Editplus中的java模式下,蓝色的都是关键字。



1、用于定义数据类型的关键字


class  interface  byte  short  int  long  float  double  char  boolean  void



2、用于定于数据类型值的关键字


true  false  null



3、用于定义流程控制的关键字


if else    switch case  default  while do  for  break  continue  return 



4、用于定义访问权限修饰符的关键字


private  protected  public



5、用于定义类、函数、变量修饰符的关键字


abstract  final  static  synchronized



6、用于定义类与类之间关系的关键字


extends  implements



7、用于定义建立实例及引用实例,判断实例的关键字


new  this  super  instanceof



8、用于异常处理的关键字


try  catch  finally  throw  throws 



9、用于包的关键字


package  import



10、其他修饰符关键字


native  strictfp  transient  volatile  assert



(二)标识符:


在程序中自定义的一些名词。比如:类名。



组成:


由26个英文字母大小写,数字0-9,符号_ $ 组成;



定义合法标识符的规则:


数字不可以开头;不可以使用关键字;Java中严格区分大小写。



注意:为了提高阅读性,起名字要尽量有意义



Java中的名称规范:


包名:多单词组成时,所有字母都小写。如:aaabbbccc



类名接口名:多单词组成时,所有单词首字母大写。如:AaaBbbCcc



变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。如:aaaBbbCcc



常量名:所有字母都大写;多单词组成时,每个单词用下划线连接。如:AAA_BBB_CCC



规则是必须要遵守的。



main 不是关键字,但它却是被虚拟机可以识别的名称。



二、常量



常量:表示不能改变的数值。



常量分类:


1、整数常量:所有整数



2、小数常量:所有小数



3、布尔型常量:只有两个数值 true 和 false



4、字符常量:将一个数字、字母或者符号用单引号('')表示。例如:'1 '  'a'   '-'   ' '    '你'   '' 都是字符。



5、字符串常量:将一个或者多个字符用双引号表示;例如:"ab"  "a"  ""  " " 都是字符串



6、null常量:只有一个数值,就是 null



对于整数,java有四种表现形式:


十进制:0-9,满10进1.


八进制:0-7,满8进1,用0开头表示。


十六进制:0-9,A-F,满16进1,用0x开头表示


二进制:0和1,满2进1



三、进制的特点



进制的由来:任何数据在计算机中都是以二进制的形式存在的。



Byte--字节  bit--二进制位  1 Byte = 8 bit



ASCII(American Standard Code for Information Interchange)编码表:用二进制的不同组合表示不同的文字符号。



二进制表示数据时表现形式太长,就衍生了八进制(3个二进制表示一位)、十六进制(4个二进制表示一位)。



'a'+0 = 97 


'A'+0 = 65 



四、进制转换:十进制和二进制



十进制-->二进制:


十进制数除以2,从下至上取其余数。



java代码:


System.out.println(Integer.toBinaryString(6))



二进制-->十进制:


从右至左,每一位依次乘以2的n-1次方,再相加其结果。



IP地址最大值为255:IP地址每一段用字节表示,一个字节最大可表示为255 



五、进制转换:八进制和十六进制



先转成二进制,再转为其他进制。



六、负数的二进制



对应正数的二进制取反+1

负数的二进制,最高位都是1
正数的二进制,最高位都是0

七、变量




变量--将不确定的数据进行存储



1、概念:


内存中的一个存储区域


该区域有自己的名称(变量名)和类型(数据类型)


该区域的数据可以在同一类型范围内不断变化



2、意义:


用来不断的存放同一类型的常量,并可以重复使用。



3、注意:


变量的作用范围(一对{}之间有效)


初始化值



4、变量的格式:


 

数据类型  变量名 = 初始化值



5、数据类型:


Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配的不同大小的空间。



a、基本数据类型:


|--数值型:


==整数类型: byte         short         int         long


==字节大小: 1             2            4            8


==取值范围:-128~127   -2^15~2^15-1   -2^31~2^31-1  ......



==浮点类型: float  double


==字节大小: 4

8




==定义整数类型时,请注意取值范围,超出范围则编译报错。



|--字符型: char (占两个字节Unicode 0~65535) 范例: char ch = '4';



|--布尔型: boolean (占1bit,也就是1/8字节 取值: true  false )范例: boolean b = true;



b、引用数据类型:


类: class


接口: interface


数组: []



整数默认: int

小数默认: double



5、注意二:


定义float变量: float f = 2.22f (不加f 会报错)



定义double变量: double d = 2.22



同一区间不能定义同一个变量名;



当数据不确定,需要对数据进行存储时,就定义一个变量来完成存储动作。



八、类型转换



byte a = 3 ;//右边3是int类型,右边3赋值给左边时,计算机会判断右边是否在byte范围内,如果没有超过范围则先转换byte类型,然后才赋值给a;如果右边超出范围,则编译报错。



a = (byte)(a + 1);//这个运算有两次类型转换过程:第一次是a+1时,a自动提升为int类型;第二次是a+1相加后的结果为int类型,强制转换成byte类型。



int + float = float 




s.o.p('a'+1);  //结果为:98  相当于97+1


//此处运算时,a是char类型,对应的ASCII编码表的十进制表现形式是97,占2个字节;加号右边1占4个字节,运算时,a自动提升为4字节,变为int类型,再于1做运算。



s.o.p((char)('a'+1));  //结果为:b 



s.o.p((char)5);  //结果为梅花符号。



九、算术运算符



运算符:


+  -  *  /  %(模运算,取余数)  ++  --  +(字符串连接符)



int x = 4270;


x = x / 1000 *1000 ;  //结果为4000


//x为int类型,1000也是int类型;x/1000结果还是int类型。



取模运算时,正负符号看左边。例如: 1%-5=1;

-1%5=-1;



int a = 3 , b ;  //a++ --> a = a + 1;


b = a++ ; //a=4,b=3


b = ++a ; //a=4,b=4




字符串数据和任何数据使用+相连接,最终都会变成字符串。


s.o.p("5+5="+5+5); //5+5=55: "5+5"=5+5-->"5+5=5"+5-->"5+5=55"


s.o.p("5+5="+(5+5)); //5+5=10.


sop(5+5+"=5+5"); //10=5+5 




十、转义字符



在字符串中,通过\来转变后面字母或者符号的意义。



\n:换行


\b:退格  相当于Backspace


\r:按下回车键


\t:制表符  相当于Tab




换行与按下回车键的区别:


在linux系统中,换行是由一个字符来表示的:\n


在windows系统中,换行是由\r\n来表示


在dos命令行中,直接识别\n



s.o.p("\"hello world\"");  // "hello world"



s.o.p("\\hello world\\");  //  \hello world\



char ch = '\n';//此处\n代表一个回车符,也是一个字符。



十一、赋值和比较运算符



1、赋值运算符:


=  +=  -=  *=  /=  %=  



int x = 3 ;


x += 4 ; //把左右两边的和赋值给左边



面试题:


short s = 4 ;


s = s + 5 ; //编译失败,损失精度。此处做两次运算,右边做完加法运算后结果为int类型,再做赋值运算(将后边运算的结果赋值给左边)。左边为short类型,赋值过程中损失精度。


s += 5 ;  //编译OK;只做一次+=赋值运算,运算过程中自动强制转换成short类型。 



连续赋值:


int a,b,c;


a = b = c = 5 ;




2、比较运算符:


运算结果都是 boolean, 只有 true 和 false 。



==  !=  >  <  >=  <=  



instanceof(检查是否是类的对象;例如:"Hello" instanceof String)。



十二、逻辑运算符 



逻辑运算符: &  |  ^  !  &&  ||  



逻辑运算符用于连接 boolean 类型的表达式,运算结果也是 boolean 类型。



& 左右都为真,结果才为真;



| 左右有一个为真,结果就为真;



^ 左右不一样,结果为真;



! 与实际结果相反;



&& 左边为假,右边不再判断,结果为假,效率稍高;



|| 左边为真,右边不再判断,结果为真,效率稍高。



十三、位运算符(左移右移)



位运算符是用来运算二进制的符号。



<<

左移


最低位补0。


比如int x左移n位,结果为x*2^n;左移后的结果x*2^n不要超出原有数据类型int的范围。



>>

右移


最高位是什么,就补什么。



>>>

无符号右移


最高位补0。



十四、位运算符(与-或-异或)



&

与运算:对应二进制做&运算;1为真,0为假。



|

或运算:同上。



^

异或运算:同上;一个数异或同一个数两次,结果还是原来的数,可用于加密。



~

反码:就是取反


-6的二进制是6的二进制取反+1


6的二进制取反+1等于-6


6的二进制取反等于-7


十五、练习



练习一:最有效的方式算2乘8


思路----2<<3 = 2*2^3


int x = 2 ,y;


y = 2 << 3;



练习二:对两个整数的值进行互换


方法一:定义第三方变量(开发常用)


int n = 3, m = 8;


int temp;


temp = n;


n = m;


m = temp;



方法二:用两个数的和减去另一个数(如果两个值比较大,容易超出范围)


int n = 3, m = 8;


n = n + m;


m = n - m;//m=(n+m)-m=n;


n = n - m;//n=(n+m)-n=m;



方法三:用异或运算符,异或两次还等于原来的数的原理


int n = 3, m = 8;


n = n ^ m;


m = n ^ m;//m=(n^m)^m=n;


n = n ^ m;//n=(n^m)^n=m;



实际开发中使用方法一:定义第三方变量。



十六、练习二&三元运算符



二进制转换为十六进制:


该数的二进制表现形式先&15,再右移4位;再&15,再右移4位,如此循环。



三元运算符:


(三元运算:三个元素参与运算)


格式:


(条件表达式)?表达式1:表达式2;


条件表达式为true,结果为表达式1


条件表达式为false,结果为表达式2



示例:


int x = 3, y = 4, z;


z = (x>y)?x:y;



int a = 2, b;


b = (a>1)?100:200;



注意:三元运算符运算必须有结果。



一元运算符: ! (非)



十七、if 语句



程序流程控制:


顺序结构、判断结构、选择结构、循环结构



顺序结构:从上往下执行。



判断结构:if语句。


{}内都是执行语句


格式一:if(条件表达式){}


格式二:if(条件表达式){}  else{}


格式三:if(条件表达式){}  else if(条件表达式){}  ……  else{}



备注:


格式二和格式三中有且只有一条语句会执行。


if或者else或者else if后面只有一条语句,可以省略{};



if else 结构和简写格式为三元运算符;但是三元运算符运算完,必须有一个结果。


十八、if练习



练习一:根据数值输出星期


用 if   else if  ... else 语句,注意设定非法数值,代码如下:


class IfTest1
	{
		public static void main(String[] args)
		{
			//需求:根据用户定义的数值不同,打印对应的星期英文。
			int x = 4 ;
			if(x==1)
				System.out.println("Monday");
			else if(x==2)
				System.out.println("Tuesday");
			else if(x==3)
				System.out.println("Wednesday");
			else if(x==4)
				System.out.println("Thursday");
			else if(x==5)
				System.out.println("Friday");
			else if(x==6)
				System.out.println("Saturday");
			else if(x==7)
				System.out.println("Sunday");
			else
				System.out.println("nonexistent");
		}
	}



练习二:根据月份数值输出季节


用 if   else if  ... else 语句,代码如下:


class IfTest2
	{
		public static void main(String[] args)
		{
			int x = 3;
			if(x<1 || x>12)
				System.out.println(x+"月份不存在");
			else if(x>=3 && x<=5)
				System.out.println(x+"月份是春季");
			else if(x>=6 && x<=8)
				System.out.println(x+"月份是夏季");
			else if(x>=9 && x<=11)
				System.out.println(x+"月份是秋季");
			else
				System.out.println(x+"月份是冬季");
		}
	}



十九、Switch 语句(选择结构)



格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
……
default://系统默认值
执行语句;
break;//此处break可以省略
}

switch 语句的特点:
1、表达式接收的类型只可以是四种: byte short int char

2、 case 之间与 default 没有顺序,从上往下执行 case, 没有匹配时执行 default;

3、结束 switch 语句的两种情况:遇到 break, 或者执行到 switch 语句}结尾处;

4、如果匹配的 case 或者 default 没有对应的 break, 那么程序会继续向下执行,运行可以执行的语句,直到遇到 break 或者 switch 结尾结束。

示例:

class SwitchDemo1
	{
		public static void main(String[] args)
		{
			int x = 5 ;
			switch (x) //byte short int char
			{
				default:
					System.out.println("d");
					//break;
				case 4 :
					System.out.println("a");
					//break;
				case 6 :
					System.out.println("b");
					break;
				case 2 :
					System.out.println("c");
					break;
			}
		}
	}//结果是: d a b



二十、Switch 练习



练习一:


class SwitchTest1
	{
		public static void main(String[] args)
		{
			int a = 4 , b = 2 ;
			char ch = '*' ;
			switch(ch)
			{
				case '+' :
					System.out.println(a+b);
					break;
				case '-' :
					System.out.println(a-b);
					break;
				case '*' :
					System.out.println(a*b);
					break;
				case '/' :
					System.out.println(a/b);
					break;
				default :
					System.out.println("非法运算");
			}
		}
	}



季节练习:多个 case 对应同一条输出语句。

class SwitchTest2
	{
		public static void main(String[] args)
		{
			int month = 3;
			switch(month)
			{
				case 3:
				case 4:
				case 5:
					System.out.println(x+"月份是春季");
					break;
				case 6:
				case 7:
				case 8:
					System.out.println(x+"月份是夏季");
					break;
				case 9:
				case 10:
				case 11:
					System.out.println(x+"月份是秋季");
					break;
				case 12:
				case 1:
				case 2:
					System.out.println(x+"月份是冬季");
					break;
				default:
					System.out.println(x+"月份不存在");
					break;
			}
		}
	}



if 和 switch 区别: 


if 除了可以判断具体数值,还可以判断区间; switch 只能判断具体数值,判断区间代码较多。


if 的条件表达式为 boolean 型结果; switch 表达式为具体数值。



if 和 switch 的具体运用:


如果判断的具体数值不多,而且符合 byte short int char, 用 switch 完成,效率稍高; 


其他情况,判断区间时,对结果为 boolean 类型判断,用 if 比较广泛。