首页 > 其他 > 详细

IT十八掌第三天课程总结

时间:2016-07-29 19:25:05      阅读:137      评论:0      收藏:0      [点我收藏+]

1、函数定义:

函数就是定义在类中的具有特定功能的一段独立的小程序。

2、函数的特点:

  • 可以将功能进行封装

  • 对该功能进行复用,

  • 函数只有被调用才会被执行

  • 函数的出现提高的代码的复用性

  • 对于函数没有具体返回值的情况,返回值类型用关键字void表示。那么该函数中的return语句如果在最后一行可以省略不写。

注意两点:

函数中只能调用函数,不可以在函数内部定义函数

定义函数时候,函数的结果应该返回给调用者,交由调用者处理。

函数的格式:

   修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)

   {

    执行语句;

    return 返回值;

   }

    返回值的数据类型是由函数运行后的结果决定的

    形参:是一个变量,用于存储函数调用时传递给函数的实际参数

    实际参数:传递给形式参数的具体数值

    return:用于结束函数

    返回值 : 该函数运算后的结果,该结果会返回给调用者。

对于函数没有具体返回值的情况,返回值类型使用关键字void表示, 如果该函数中的return语句如果在最后一行可以省略不写。

注意:

    函数中只能调用函数,不可以再函数内部定义函数。

    定义函数时,函数的结果应该返回给调用者,交给调用者处理。

  函数在应用时需要明确

    定义的函数最后的结果是什么

    明确定义该功能的过程中,是否需要未知内容参与运算


定义一个函数实现两个整数相加

 class FunctionTest {

    public static void main(String [] args){

        System.out.println(Sum(2,3));

 

 }

  public static int Sum(int a , int b){          

    return a+b;

  }

}

 此函数可以实现对Sum的调用


函数的重载

   在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可

   特点:

   与返回值无关,只看参数列表

   class FunctionTest {

    public static void main(String [] args){

        System.out.println(Sum(2,3));

        System.out.println(Sum(2,3,4));

 

 }

  public static int Sum(int a , int b){  //定义两个参数

    return a+b;

  }

  public static int Sum(int a, int b, int c){  //定义三个参数可以

   return a+b+c;

  }

}



数组定义:同一种类型数据的集合,其实数组就是一个容器。

数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

格式:

   格式1

  元素类型[] 数组名 = new 元素类型 [元素个数或者数组长度]

  例:

  int [] arr =new int [6] //表示的是 该元素为 int型, 元素的长度为6 (结果为有7个元素,因为从0开始)

  格式2

  元素类型[]     数组名 = new [] { 元素,元素……};

  例:

  int [] arr =new int []{1,2,3};

  int [] arr= {3,5,7,9};

class ArrayDemo {

    public static void main(String[] args) {

        int[] arr=new int [6];

        int[] arr2=new int[]{1,2,3};

        int [] arr3= {3,5,7,9};

        System.out.println(arr.length);  // 打印数组长度  arr.length是默认的属性  

        System.out.println(arr2.length);

        System.out.println(arr3.length); 

    }

}

 数组在内存中的形式

      数组在内存中是连续的

      下表从0开始  //访问数组的某个数字时 可以使用arr(下标) 来实现 如[1,2,3,4]  arr[0] 即表示该数组的第一个数1.

      //数组的长度为 arr[length] 数组中的最大值为arr[length-1] 

      数组中无arr[length]这个数字,如果访问的话会报错  //ArraIndexOutOfBoundException :数组越界异常 

内存结构:

java程序在运行时,需要在内存中分配空间,为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈内存:

用于存储局部变量,当数据使用完后,所占空间会自动释放。

多线程:是指有若干段代码段同时并发运行,每个代码段都有自己的局部变量。

所谓的栈就是方法栈,方法栈对应的是线程,所以任何一个java程序都有对应的一个线程。就是主线程,就是main函数对应的线程。栈的数量就取决于并发执行线程的数量。每个线程就是一个栈。变量都存在方法中,方法调用的顺序。

压栈:

弹栈:

方法针:merthod frame


堆内存:(所有的对象都放在堆里面,相当于是堆是共享的)

