2.java语法

2.1java的变量

.Java中的标识符的要求:
  1,只能是字母,数字,_,$
  2,数字不能作为标识符的开头。
  3,大小写敏感。
  4,没有长度限制。如:ArrayOutOfBoudleException
  5,标识符不能是关键字。


   一般来说,类的名字以大写字母开头。
   方法和变量的名字以小写字母开头。
   标识符的名字应当具有含义,如age, name


   表达式:1,由运算符和变量组成。2,都会有返回值。
   简单表达式:a/b;复合表达式:"a/b="+(a/b);


.对于任意一个变量只要定义都需要三部分的内容
   变量的类型    变量名称 = 变量的值 (变量的值必须和类型一致)


.变量的类型
  基本数据类型:4类8种
  1、整型-->byte(1)    short(2)    int(4)    long(8)    -->int(默认类型)
     定义long    long num = 12L;
  2、浮点类型--> float(4)    double(8)    --->double(默认类型)
     定义float    float f = 12.0f;
  3、布尔类型(boolean)--> true false
  4、字符类型(char)--->字符类型不是字符串使用的是' '(单引号)进行定义,而且只能有一个字符
     char c = 'a'; char cc = 'cc';//错误,只能有一个字符。Unicode(2个字节)


·变量的类型转换()
  1、小类型的值会自动转换为大类型的值 int a = 10    double b = 12.5    a+b-->double类型
  2、要把一个大类型的值存储到小类型中,需要进行强制类型转换,如果不转换,会编译出错
          强制类型转换的方式:(int)12.5--->就把12.5这个double类型转换为int类型了
3、当char、byte和short进行运算时会自动转换为int类型
     byte b1 = 12; byte b2 = 32;  b1+b2--->是int类型


·变量的作用域
  花括号内有效,在同一个作用域中不能重复定义变量


·定义变量的规定
  第一:关键字用来定义变量(_sdfhj_sd)int double = 10;
  第二:对于类而言,定义的名称的第一个字母用大写,对于函数或普通的变量而言,
        第一个字小写 之后遵循驼峰标识。
思考:

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1 运算结果是int 型,需要强制转换类型)
short s1 = 1; s1 +=1;(可以正确编译)

·引用类型变量(String)
    String 类提供了数值不可改变的字符串 String s=new String(“abc”);创建了两个对象
    1,在字符串池中创建一个对象(此对象是不能重复的)
    2,new出一个对象。Java运行环境有一个字符串池,由String类维护。
       执行语句String s="abc"时,首先查看字符串池中是否存在字符串"abc",如果存                  在则直接将"abc"赋给s,如果不存在则先在字符串池中新建一个字符串"abc",然后再将

       其赋给s。执行语句  String s=new String("abc")时,不管字符串池中存              
       在字符串"abc",直接新建一字符串"abc"
      (注意:新建的字符串"abc"不是在字符串池中),然后将其付给s。
      2,初始化 (局部变量而言,必须初始化才能使用)如:age=10;
      3,通过变量的名字对变量进行操作,如:age=other;

       赋值时,左=右


  1)数据性质是否一样。
  2)所占用的内存空间上考虑(左>右)不用类型转换。(左<右)要类型强制转换,
如:int age=1;

                 longl=10;

                 age=(int)l;

符号位:0代表正数,1代表负数。


思考:

String 和StringBuffer 的区别

JAVA 平台提供了两个类:String 和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer 类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。


2.2java运算符

2.2.1、+、-、*、/、%(算术运算符)
   2.2.2、逻辑运算符(>、<、>=、<=、==、!=)12>11-->true
   2.2.3、自增和自减

  注意:
      自增(++),自减(--)运算符。
      前++:++a;先对a+1,再返回a+1之后的值。
      后++:a++;先返回a的值,然后对a进行+1。
      前++,后++共同的特点:a本身的值都会+1;
      区别在于表达式的返回值是不一样;用返回值来参与计算

2.4三目运算符
      ? :-->(boolean express)? A : B;如:char ch=(5>2)?'Y':'N';
      ?前面的布尔表达式如果为真就执行A,否则执行B。
      (‘:‘左右两侧的返回类型要一致,且与ch的返回类型也一样)

