黑马程序员——Java语言基础(一)

时间:2023-02-25 14:41:26

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

    对于Java初学者,学好Java语言基础是非常重要的,这将影响将来编程的代码质量与效率。那么Java语言基础内容包括哪些呢?Java基础内容只要包括关键字、标示符、注释、常量和变量、运算符、语句、函数及数组。下面将通过Java的一个最基本入门程序来具体认识一下Java语言:

class MyFirstProgram //class表示类关键字,MyFirstProgram表示类的名称,该类作用范围为与class关键字并
{ //齐的一对{}

//整个表示为类的主函数,作用范围为一对{},其中public、static和void都表示关键字,main为主函数名称,
//String[]表示数组类型,args为数组的名称
public static void main(String[] args)
{
System.out.println("Hello World!");//输出语句,将指定的字符串打印到屏幕或dos窗口,这里打印的
//是Hello World!
}
}

    虽然这是个最基本的入门程序,但是对于初学者来说,还是存在很多疑问的,比如,关键字的作用是什么?为什么要定义一个类?等等。后面将通过对基础内容的不断学习逐渐解除这些疑问。

一、关键字

     1.什么是Java关键字?

      Java关键字是指被Java语言赋予了特殊意义的单词。

      2.Java关键字有什么特点?

      关键字单词的所有字母都是由小写字母构成。

      3.关键字的种类:

          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)用于包的关键字:package(包)、import(导入)。

          9)用于异常处理的关键字:try(异常检测)、catch(异常捕获)、finally(始终执行)、throw(抛出具体异常对象)、throws(异常声明)。

         10)其他修饰符关键字:native(本地)、strictfp(精确浮点)、transient(变量修饰符)、volatile(类型修饰符)、assert(断言)。

     4.问题思考

          1)关键字的作用是什么?

          ——赋予单词特殊的意义,不同的关键字具有不同的意义,使Java程序代码更加多样,功能变得模块化。

         

二、标示符

    1.什么是标示符?

      在程序中自定义的一些名称。

     2.标示符的构成:由26个英文字母大小写、数字(0-9)、符号(_$)组成。

     3.规则:

          1)数字不可以开头。

          2)不可以使用关键字。

     注意:严格区分大小写,尽量使用有意义的名称,提高阅读性。

     4.Java中的名称规范:

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

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

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

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

     5.问题思考

          1)为什么标示符不可以使用数字开头?


三、注释

    1.什么是注释?

      注释是指对Java程序代码的解释说明,以提高程序的阅读性。

     2.注释的目的:

          1)注解、说明、解释我们的程序,提高代码的阅读性。

          2)调试程序。例如程序出现错误,可以例如注释来查找出错的地方。

     3.注释方式:

     注释方法有三种,即单行注释、多行注释、文档注释。

          1)单行注释:符号为//,注释形式为://注释文字。

          2)多行注释:符号为/* */,注释形式为:/*-------中间可以有多行注释文字-------*/。

          注:多行注释不允许嵌套多行注释,否则会提高程序风险性。

          3)文档注释:符号为/** */,是Java特有的注释,通常书写在类、域、构造函数、方法、定义之前。注释内容可以被JDK中的工具javadoc.exe所解析,生        成一套以网页文件形式体现的该程序分说明文档,即API。注释形式为:

          /**

          作者:

          版本:

          作用:

          等

           */

           注:写代码应将自己的思想通过注释先整理出来,再用代码去体现,不要每行都加注释,也不要每行都不加注释。

   