java中一切都是对象,所有的对象都在堆当中,如果堆设置过小,对象会放不下去。

指针:java中没有指针,但是指的是没有显示的指针操作。(引用就是指针)

*d=&

NullPointerException是运行时异常(RuntimeException)

列示一句代码分解:

int[] arr = new int[5] ;

1、定义一个变量为int[] arr

2、new 是开辟空间,分配一段连续的内存。

3、把它们关联起来

总结:因此arr不叫对象,叫做引用或者指针。

如果arr=null     //null 可以当成对象。就是在堆区里,‘=’是赋值的意思,就相当于赋值到空对象里

(因此对象被当成垃圾回收的前提条件是,当没有指针直接或者间接的到达它的话,它就被当成垃圾对象被回收。)


 数组在内存中的形式

      数组在内存中是连续的

      下标从0开始  //访问数组的某个数字时 可以使用arr(下标) 来实现 如[1,2,3,4]  arr[0] 即表示该数组的下标识,意思访问的是第0个元素,下标的最大值是arr[length-1]。new arr[0]表示的是各数。

      //数组的长度为 arr[length] 数组中的最大值为arr[length-1] 

      数组中无arr[length]这个数字,如果访问的话会报错  //ArraIndexOutOfBoundException :数组越界异常 


课堂练习:

(1)取数组中的最大值,然后在main函数中传递数组。得出它的最大值。

1、先封装一个方法

2、找最大值,返回值应该是int

class ArrMax{

public static void main(String[] x){

        System.out.println(getMax(new int[0]));

    }   

  pubilce static int getMax(int [] arr){

     int  temp = arr [0];

     for(int i=0; i<arr.length; i ++){

        if(temp < arr[i]){

             temp = arr;

}

}

    return temp;

}

}




(2)定义一个函数,从数组中查询指定的元素首次出现的位置。

(3)定义函数,完成冒泡排序,完成冒泡下沉。


数组常见操作:


1、或许最大值(最大值、最小值)

2、排序(选择排序、冒泡排序)

3、折半查找(二分查找) 折半查找 数据要有序

 堆:heap 

  ---------------

       object heap

    //数组处在堆区   

    // new建立的实例都处在堆内存中

    //因为所有的对象都处在堆区中,所以如果堆设置的过小会放不下对象出现堆栈溢出(一般是栈溢出)

    heap overflow 堆溢出

    stack overflow 栈溢出

 

  栈 stack

  ----------------

        方法栈

    方法栈至少对应一个线程(主线程main函数所在的线程)

    栈中每一个方法叫做 一个方法帧 method frame 

    push  stack : 压栈

    pop   stack :弹栈

    java没有指针是指没有现实的指针操作。引用就是指针(变量的名称)

    NullPointerException 是空指针异常(RuntimeException)//arr []=null;  属于运行时异常

 内存结构:

java程序在运行时,需要在内存中分配空间,为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。


栈内存:

用于存储局部变量,当数据使用完后,所占空间会自动释放。

多线程:是指有若干段代码段同时并发运行,每个代码段都有自己的局部变量。

所谓的栈就是方法栈,方法栈对应的是线程,所以任何一个java程序都有对应的一个线程。就是主线程,就是main函数对应的线程。栈的数量就取决于并发执行线程的数量。每个线程就是一个栈。变量都存在方法中,方法调用的顺序。


练习;取数组中的最大值,并封装

 class  ArrayMax{        //类的名称一定要和文件编译后的名称一样,否则运行会报错。

    public static void main(String[] args) {    

        System.out.println(getMax(new int []{2,5,21,5,7}));

         

    }

  public static int getMax (int [] arr){

     //从健壮性考虑,应该考虑到arr==null和arr.length 长度为0。 

         if (arr == null|| arr.length==0){  //短路与先判断大的再判断小的

             System.out.println("数组不存在");

                 return -1;   //当为这两种情况时,提示错误,并返回一个-1的结果。

         }

        int temp =Integer.MIN_VALUE;  //Integer.MIN_VALUE是整数型数字的最小值

        for (int i=0; i < arr.length ; i++ ){

            if (temp < arr[i]){

             temp = arr[i] ;

             }

            }

            return temp;

      }

   

  }

 Integer.MIN_VALUE 是int类型的包装类,integer 对应了整型值的最大值和最小值。

 

