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语句更广泛。