JAVA语言基础组成(环境搭建)
J2EE,J2SE,J2ME在JAVA5.0之后,改为JavaEE,JavaSE,JavaME
JAVA环境搭建:JRE,JDK
JRE(JAVA Runtime Environment 是java运行环境),含JVM(虚拟机)和java核心类库。
JDK(JAVA Development Kit 是java开发工具包),也包括JRE,使用JDK开发完成的java程序,交给JRE去运行。
环境变量的配置:把JDK的javac.exe的位置,告诉系统(path)。
JAVA_HOME的作用是:更改bin的目录所在位置,及名称时,可以不用改变path。(相当于一个中间变量,是个技巧,不是必须);
Path是在任何位置,能运行java环境;classpath是在任何位置,能运行java文件。
Java语言的程序代码都需要定义在类中。
【set classpath= c:\;】先找C盘,再找当前目录;
【set classpath= c:\】只找C盘;
【set classpath= .;c:\;d:\】先找当前,再找C,D盘。
(应用软件的快捷方式,和这样的路径是一个道理)
Java严格区分大小写。
Java语言的组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组。
1、关键字:被赋予特殊含义的单词,其字母都小写。class static…
2、标识符:自定义名称,尽量要有意义。数值,字母,_$。不可以数字开头,不可以用关键字。
包名:xxxyyyzzz; 类名、接口名:XxxYyyZzz
变量名和函数名:xxxYyyZzz; 常量名:XXX_YYY_ZZZ
Java中的名称规范:包名:多单词组成时所有字母都小写;类名接口名:多单词组成时,所有单词的首字母大写;变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写;常量名:所有字母都大写,多单词时每个单词都用下划线连接。
4、常量:不能改变的数值。分类:整数常量,小数常量,布尔型常量(有两个数值:true,false),字符常量(将一份数字字母或者符号用‘’标识),字符串常量(将一个或者多个字符用“”标识),null常量(只有一个数值就是null)。
①、对于整数有十进制(0-9)、八进制(0-7,用0开头表示)、十六进制(0-9,A-F,用0x开头表示)。三位二进制的表示一个八进制位,四位二进制的表示一个十六进制位。进制越大,表示的越简短。(例如:0101-1010对应十进制是90,对应十六进制是0x5,对应八进制是132。如果位数不是正好对应,可以在前面补0)
负数的二进制表现形式(例如:6=110,-6就是6的二进制取反+1,取反就是将二进制的1变成0将0变成1。6在计算机中的表示是0000-0000 0000-0000 0000-0000 0000-0110取反得1111-1111 1111-1111 1111-11111111-1001加0000-00000000-0000 0000-0000 0000-0001得1111-1111 1111-1111 1111-1111 1111-1010即为-6)负数的最高位都是1。
注释:单行用//,多行用/* */,文档
②、变量:将不确定的数据进行存储也就是需要在内存中开辟一个空间(开辟空间通过明确数据类型,变量名,数据来完成)。
Java对每种数据都定义了具体数据类型,在内存中分配不同大小的内存空间。
数据类型:基本数据类型,引用数据类型
基本数据类型:数值型{整数类型(byte,short,int,long),浮点类型(float,double)},字符型(char),布尔型(boolean)
引用数据类型:类(class),接口(interface),数组([])
整数默认:int 小数默认:double
定义变量的格式:数据类型 变量名=初始值;
什么时候定义变量:当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作。
类型转换:byte b=3;
b=b+2;
System.out.println(b); //会得不出结果
byte b=3;
b=(byte)(b+2);
System.out.println(b); //强制性转换成char型
要注意,字母的大小写ASCII码中对应的数字不同,字符与数字对应的也不同(如:‘3’与3).
5、运算符:
①、%是取模,就是求余。左边比右边小的,值就是左边。右边是1的或者左右相等的,余数是0。负数取模,还是与左右的数字有关。
若int a=3;b=a++;则b=3,a=4。若int a=3;b=++a;则b=4,a=4。
字符串数据和任何数据使用+都是相连接,最终都会变成字符串。若要在输出中使用+,可以用()来提升级别。
②、转义字符:通过\来转变后面字母或者符号的含义。
\n:换行
\b:退格。相当于backspace.
\r:按下回车键。Window系统,回车符由两个字符来表示\n\r。
\t:制表符。相等于tab键。
③、赋值运算符:+=,-=,*=,/=,%=
思考:short s=3;
s=s+2;
s+=2;
有什么区别?
答:s=s+2//编译失败,是因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。s+=2//编译通过,因为+=运算符在给s赋值时,自动完成了强制转换操作。
④、比较运算符:==(不可误写成赋值=),!=,<,>,<=,>=,instanceof
比较运算符的结果都是boolean型,就是要么是true,要不是false。
⑤、逻辑运算符:用于连接boolean类型的表达式。&与:只要两边的的boolean表达式结果,有一个为false,那么结果就是false;只要两边都为true,结果为true。|或:两边只要有一个为true,结果为true,只有两边都有false,结果为false。^异或:就是和或有点不一样,当true^true=false,两边相同结果是false,两边不同结果是true。!非。&和&&的特点:&无论左边是true是false,右边都运算;&&当左边为false是,右边不用运算。|和||的特点:|两边都参与运算;||当左边为true,右边不运算。
⑥、位运算符:
左移<<:就是乘以2的移动的位数次幂(如:3<<2=12);右移>>:就是除以2的移动的位数次幂(如:3>>1=1);(移动空出来的位由0补齐);若是负数,移动后看第一位是什么,是1就补1,是0就补0。
区别>>和>>>:其中>>做高位补什么由原有数据的最高位而定,如果最高位0,右移后,用0补空位,如果最高位1,右移后,用1补空位;而>>>无论最高位是什么右移后,都用0补(如:3>>>1=1)。
&与运算:二进制算,把0当假,1当真与运算(如:6&3=2)
|或运算:二进制算,把0当假,1当真或运算(如:6|3=7)
^异或运算:二进制算,把0当假,1当真异或运算(如:6^3=5).一个数异或同一个数两次,结果还是这个数。
~反码:取反再减1(如:~6=-7)
思考:①最有效率的方法算出2乘以8等于几?答:用位移运算最有效2<<3
②对两个整数变量的值进行互换的方法
答:int m=9,n=1;
System.out.println("m="+m+",n="+n);
//通过第三方交换
/*inttemp;//最常用的方法
temp=m;
m=n;
n=temp;
System.out.println("m="+m+",n="+n);*/
//不用第三方交换
/*n=n+m; //如果n和m的值非常大,容易超出int范围
m=n-m;
n=n-m;
System.out.println("m="+m+",n="+n);*/
//用异或的方法
n=n^m;
m=n^m;//即异或两次n赋值给m:(n^m)^m
n=n^m;//即异或两次m赋值给n:(n^m)^n
System.out.println("m="+m+",n="+n);
⑦、三元运算符:(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
简单的与运算&和右移运算>>以及三元运算符的应用见Day23.java.
class Day23
{
publicstatic void main(String[] args)
{
//获取60的二进制数
System.out.println(Integer.toBinaryString(60));
intnum=60;
//获取60的十六进制数
//获取60的最低4位,通过&15;
intn1=num & 15;
System.out.println((char)(n1-10+'A')); //可以用三元运算符进行判断这个数是否大于9
//获取下一组四位,将60右移4位
inttemp=60 >>> 4;
//对temp的值进行最低四位的获取
intn2=temp & 15;
System.out.println(n2);
/*
0-9'A' 'B' 'C' 'D' 'E' 'F'
65 66 67
10 11 12 13 14 15
12-10=2+'A'=(char)67;
*/
}
}
6、语句:程序流程控制:顺序结构,判断结构,循环结构,选择结构
判断结构:if语句:如果其中只有一条语句,可不用加大括号。(例Day24.java)
class Day24
{
publicstatic void main(String[] args)
{
//需求1:根据用户定义的数值不同,打印对应的星期英文
intm=8;
if(m==1)
System.out.println("Mon");
elseif(m==2)
System.out.println("Stud");
elseif(m==3)
System.out.println("Wen");
elseif(m==4)
System.out.println("Sts");
elseif(m==5)
System.out.println("Fri");
elseif(m==6)
System.out.println("Sta");
elseif(m==7)
System.out.println("Sun");
else
System.out.println("输入星期不存在");
//需求2:根据用于指定月份,打印该月份所属的季节
//3,4,5是春季,6,7,8是夏季,9,10,11是秋季,12,1,2是冬季
intn=1;
if(n==3|| n==4 || n==5)
System.out.println("春季");
elseif(n>=6 && n<=8)
System.out.println("夏季");
elseif(n==9 || n==10 || n==11)
System.out.println("秋季");
elseif(n==12 || n==1 || n==2)
System.out.println("冬季");
else
System.out.println("输入月份不存在");
}
}
1、if(条件表达式)
{
执行语句;
}
2、if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
If else 结构简写格式:变量=(条件表达式)?表达式1:表达式2;类似三元运算符。
三元运算符可以简化ifelse代码,但是,因为是一个运算符,所以运算完必须要有一个结果。也就是三元运算符中的表达式不可是直接输出的语句而if else却可以。
3、if(条件表达式)
{
执行语句;
}
else if(条件表达式)
{
执行语句;
}
……….
else
{
执行语句;
}
该语句是一个整体,有一个满足就不再向下判断。比如写个小日历,很适用。
选择结构:switch语句(例Day25.java),default语句和case语句写的位置不分先后,但还是先执行case,即使值和case或default中的语句匹配,但没遇到break或大括号,就仍然执行下面的语句,直到遇到break或大括号为止。
Day25.java
class Day25
{
publicstatic void main(String[] args)
{
//需求1:根据用户定义的数值不同,打印对应的星期英文
intx=4;
switch(x)
{
default:
System.out.println("输入值不存在");
//break;
case1:
System.out.println("a");
//break;
case2:
System.out.println("b");
break;
case3:
System.out.println("c");
//break;
}
intm=4,n=5;
charch='+';
switch(ch)
{
case'+':
System.out.println(m+n);
break;
case'-':
System.out.println(n-m);
break;
case'*':
System.out.println(n*m);
break;
case'/':
System.out.println(n/m);
break;
default:
System.out.println("错误");
break;
}
}
}
格式: switch(表达式)
{
case取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
……
default;
执行语句;
break;
}
if和switch语句很相似:区分如下
如果判断的具体数值不多的情况,而且是符合byte,short ,int,char类型的,选用switch语句效率高。其他情况:对区间判断,对结果为boolean类型判断,使用if语句更广泛。