Java基础知识--常量、变量、运算符、循环、数组

一、常量


1、什么是常量


  指在程序的运行过程中,其值是不会发生改变的量。


2、常量有哪些分类


       A、 字面值常量


整数常量:3,2,-3


                    小数常量:1.2,-323.2


                    字符常量:'A'


                    字符串常量:"HelloWorld"


                    布尔常量:true 和 false


                    空常量:null


自定义常量


                  类 (class)、接口( interface )、数组 ([])


        3、常量的使用


           

//语句输出字符串常量
 System.out.println("hello Java");
 //整数常量
 System.out.println(123);
 //小数常量
 System.out.println(12.345);
 //字符常量
System.out.println('a');
 //布尔型常量
System.out.println(true);
 //空常量
System.out.println(null);


  4、常见问题及注意事项


           //这是错误的。如果想表示ab,用字符串常量。


            System.out.println('ab');


          常量常见问题:1.把字符串当作字符输出


          注意:想要表示多个字符时,必须使用字符串常量,否则编译报错.


              

二、进制



     1、什么是进制



            进制:就是进位制,是人们规定的一种进位方法。



             对于任何一种进制,其形式都是 X进制逢X进1。



             例如:二进制就是逢2进1,八进制就是逢8进1,十进制就是逢10进1,十六进制就是逢16进1.



              二进制:由数字 0 和 1 组成 。(用0b开头表示。如:0b0110)



              八进制:由 数字 1-7组成。       (用0开头表示。如:025)



              十进制:由数字0-9组成。        (十进制没有任何表示)



              十六进制:由数字0-9,(9以后用字母)A-F表示。(用0x表示。如:0x1111)



  



     2、进制的转换



           A、 .其他进制转十进制



               转换规律:



                              系数:表示每一位上的数据。



                              基数:n进制,n就表示基数。



                              权:数据从右往左开始从0编号,这个编号就是指定位置的数据权。



                结果:     



                              系数*基数^(权次幂)相加  例如:666 = 6*10^2+6*10^1+6*10^0



             B、十进制转其他进制



                  转换规律:除基取余,直到商为0,余数反转。



             C、进制快速转换



                         8 4 2 1码 规则:一位八进制 = 3位二进制



                                                 一位十六进制 = 4位二进制



                         例如:0000-0000 0000-0000 0000-0000 1    1   1    1    1  1  1   1



                                                                                    128 64  32  16  8  4  2   1



                              60 = 32 + 16 +4 +8 等于 111100



      



          3、有符号的数据



                    有符号数据的表示法:原码、反码、补码,数据是有正负之分的。



                        在计算机中所有的数据都是以补码的形式存在。



               例如:



                         数据 7和 -7



               原码:是指有符号数据的最基本表现形式。最高位是符号位,其他位是数据位。



                         0表示正,1表示负。



               7的原码:



                            0       0000111



               -7的原码:



                             1      0000111



                反码:正数的反码和原码相同,负数的反码和原码不同,规则是:



                          除去符号位不变,其他数值位取反,0变1,1变0.



                 7的反码:



                            0       0000111



               -7的反码:



                             1      1111000



                补码:正数的补码和原码相同,负数的补码和原码不同, 规则是:反码+1.



                  7的补码:



                            0       0000111



               -7的补码:



                             1      1111001




三、变量



       1、什么是变量



           他是内存中的一个存储空间,在程序运行过程中,其值在 指定范围内 可以改变的量。



          2、变量的命名规范


                   如果变量由一个单词组成,首字母小写,如果有多个单词组成,第一个首字母小写,其他的

              首字母大写,要做到见名之意。



          3、格式-声明变量


                     格式1:数据类型  变量名= 初始化值;

                                   int     num  = 0;



                            格式 2 :数据类型  变量名 ; 



                                    byte a ;



                           变量名 = 初始化值; 



                                  a = 1;



          格式3:数据类型  变量名1 = 初始化值,变量名2 = 初始化值,..;