如果求数组中的最小值,之需要将Temp =Integer.MIN_MALUE换成---> Temp =Integer.MAX.MALUE, temp<arr(i)-->temp>arr(i)即可

 

对数组进行排序  (从小到大) 思想  迭代数组元素--查找最小值和最小值对应的角标--置换位置--返回数组--封装--调用

 

class  ArraySelectSort{

    public static void main(String[] args) 

    {

        outArr(sort(new int []{2,1,6,4,9})); //调用数组

    }

 

   public static int[] sort(int[] arr){

      if (arr == null|| arr.length == 0){           //排除为null和长度为0的情况

             System.out.println("数组不存在");

                 

      }

      //判断该数字往后的数字中的最小值

     

      for (int i =0;i < arr.length ;i++ ){ //遍历数组中的所有数字

           int aa=Integer.MAX_VALUE;

           int index = 0 ;     //定义角标的初始变量为0

          for (int j= i + 1;j < arr.length;j++ ) {//遍历arr[i]数字后面的所有数字,求其中的最小值

              if ( aa > arr [j]){

                  aa = arr [j]; //将较小的值赋值给Temp 

                  index = j ;  //获取较小值的角标

                //  System.out.println(aa) ;

              }

             }

             //选出后面数字中的较小值时,如果比自身小,则调换位置

            if (arr[i]>aa){    

            arr[index] = arr[i];  // 将arr[i]这个较大值赋值为arr[index],这里arr[index]充当一个中间量,此时arr[]为空

            arr[i] =aa ; //然后将aa 赋值给已经是空值的arr[i]   实现两个数字的互换位置。

             }

      }

        return arr; //返回arr 数组

  }

   public static void outArr (int [] arr){  //封装outArr 方法

     for (int i = 0; i < arr.length ;i++ ){

          System.out.print(arr[i]+" ");  //打印 arr[i]这个数组

 

     }

   }

 

}


使用大数下沉的方式 进行冒泡排序

class  BubbleSort{

    public static void main(String[] args) {

        outArr(bubble(new int[]{ 3,6,8,2,1,5,9}));

    }

    public static int[] bubble (int [] arr) {  //定义函数数组

         //大数下沉的方式

       for (int i = 0;i < arr.length - 1 ;i++ ){  //外层循环次数 为arr.length-1

          for (int j = 0;j < arr.length - 1 - i ;j++ ){      //n内层循环次数为 arr.length-1-i

             int temp= 0;  //定义一个临时变量 用来接收数据

             //数据的对调(因为是大数下沉的方式)

             if(arr[j]>arr[j+1]){

             

             temp = arr[j];

             arr[j]=arr[j+1];

             arr[j+1]=temp;

            }

        }

    }

 

          return arr;  //返回数组

  }

     public static void outArr(int [] arr){   //封装方法

      for (int i=0 ;i<arr.length ;i++ ){

 

          System.out.print(arr[i]+" ");

      }

 

     }

 

}


打印倒置的二维数组

class MultiArray {

    public static void main(String[] args) {

 

        int [][] arr= new int[4][3];  //定义二维数组arr[4][3]

 

        int a= 12; //定义一个数字从12开始

        for (int i = 0;i<arr.length ;i++ ){   //定义外层函数 (有几个二维数组)

            for (int j = 0;j<3 ;j++ ){  //定义内层函数(每个数组中有多少个元素)

                arr [i][j] = a;  //对第i行第j个元素赋值

                a--;  //自减1  

 

            }

 

        }

        outArr(arr);   //调用

         

    }

 

    public static void outArr(int [][] arr){ //定义outArr 函数

         for (int i = 0;i <arr.length ;i++ ){  

             for (int j=0 ;j< 3 ;j++ ){

                 System.out.print(arr[i][j]+"\t"); //打印arr[i][j]的数值

             }

                System.out.println();

         }

    }

}


打印一个三阶魔方

class  MultiArray{