2.3语句结构

      1,顺序

      2,条件(代码是否执行,依赖于一个特定的条件)

              if(boolean express){
                      XXXXXX;//如果布尔表达式为真就执行XXXXXX。
                      XXXXXX;
              }else{
                      XXXXXX;//如果布尔表达式为假就执行XXXXXX。
                      XXXXXX;
              }

      3,循环(相同的代码,被重复的执行多次)
              a,初始化循环条件。b,确定循环条件。c,确定循环变量在循环体中的变化。
              (1)a;
                      while(boolean express){
                              XXXXXXXXX;//如果布尔表达式为真就执行XXXXXX
                              XXXXXXXXX;
                              c;
                      }
              (2)for(a;b;c){

                  }
              (3)do{
                              XXXXXXXXXX;//循环体至少执行一次;
                              XXXXXXXXXX;
                  }while(boolean express);

                  while(XXX){
                              XXXXXX;
                              XXXXXX;
                              bread;//或者continue;
                              XXXXXX;

                  }
                  break :用在循环或分支里,用于退出整个循环或分支
                  continue :用在循环里,用于结束本次循环。接着开始下一次循环
              4,分支
                          switch(var){
                                  case 1 : XXXXXX;
                                  break;
                                  case 2 : xxxxxx;
                                  break;
                                  ........
                                  default : xxxxxxx;//default后面可以不用break;
                          }


  注意:

      var:是一个整数表达式。因此传递给 switch 和 case 语句的参数应该
      是int、short、char 或者byte。long,string 都不能作用于swtich。

2.4函数

      函数所做的事情,可以将一个过程进行封装,将来只要调用函数就会调用整个过程
      函数的基本要素
              返回值 函数名(函数参数){
                                            函数体;
                                        }
      函数(方法):是由一些相关代码组成的集合,目的是为了解决一个特定的问题,或者实现
      某个特定的功能。
      函数(方法)一定有一个自己的名字,通过函数的名字执行函数中的代码。

      2,在java中如何定义函数:
              a,声明:public static void printMenu(int a,double b){.....}
              b,编写函数体:
              如: public static void printMenu(int a,double b){
                              XXXXXXXXXXX;
                              XXXXXXXXXX;

                   }
              函数(方法)里面不允许再有其它的函数(方法),函数(方法)的位置必须                    是并列的。
      3,调用函数:

              通过函数名,如pirntMenu(a,b);
              public static void main(String argv[]){
                          XXXXXXXXXXXX;
                          printMenu(a,b);
                          XXXXXXXX;

              }

              调用者-原数据->函数
              return 作用:1,结束本方法。2,返回结果。
              一个函数返回的值只能有一个。

      值传递。传递的是实参的值,
      被调函数使用的数都是实参的拷贝。
      是否改变实参,要看被调函数的设计。




2.5数组

一,数组:一维数组-->:三种声明方式
      (1)首先要声明。如:int[] array;
      (2)申请内存空间如:array=new int[2];
       array代表数组array[]的首地址(引用:引用类似C++里的指针。);当参数传递时,只
       要用数组的首地址就可以。
          1,数组中的元素类型要一致。
          2,数组长度不能缺省,不能改变,但可以删了重建。
          3,内存空间连续,有索引下标值(从0开始,最大length-1)
        优缺点:查询快,增删慢(链表,查询慢,增删快)
        只要有new在,就要为变量分配内存。 array.length//表示数组array的长度。
        array存的是array数组首变量的地址。

  二,数组的显示初始化:int[] array={1,2,3,4,5,6};
  三,int[] array=new int[]{1,2,3,4,5,6,7};


  数组的拷贝:

          public static int[] expand(int[] a){
              int[] b=new int[a.length*2];
              /* for(int i=0;i<a.length;i++){
                      b[i]=a[i];
                  }
                  这段代码等于下面那条代码
              */
              // 从a数组下标为0的位置开始拷贝,到b数组下标为0 的位置开始粘贴。
              // a.length为粘贴的个数。(一般为a数组的长度)。
              System.arraycopy(a,0,b,0,a.length);
              return b;//返回扩展后的数组b。b是代表数组b的首地址。

          }


  二维数组(数组的数组)-->:三种声明方
  二维数组的第二个[]在声明时可以留空,如:int[][] array=new int[4][];
  //留空说明该二维数组的列是以行的数组下标为数组名,再成为新的数组。


  一,声明:int[][] array=new int[3][4];//声明一个三行四列的整型二维数组。
  二,int[][] array={{1,2,3},{2,3,4},{2,5,7},{2,3,6}};
  三,int[][] array=new int[][]{{1,2,3},{2,3,4},{2,5,7},{2,3,6}};

  1,找对象(客观存在的事物);
  2,利用对象的功能。就是让对象干点什么;
  3,对象的属性可以是其他对象。
  4,对象还可以通过调用其他对象的函数产生联系。
  5,简单的对象构成复杂的系统。

  有什么:属性-------》 实例变量
  做什么:方法-------》函数
  对象的属性可以是其他对象
  对象还可以通过调用其他对象的函数产生联系
  简单的对象构成复杂的系统

  思想:解决问题的过程,


  总纲(优势)

  1,符合人的思维过程。
  2,编写出来的代码比较合理。如:可扩展性,可维护性,可读性等等。(存在就是合理),(贴     近生活)
  3,弱耦合性,
  4,可扩展性
  5,可复用性。不要重复制造轮子。
  6,更尽所能,更施其职。