int          x    =    2          double  = 5.23;



 



                    格式4:数据类型  变量名1,变量名2;



                                   char   b        ,   c      ;



                                             



                             变量名1 = 初始化值;



                                  char  = 'A ' ;



                             变量名2 =  初始化值;



                                   char  = 'a'  ;



          4、  注意事项


                     在一个{}内,不能存在重名的变量;

                 变量要先初始化再使用(在使用之前初始化即可)

                 为某一个变量赋值的时候尽量不要超过其能表示的范围

                 变量名称的定义要见名之意,不要写一写容易混淆的



                 定义long类型或者单精度浮点型变量的时候,一定要在数据的后面+l或者+f




四、数据类型



           1、分类   


                        (四类八种)


                          整型 byte short int long

                          浮点型float double

                          字符型char



                          布尔型 boolean



byte  的范围:-128 ——127



byte 1, short 2, int 4, long, 8, float 4, double 8



              2、注意事项

                          整数默认是int,所以long类型后面加L或l

                          浮点数默认是double类型,所以float类型需要加f或F

              3、数据类型转换



                          1、隐式转换:直接赋值





                                    btye short char  在运算过程中自动提升为 int(直接赋值运算除外)





btye short char ->int - >long -> float ->double



                            2、强制转换



                                    (数据类型) 数据或变量名

             4、练习题



byte b1 = 1;
 byte b2 = 1;
 byte b3 = b1 + b2;//(byte)(b1 + b2);
 byte b4 = 1+1;
 //第四行报错还是第三行报错,为什么 
第三行会报错,有运算变量加变量会自动为int类型,所以必须强制类型转换


 


五、算术运算符


          1、分类   


                        +, - , * , /, %,++,--

2、补充说明



                      +: 加法运算,字符串连接,如果做字符串连接符,会按照从左往右按照运算符



                             的规则计算直到遇到字符串就变成字符串连接符了



                      /:     如果想要结果为负数,那么/中至少有一个是负数

                     %:  如果想要结果为负数,那么左边必须是负数

                      ++:

int num = 1;

                              前自加: ++num;

                                                前自加的值是加之后的值

                              后自加:num++

                                                后自加的值是加之前的值



System.out.println(num++ == ++ num);






num++;只有这种情况才是里存在的



        3、举例:



//看区别
         int a = 10;
         int b = 20;
         boolean b1 = (a++ > 10);//false
         boolean b1 = (++a > 10);
         //如果++在前面,先把a变化,后在与10进行比较。
         //如果++在后面,先与10进行比较,然后a变化。


六、赋值运算符


           1、分类                      


                       =,+= ,-=,%=,*=,/=


2、重点



                         +=:  内含强制转换



                         //隐式转换


byte a = 10;

          int b = a;

          System.out.println(b);

          

          //强制类型转换
int i = 10;
          byte b2 = (byte)i;
          System.out.println(b2);


           比如:

short s = 2;



                          s += 3;//内部隐藏着强制转换类型



                          s    = s  + 2;//编译会报错,s  + 2会自动提升为int类型,  然后赋值给s,必须强制转换



                           等价于 s = (short)(s+3);



七、比较运算符和关系运算符



1、分类  



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



                                ==,!=,>,>=,<,<=



2、特点

                                  1、关系运算符的结果必须是boolean型

3、注意



别把== 写成 =  (千万不要把用等于号的地方,写出了"=",否则可能不是你想要的结果)





八、逻辑运算符


              逻辑运算符:


用于连接结果是布尔型表达式的运算。

                  1、分类



                       &,|,!,^,&&,||

详细说明

                      &:有假则假

                      |:有真则真

                      !:真则假,假则真

                      ^:相同为假,不同为真

               3.单&、| 和 &&、|| 的区别:

                     &&:短路与:如果左边为false,右边不执行

                      ||:短路或如果左边为true,右边不执行



                           开发中常用&&,||,!



class  OperatorDemo
{
	public static void main(String[] args) 
	{
		//&& 短路与
          System.out.println(x>3 && y>4);//true & true -- true
          System.out.println(x>3 && y<4);//true & false -- false
          System.out.println(x<3 && y>4);//false & true -- false
          System.out.println(x<3 && y<4);//false & false -- false
          System.out.println("*******");

          //|| 短路或
          System.out.println(x>3 || y>4);//true & true -- true
          System.out.println(x>3 || y<4);//true & false -- true
          System.out.println(x<3 || y>4);//false & true -- true
          System.out.println(x<3 || y<4);//false & false -- false

	}
}