    public static void main(String[] args) {

    int[][][] arr = new int[3][3][3];   //定义一个三维数组

    int aa= 0; 

    // 对三维数组中的每一个元素赋值。

    for (int i = 0;i < arr.length ;i++ ){    //定义魔方的层数

       for (int j = 0;j < arr[i].length ;j++ ){ //定义魔方的行数 ,J的取值最大是arr[i].length,因为arr[i]在三维数组中也是一个数组所以有值

           for(int q = 0;q < arr[i][j].length;q++){//定义[i][j]即第几层第一行的魔方列数

               arr[i][j][q]= aa ;  //将aa变量赋值给[i][j][q]这个元素.

                aa++; //变量自增1

              

           }

       }

 

    }

     outArray(arr); //输出数组

}


定义输出数组元素

public static void outArray(int[][][] arr){  

    for (int i = 0; i < arr.length ;i++ ){

         for (int j = 0;j < arr[i].length ;j++ ){

            for(int q  =0;q < arr[i][j].length;q++){

     System.out.print(arr[i][j][q]+"\t");  // 打印arr[i][j][q]元素的值,并增加一个空格  不换行

              

           }

                   System.out.println();  //当输出完一行自动换行

       }

                 System.out.println("********************");//当输出完一列后   打印分割线

    }

        

 }

 

}





面向对象:oop

最典型的面向过程编程是C语言。面向过程编程就是面向方法编程,把所有的机制封装成方法,c语言是方法调用方法。

面向对象编程

class 类,类是对象的抽象。对现实世界的事物的软件抽象。

object 对象 , 对象的类的实例  , new+类名

instance 实例,实例就是对象。

面向对象的特征:

1、封装

2、继承

3、多态

类的属性也叫成员变量

类的方法也叫成员函数

成员变量有默认的初始值。

局部变量没有默认的初始值。

构造函数特点:

1、没有返回值

2、函数名和类名相同

3、默认的构造函数是classname()

对象调方法,以.分隔。

show是方法。

static静态成员跟对象无关。访问静态成员只要通过类就可以。

属性都是私有的:private   提供相应的方法

this : 关键字,对象内部指向自身的一个指针。

面向对象的特征:

   封装(encapsulation)

   继承(inheritance)

   多态(polymorphism)

   类的属性也叫成员变量,

   类的方法也叫成员函数。

 成员变量:

   定义在类中,整个类都可以访问   

   随着对象的建立而建立,存在于对象所在的 堆内存中

   成员变量有初始化默认值

  局部变量:    

    只存在于定义的局部范围内,如 函数,语句等

    局部变量存在于栈内存中,

    所用范围结束后,会立刻释放内存

    无默认初始化值

 

    构造函数 没有返回值 并且必须与类同名


函数的转置

class  ArrayTrans{

    public static void main(String[] args) {

      int [][] arr={{1,2,3,},{4,5,6},{7,8,9,}};   //定义函数

      out(arr);                                   // 输出数组

      System.out.println("*********************");// 为了对比效果 打印*来隔开

      arr=trans(arr);                              //将trans 取arr数组的值

      out(arr);                                    //输出arr 

    }

     //定义转置

    public static int [][] trans(int [][] arr){ 

        int temp = 0 ;

      for (int i = 0; i<arr.length-1 ;i ++ ){        //定义数组的取值范围  

          for (int j  = i+1; j < arr[i].length ;j++ ){  //定义数组列数

             // 利用中间量的方法完成置换

             temp = arr[i][j];                          

             arr[i][j]= arr[j][i];

             arr[j][i]= temp;  

            }  

          }

          return arr;

      }

       //打印出arr[i][j]的值

       public static void out(int[][] arr){      //定义out 

             for (int i = 0; i<arr.length ;i ++ ){

                for (int j  = 0; j < arr[i].length ;j++ ){

                   System.out.print(arr[i][j]+"\t");  //打印出arr[i][j]的值 

          }

                    System.out.println(); //换行

 

        }

                

    }

}



本文出自 “mixiaoqi” 博客,谢绝转载!

IT十八掌第三天课程总结

原文:http://mixiaoqi.blog.51cto.com/5822656/1831727

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!