四、常量与变量

    1.常量

          1)什么是常量?

           在Java程序中不能被改变的数值,就称为常量。

          2)常量的类型:

          整数常量:所有整数,java中有三种表现形式:十进制(0-9)、八进制(0-7,以0开头)、十六进制(0-9,A-F,用0x开头表示)。

          小数常量:所有小数。

          布尔型常量:true和false。

          字符常量:将一个数字、字母或者符号用单引号‘ ’标识。

          字符串常量:讲一个或者多个字符用双引号" "标识。

           null常量:null。

     2.变量

         1)什么是变量?

          在内存中的有一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。

         2)定义变量的目的:用来不断的存放同一类型的常量,并可以重复使用。

         3)变量的作用范围:一对大括号{}之间有效。

         4)变量的格式:数据类型 变量名=初始化值 ,如 int  a=1。

         5)数据类型的划分:

         数据类型分为基本数据类型和引用数据类型,详细分类如下图:

         黑马程序员——Java语言基础(一)

       其中,byte占1个字节,short占2个字节,int占4个字节,long占8个字节,float占4个字节,double占8个字节,char占2个字节(0-65535,无负数值),boolean占1个二进制位。long和float类型赋值示例:longa=14l;float b=3.2f。

       注:java程序中,整数默认是int,小数默认是double。一个汉字是由两个字节组成,因此可以将一个汉字加上双引号赋给char类型,如char a = ‘好’等。

       6)强制类型转换:

       什么是强制类型转换?

       当程序中,数据类型需要变换时,强制让一种数据类型变成另一种数据类型的方式。

       示例:

               int   a = 1;  //定义一个整型变量a,初始化值为5

               byte b=5;  //定义一个字节变量b,初始化值为0

               b=(byte)a;  //将整数类型a的值强制转换成字节类型赋值给b,该行即进行了强制类型转换    

       注:当赋值是一个数值时,如果数值不在该数据类型的范围之内,编译就会报错,如;byte b = 5,可以正常编译是因为5在byte型数据范围(-128~127)内,但是如果把5改成128,这时候就需要强转赋值。当赋值是一个带有变量的算式时,那么整个算式的数值就不确定了,如果不是同一类型数据,就必须进行强转赋值。

        7)类型的自动提升:

        在运算中,当低类型数据与高类型数据进行计算时,系统会自动将表达式中的低类型数据提升到高类型,即按类型中所占最多二进制位的数据类型进行提升。例如:             

                byte  a = 1 ;

                int b=2;

                b= b + 2;  //b会自动提升为int类型进行运算。

    3.进制(补充内容)

        1)什么是进制?

        进制也就是进位制,是人们规定的一种计数方式,可以用有限的数字符号代表所有的数值。

        2)常用的进制:

        二进制:0和1,满2进1,一个字节有八个二进制位。

        八进制:0-7,,满8进1,以0开头表示,三个二进制位表示一个八进制位。

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

        十六进制:0-9,A-F,满16进1,以0x表示开头,四个二进制位表示一个十六进制位。

        3)进制的基本转换:

       二进制转十进制:比如0110,那么其转换十进制的结果为0*2^3+1*2^2+1*2^1+0*2^0=6。

       十进制转二进制:将十进制数除以2反向取余即可得到,如9的二进制算法:

         黑马程序员——Java语言基础(一)

        注:反向取余,即从下往上写,那么结果是1001。

        八进制、十六进制与二进制互转:一个八进制位对应三个二进制位,一个十六进制为对应四个二进制位,如下图:

        黑马程序员——Java语言基础(一)

        八进制、十六进制与十进制换转:同二进制与十进制互转的方法一样,这里就不作详细介绍。

        负数二进制:只需将正数对应的二进制取反加1即可。如4的二进制为0000-0000 0000-0000 0000-00000000-0100,取反后加1的二进制为:1111-11111111-1111 1111-1111 1111-1100,即为-4。

       注:负数的最高位都为1。

        4)进制总结:

        对于十进制转任何进制都可以除以该进制的满位反向取余得到,任何进制转十进制同二进制转十进制同理,即将该进制的每一位乘以该进制满位的n次幂,n的大小等于该位后面所有的位数。对于负数二进制,从后面往前数第一个不为0的位数,保留和该位数的数值一致,从该位开始,之前的每一位都进行取反,即为负数的二进制。


五、运算符

    1.什么是运算符?

     运算符就是执行程序代码运算的符号,会针对一个以上操作数项目来进行运算。

     2.运算符的种类:

        1)算术运算符:

         黑马程序员——Java语言基础(一)

        注:字符串数据和任何数据使用 +都是相连接,最终都会变成字符串。进行取模运算时,运算的结果的符号与模数的符号相同,与被模数无关,如:-1%5=-1,而1%-5=1。

        2)赋值运算符:

        赋值运算符的符号有:= 、+= 、 -=、 *=、  /= 、 %= 。

        示例

                int a,b,c;  // 定义整数类型变量a、b、c

               a=b=c =3; //把整数3同时赋值给a、b、c

               short s=4; //定义短整型变量s

               s+=6;//将(s+6)赋给变量s,这里系统有自动强制类型转换动作

       注:对于+= 、 -=、 *=、  /= 、 %=进行赋值运算符时,自动完成了强制类型转换,编译器不出现报错,因此应注意数据类型及范围,如:

               byte a = 4;

               a+=14.56;