4、经验


            一般情况在开发过程中用的最多的是:++,(),&&,||,!,



九、位运算符


位运算符:是针对二进制数据的运算。

     &     按位与

     |     按位或

     ^     按位异或

     ~     按位取反

     <<     左移     左边的高位舍弃,右边空出的部分补齐0。

     >>     右移     如果最高位是0,左边被移空的位就填入0;如果最高位是1,左边被移空的位就填入1

     >>>     无符号右移 无论最高位是1还是0,左边被移空的高位都填入0

 

     向左移动或者向右移动,其实就是把数据增大或者缩小2的指定次幂。

     向左移动,数越移越大,向右移,数越移越小。

1、注意:


^:一个数据对同一个数据^两次,结果还是数据本身

            举例: a ^ b ^ b = a;

举例: 


class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; System.out.println(a & b);//运行结果是 0 System.out.println(a | b);//运行结果是 7 System.out.println(a ^ b);//运行结果是 7 System.out.println(~b);//运行结果是 -5 System.out.println(~a);//运行结果是 -4 System.out.println(~8);//运行结果是 -9 //左移 System.out.println(16<<2); //16*2^2 = 64 /* 16二进制: 00000000 00000000 00000000 00010000 向左移动两位: 00000000 00000000 00000000 00010000 (00)000000 00000000 00000000 0001000000 */ //右移 System.out.println(16>>2); //无符号右移 System.out.println(16>>>2); /*推理过程:a=3,b=4把十进制转成二进制a -- 00000000 00000000 00000000 00000011b -- 00000000 00000000 00000000 00000100 00000000 00000000 00000000 00000011 &00000000 00000000 00000000 00000100 ------------------------------------ 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011 |00000000 00000000 00000000 00000100 ------------------------------------ 00000000 00000000 00000000 00000111 00000000 00000000 00000000 00000011 ^00000000 00000000 00000000 00000100 ------------------------------------ 00000000 00000000 00000000 00000111 b: 00000000 00000000 00000000 00000100 ~ 按位取反,就是针对b这个二进制数据,所有的0变1,1变0。 补码 11111111 11111111 11111111 11111011 反码 11111111 11111111 11111111 11111010 原码 10000000 00000000 00000000 00000101*/ } }




十、流程控制语句:


       A、顺序结构  代码按照顺序从上往下执行。

       B、选择结构  根据以下选择或者判断做出不同的执行。

                 a.选择结构

                 b.判断结构

        C、循环结构  把某些事情做很多次。

              选择结构:if 语句体现。

格式1:

if(条件表达式)

     {  

               语句体;


       }

          执行顺序:

                根据条件表达式的返回值是true还是false决定程序的流程。

                如果是true,就执行语句体;

                如果是false,就什么都不做。

          注意:

                   A、条件表达式:无论条件表达式是简单还是复杂,结果必须是boolean类型.

                   B、if语句后面可以不写(),但是,如果这样的话,它就只能控制后面的一条语句

                        如果想控制多条语句,就必须加{ }。

                         推荐:无论是控制一条还是多条,都加上{ }.

                   C、在if语句的{ }前面不要写分号,否则,会对程序的结果产生影响。

                         一般而言:出现{ }的时候,就不会有分号,有分号的时候,不会有{}。

          作用域:

                         定义的变量的作用域,在它所属的那对{ }内有效。

if语句第二种格式:

if(条件表达式)

               {

                    语句体;

               }

               else  //否则的意思

               {

                     语句体2;

                }

if语句的第三种格式:

          if(条件表达式1)

          {

         

          }

          else if(条件表达式2)

          {

         

          }

          else if(条件表达式3)

          {

         

          }

          ...

          else

          {

         

          }

注意:

         A:else后面是不能直接跟条件表达式。

         B:最后的一个else可以不写,但是,一般建议加上。除非,你明确不需要。

         C:if语句的第三种格式,一旦某个地方满足,if语句就不往下执行了。

        

         案例:        

               定义x,y两个变量。

               如果x大于3,y=2*x

               如果x大于0小于等于3,y=5

               如果x小于等于0,y=10-2*x


class IfDemo3
{
     public static void main(String[] args)
     {
          //定义两个变量
          int x = 3;    
          int y = 0;
          //int y;
         
          //判断语句
          if(x > 3)
          {
               y = 2 * x;
          }
          else if(x>0 && x<=3)
          {
               y = 5;
          }
          else if(x <= 0)
          {
               y = 10 - 2 * x;
          }
          else
          {
               //y = 10;
               System.out.println("运算有问题");
          }

          System.out.println("y:"+y);
     }
}


3、注意事项

                   A、什么时候用哪一种if语句


       第一种格式在判断条件为一种情况下使用

       第二种格式在判断条件为两种情况下使用

     第三种格式在判断条件为多种情况下使用

 B、每一种if语句其实都是一个整体,如果有地方执行了,其他的就不执行了

C、如果if或者else里面控制的语句体是一条语句是可以省略大括号的,但是,如果是控制多条语句,必须加上大括号

     建议:永远写上大括号       

D 大括号和分号一般不同时出现

4、作用域

              所有变量的定义只在它所属的大括号内有效


条件运算符:(三元运算符)
          (条件表达式)?表达式1:表达式2;

          注意:条件表达式说明这里将来只能是结果为true或者false的表达式。

          执行顺序:
               如果条件表达式为true,就把表达式1作为结果。
               如果条件表达式为false,就把表达式2作为结果。

       举例:
          有三个数据,请找到最大值。
            int a = 20;
          int b = 40;
          int c = 30;

          方式1:
            int d = a>b?a:b;
          int e = d>c?d:c;

          方式2:
            int f = (a>b)?(a>c?a:c):(b>c?b:c);


2、switch语句


                switch的语句格式:


switch(表达式)

          {

               case 取值1:

                    执行语句;

                    break;

               case 取值2:

                    执行语句;

                    break;

               ...

               default:

                    执行语句;

                    break;

          }

 

          解释:

               switch:知道这里使用的是switch语句

                               表达式: byte,short,int,char

                               JDK5以后,可以是枚举。(就业班讲)

              JDK7以后,可以是String类型。

     case 取值1:

     case就是表示这是一个选项,取值1就是这个选项的值。

      break:

      switch语句遇到break就结束了。

     default:

     就相当于if语句的else。当所有的取值都不匹配的时候,就执行default的内容。

     执行流程:

               从上往下,用表达式的值去和case后面的值进行匹配,如果有匹配的,就去执行该case

               所包含的语句。如果没有匹配的,就会去执行default里面的内容。




class SwitchDemo
{
     public static void main(String[] args)
     {
          //根据给定的一个数据(1-7),请输出对应的星期日期。
          int week = 3;

          week = 13;

          switch(week)
          {
               case 1:
                    System.out.println("星期一");    
                    break;
               case 2:
                    System.out.println("星期二");    
                    break;
               case 3:
                    System.out.println("星期三");    
                    break;
               case 4:
                    System.out.println("星期四");    
                    break;
               case 5:
                    System.out.println("星期五");    
                    break;
               case 6:
                    System.out.println("星期六");    
                    break;
               case 7:
                    System.out.println("星期日");    
                    break;
               default:
                    System.out.println("日期输入有误");
                    break;

           }
     }
}


注意事项:

        

   A:default可以省略吗?可以。

            但是,一般不省略,它相当于if的else语句,可以控制所有的非正常情况。


            假如你非常明确可以省略,那就省略。


         B:break可以省略吗?


               放在最后面的default的break是可以省略的。


               放在case语句中的break是可以省略的,但是可能结果有问题。


               所以,一般不省略。


          C:default可以不放在最后面吗?


               可以,但是一般都放在最后面。


          D:switch语句什么时候结束吗?


               遇到break或者执行到switch语句的末尾。



    


3、循环结构while、do...while、for


           1、while循环格式


                A、 初始化条件 ;


                              while(判断条件)

    {            循环体;            控制条件;     }

//while循环的使用int y = 0;          while(y<5)          {               System.out.println("我爱Java");               y++;          }          System.out.println(y);  B、 执行流程

                                           A:先执行初始化表达式。

                                      B:执行判断条件。

                                      C:根据判断条件的返回值

                                         如果true,执行循环体。

                                         如果false,for循环结束。


                                      D:执行控制条件,接着返回


                2、do......while循环格式    