下面的示例中,该形式赋值不能用在初始化定义中,否则编译不通过

               byte a+=14.56;

        3)比较运算符:

         黑马程序员——Java语言基础(一)

        注:比较运算符的结果都是boolean型,也就是要么是true,要么是false。

         4)逻辑运算符:

         逻辑运算符用于连接boolean类型的表达式。

         黑马程序员——Java语言基础(一)


         &:只要两边的boolean表达式结果,有一个为false,那么结果就是false。只有两边都为true,结果为true。

          |:两边只要有一个为true,结果为true;只有两边都为false,结果为false。

          ^:运算符两边相同结果是false,两边不同结果是true,如ture^(异或)true为假,因为运算符两边相同,注意理解。

          &和&&的区别:

               单&时,左边无论真假,右边都进行运算。

               双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算,左右两边必须为条件表达式,否则编译不通过。

          “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

         5)位运算符:

 <<(左移):空位补0,被移除的高位丢弃,空缺位补0。

 >>(右移):被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。

 >>>(无符号右移):被移位二进制最高位无论是0或者是1,空缺位都用0补。

 &(与):二进制位进行&运算,只有1&1时结果是1,否则是0,如6&3=2,即换算成二进制进行于运算。

 |(或):二进制位进行 |运算,只有0 | 0时结果是0,否则是1,如6&5=7,即换算成二进制进行或运算。

 ^(异或):任何相同二进制位进行 ^运算,结果是0,如1^1=0, 0^0=0。不相同二进制位 ^运算结果是1,如1^0=1, 0^1=1。

 注意:7^4^4=7,因为4^4结果的二进制位全为0,再与7进行异或运算则等于其本身7,可用于加密。

 ~(反码):对二进制进行取反,如~6=-7。

 6)三元运算符:

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

 a.如果条件为true,运算后的结果是表达式1。

         b.如果条件为false,运算后的结果是表达式2。

         示例:获取两个数中小数。 

                 int a=1,b=3,temp;

                 temp = (a<b)?a:b;//temp变量存储的就是两个数的小数。

         三元运算符的利与弊:

            好处:可以简化if else代码。

            弊端:因为是一个运算符,所以运算完必须要有一个结果。

         7)运算符优先级:

 黑马程序员——Java语言基础(一)


六、语句

      1.什么是语句?

    语句是指程序构成的元素,这里代表程序流程控制。

     2.语句的结构类型:

     语句主要有3中结构:判断结构、选择结构和循环结构。

        1)判断结构(if)

         三种格式:           

                        a)  if(条件表达式)

                            {

                              执行语句;

                            }


                        b)  if(条件表达式)

                           {

                             执行语句;

                           }

                            else

                           {

                             执行语句;

                            }


                        c)  if(条件表达式)

                            {

                              执行语句;

                            }

                            else  if (条件表达式)

                           {

                             执行语句;

                            }

                           ……

                           else

                           {

                            执行语句;

                            }

         注:第二种格式与三元运算符的区别:三元运算符运算完必须要有值出现。

         语句特点:    

          a)每一种格式都是单条语句。

          b)条件表达式无论写成什么样子,最终的结果不是true就是 false。

          2)选择结构(switch)

          语句格式:                

                          switch(表达式)

                        {

                            case取值1:

                                  执行语句;

                                  break;

                            case取值2:

                                  执行语句;

                                  break;

                            …...

                           default:

                                 执行语句;

                                 break;

                        }

          语句特点:

          a)switch语句选择的类型只有四种:byte,short,int, char。JDK1.5以后可以接收枚举类型,JDK1.7以后可以接收字符串。

          b)case之间与default没有顺序。先执行第一个case,最后执行default,如果case里没有break语句,则不再判断,直接执行下面的代码,遇到结束break或结束标记停止。

          c)结束switch语句的两种情况:1、遇到break结束;2、执行到switch结尾结束。

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

          e)default 的位置可以任意,但是执行的时候是最后才执行,如果default在case语句前面,且default的语句里没有break结束,则执行完default后,不在判断case而直接执行下面的代码,直到遇到break或大括号结束。

         思考:if和switch语句很像,那么具体什么场景下,应用哪个语句呢?

           ——如果判断的具体数值不多,而且符合byte  short  int  char这四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。其他情况:对区间判断,对结果为boolean类型判断,使用if,因为if的使用范围更广。

         3)循环结构(while,do while,for)

         while语句格式:                    

                                while(条件表达式)

                              {

                                 执行语句;

                              }

         do while语句格式:                 

                              do

                            {

                             执行语句;

                             }while(条件表达式);

          for语句格式:              

                             w:  for(初始化表达式;循环条件表达式;循环后的操作表达式)

                                   {

                                      执行语句;

                                   }

          注:for格式中,其中a为标号,可以用break w或者continue w跳出和继续指定的循环体。

          while和do while的区别:while先判断条件,只有条件满足才执行循环体,而do while先执行循环体,再判断条件,条件满足,再继续执行循环体。

          语句特点:    

          a)for里面的多个表达式运行的顺序:初始化表达式最先读且只读一次,再判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复这个过程,直到条件不满足为止,条件表达式必须有真假,否则编译失败。

          b)while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用,如果变量只为循环的增量存在,用以控制循环的次数,则建议用for来体现,这样内存会相对优化一点。  

          c)最简单无限循环格式:while(true){ }, for( ; ; ){ },对于for来讲,不写条件表达式默认就是ture。无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。

          4)其他流程控制语句(break与continue)

          break(跳出)语句:应用于选择结构和循环结构。

          continue(继续)语句:应用于循环结构。

          注意事项:

          a)这两个语句离开应用范围,存在是没有意义的。

          b)这个两个语句单独存在时,下面都不可以有语句,因为执行不到。

          c)continue语句是结束本次循环继续下次循环。

          d)标号的出现,可以让这两个语句作用于指定的范围。只能用于循环结构。