A、初始化条件;           do {                循环体;                控制条件;           }while(判断条件); int x = 0;
            //先执行后判断,至少执行一次操作
            do
          {
               System.out.println("我爱Java");
               x++;
          }while(x<5);


          B、执行流程


                                        A 先执行语句体和控制条件

                                        B 执行判断条件

                                        C 根据返回值        

                                          如果是true,继续执行循环体和控制条件

                                           如果是false,就结束循环

     3 、for 循环
                           A、 格式
                                     for( 初始化条件 ; 判断条件 ; 控制条件 ){
                                            语句体 ;
                                     }
                    B、 执行流程
                                     A: 先执行初始化表达式。
                                      B: 执行判断条件。
                                      C: 根据判断条件的返回值
                                                如果 true, 执行循环体。
                                                如果 false,for 循环结束。
                                      D: 执行控制条件 , 接着返回 B 。
                   B、初始化条件只执行一次,判断条件比控制条件肯定多执行一次

4、while、do...while和的for 联系与区别

A、while与for循环区别

1、如果for循环的初始化条件定义到for循环里,在for循环执行完以后不能使用,比如

for(int i=0;;){ }//当循环执行完以后i变量不可使用
                                        而while循环肯定是可以使用的
                                        那什么情况下for循环的初始化条件在执行完毕后还可以使用?
int num =0 ;
                                             for(; num<10; num++){}

                 for循环中的三个条件可以都不写,或者某个不写。

          B、   如果循环次数明确,则用for


                      如果循环次数不明确,用while




C、 do...while与while循环的区别


                        while是满足条件就执行,do...while是无论是否满足条件至少执行一次


 


do..while循环至少执行一次,而while循环可能一次都不执行


               D、注意:


                         for 循环和 while 循环是可以等价的


而do…while循环至少执行一次循环体


5、for嵌套循环


                 嵌套语句:语句中包含语句(for循环里还有for循环)


               



                    外循环控制行,内循环控制列






                         //外循环控制行



                          for(int i=0; i<10; i++)



     {           //内循环控制列          for(int j=0; j<=i; j++)           {                System.out.print("*");           }
          System.out.println();
     }


6.  break 和continue



       break:表示 结束当前循环,跳出循环不在继续

    break常用于switch语句中

    continue :结束本次循环,循环进入下一次

     开发过程中如果要使用break或者continue,一般在前面我们都要加一个判断

     break 和continue后面不能写语句,一般配合if语句使用

举例:


continue:
	  //定义一个求和变量
int sum = 0;
          //循环遍历
          for (int x =1;x<=10 ;x++ )
          {
               //如果是偶数就继续循环遍历
               if (num%2==0)
               {
                    continue;
               }
              
               sum +=x;
               //打印输出奇数和
               System.out.println(num);
          }          break: //定义星期变量          int  week = 5;
          //switch判断条件,匹配上程序遇到break就输出停止,不匹配则继续执行下一语句
          switch (week)
          {
               case 1:
                         System.out.println("今天是星期一");
                         break;
               case 2:
                         System.out.println("今天是星期二");
                         break;                   
               case 3:
                         System.out.println("今天是星期三");
                         break;                        
               case 4:
                         System.out.println("今天是星期四");
                         break;                        
               case 5:
                         System.out.println("今天是星期五");
                         break;                        
               case 6:
                         System.out.println("今天是星期六");
                         break;                        
               case 7:
                         System.out.println("今天是星期天");
                         break;                   
               default:
                         System.out.println("星期有误!");
                         break;
}


十一、函数


1、什么是函数
          定义在类中,并有特定功能的一小段程序。
 2、 格式
           修饰符 返回类型 函数名(参数类型 形式参数,...){
                       函数体;
                        return 返回值;
         }
        解释:

: public static

 :就是数据类型

:见名知意,如果一个单词,首字母小写,如果多个单词组成,从第二个单词开始首字母大写

                         D、参数类型 :数据类型

                         E、形式参数 :接受实际参数的变量

                         F、实际参数 :就是实际参与运算的变量

                         G、函数体:实现功能的代码

,如果没有明确返回值可以不写
                         I、return 返回值 ,那里调用程序,return就把结果返回到哪里 比如 int num = max(1,2);return把结果返给num

3、特点
              A、 函数和函数是平级关系,且只能定义在类中,不能在函数中嵌套函数
  B、 函数只有被调用才会执行
4、注意
               无论函数的返回值是具体的数据类型还是void,函数都是以return语句结束的
5、函数的调用
              A 有明确返回值函数的调用

                            单独调用//没有意义

                         输出调用//视频中老师用的最多的

                         赋值调用//开发中用的最多的

               B  没有明确返回值函数的调用
                    单独调用

6、函数的重载-overload(掌握)
      重载:在同一个类中,函数名相同,参数列表不同(参数类型和个数),与返回值类型无关。

举例:

class Demo{

 


public static void print(int x, int y);



public static void print(int a,int b,int c)



public static void print(double a);



public static void print(int a);


}

 7、案例   1、有明确返回值的案例         A、求两个数据的和

class FunctionDemo{  
	public static void main(String[] args) 
	{          
		int x = 2; 
		int y = 3;    
		System.out.println(getSum(x,y)); 
	}         
	public static int getSum(int x,int y){ 
		//方式一         
		//return x + y;
        //方式二   
		int sum = x + y;    
		return sum;   
	}
}

B、求两个数据的最大值B、求两个数据的最大值

class FunctionDemo{  
	public static void main(String[] args)    
	{          
		//定义两个变量并初始化    
		int a = 6;   
		int b = 5; 
		//定义一个变量获取最大值
		int max = getMax(a,b); 
		//控制台输出最大值  
		System.out.println("最大值是"+max);
		}
			/*获取两个数的最大值*/
			public static int getMax(int a,int b){ 
				//判断大小
				if (a>b)  
				{ 
				//返回最大值
				return a;
				} 
				else 
				{    
				//返回最大值 
				return b;
				}
		}
}

C、比较两个数是否相等

class FunctionDemo{
	public static void main(String[] args)
	{ 
		//定义两个变量并初始化
		int a = 6;
		int b = 6;
		//控制台输出结果
		System.out.println(compare(a,b));
	}
	/*比较两个数是否相等*/
	public static boolean compare(int a,int b){
		if (a==b)
		{
			System.out.println(a+"="+b+"相等");
			return true;
		} 
		else
		{  
			System.out.println(a+"!="+b+"不相等"); 
			return false;
		}
	}
}

 2、没有明确返回值的案例        A 矩形案例

class FunctionDemo{
	  public static void main(String[] args)
		{
		  //调用打印矩形方法
		  printRectangle();
	    }       
			
		/*打印矩形*/ 
		public static void printRectangle(){
			//外循环控制行数
			for (int i=0;i<5 ;i++ )
			{               
				//内循环控制列数
				for (int j=0;j<5 ;j++ )
				{
					//打印输出
					System.out.print("*");
				} 
				//控制换行
				System.out.println();
				}
		}
}

B nn乘法表  (99乘法表)

class PrintDemo{

           public static void main(String[] args)
			{          
			   //调用打印99乘法表方法
			   printRectangle();
			}         
		   /*打印99乘法*/
		public static void printRectangle(){
			//外循环控制行数
			for (int x=1;x<=9 ;x++ )
			{              
				//内循环控制列数
				for (int y=1;y<=x ;y++ )
				{   
					//打印输出 
					System.out.print(y+"*"+x+"="+x*y+"  ");
				} 
             //控制换行 
			 System.out.println();
			 }  
		}
}

 


十二、数组

     1、什么是数组


                  数组是存储多个同一类型数据元素的容器 (container)


      2、数组有什么好处


                  数组中的元素会被自动从 0 开始编号,方便我们获取


      3、格式


                  A int[] arr =new int[2];// 念法 :int 类型的数组 arr


                  B int arr[] = new int[2];// 念法 :int  类型的 arr 数组 , 不推荐这么写 , 他和第一种格式其实一样的
                           // 大括号内可以没有任何东西


                  D int[] arr = {3,4,65,4};// 大括号内可以没有任何东西


                  推荐使用 A D ,如果是给方法直接传递实际参数可以用 c


                    获取数组的长度:变量名.length;


       4、内存图


                  堆: 所有 new 出来的东西都在堆里


                    1、 每一个实体都有地址值


                    2、 每一个实体内的内容都有默认值


整数: 0

浮点数: 0.0

字符:  ’\u0000’  //char c = ‘\u0000’;

布尔 :false


        5、数组操作


                     1、 数组遍历


                    2、 获取数组最值


                    3、 数组查找:给定一个值,查找该值在数组中对应的索引


      6 、常见问题


                  A  数组越界异常: ArrayIndexOutOfBoundsException


                         你访问了不存在的索引。


                  B 空指针异常: NullPointerException


                          一个实例 ( 对象 ) 已经不存在了,你还去访问它的内容


         2、二维数组


           1、什么是二维数组


                    二维数组其实就是一个元素为一维数组的数组(也就是数组中还有数组)


  2、二维数组的格式


                     A、格式1:


                                        数据类型[][]  变量名 = new  数据类型[m]n[];


                                        m: 表示这个二维数组有多少个一维数组


                                         n: 表示每一个一维数组的元素个数


                              举例:


                                        int[][] arr = new int[3][2];


                                        定义了一个二维数组arr


                                        这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]


                                        每一个一维数组有2个元素,可以通过arr[m][n]来获取


                                        表示获取第第m+1个一维数组的第n+1个元素


                        B、格式2:


                                         数据类型[][]  数组名 = new  数据类型[m][];


                                        m: 表示这个二维数组有多少个一维数组


                                        没有给出列数,说明列数不是固定的,可以是动态的


                                                   


                                举例:


                                        int[][] arr = new  int[3][];


                                        arr[0]    = new int[2];


                                        arr[1]    = new int[3];


                                        arr[2]    = new int[1];


                        C、格式3:


                                        数据类型[][]  变量名 = new int[][]{{元素...},{元素...},{元素...}};


                                        简化格式:


                                        数据类型[][]  变量名 ={{元素...},{元素...},{元素...}};


                                        int[][]  arr = {{1,2},{3,4,2},{5,6,7,8}};


例如:


class  ArrayTest
{
     public static void main(String[] args)
     {
          //定义二维数组方式1
          int[][] arr = new [3][2];

          //定义二维数组方式2
          int[][]  arr  = new [3][];

          //定义二维数组方式3
          int[][] arr  = {{1,2},{3,4},{5,6}};

          //给二维数组赋值
          arr[0][0] = 3;
          arr[2][1] = 5;

          //打印二维数组元素
          System.out.println(arr[0][0]);//二维数组中第1个一维数组中的第1个元素
          System.out.println(arr[0][1]);//二维数组中第1个一维数组中的第2个元素
          System.out.println(arr[1][1]);//二维数组中第2个一维数组中的第1个元素
          System.out.println(arr[1][2]);//二维数组中第2个一维数组中的第2个元素
          System.out.println(arr[2][1]);//二维数组中第3个一维数组中的第1个元素
          System.out.println(arr[2][2]);//二维数组中第3个一维数组中的第2个元素
     }
}


3、二维数组的使用


           1、数组遍历


            2、


     4、常见问题


           Java中的参数传递问题:


          1、基本类型:基本数据类型传递的是基本类型的数值,形式参数的改变对实际参数没有影响。


          2、引用类型:引用类型传递的是地址值,形式参数的改变直接影响实际参数


                    A   格式


int[][] arr = new int[6][3]



int[] [] arr= new int[2][]


int[][] arr = {{2,23},{33}}


                    B  老师的 案例


                         抽烟案例


class SmokeDemo
{
     public static void main(String[] args)
     {
          int[][] tiaoyan = new int[10][20];
         
          tiaoyan[9] = new int[2];
         

          for(int i=0; i<tiaoyan.length; i++)
          {
               int[] baoyan = tiaoyan[i];
               for(int j=0; j<baoyan.length; j++)
               {
                    System.out.println("正在抽第"+(i+1)+"盒烟中的第"+(j+1)+"根烟");
               }
          }
     }
}