IT十八掌第三天课程总结

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(); //换行

 

        }

                

    }

}

时间: 2024-10-08 12:16:56

IT十八掌第三天课程总结的相关文章

十八掌第三天课程总结

学习内容 数组的形式,数组的内部存储结构 选择排序,冒泡排序,折半查找 课后作业 1.定义一个函数,函数功能是动态提取int[]中元素的最大值. 2.定义一个函数,从数组中查询指定的元素首次出现的位置. 3.定义函数,完成冒泡排序,大数下沉. 4.折半查找. 5.阐述 6.定义一个函数,实现矩阵的转置.arr[i][j] == arr[j][i];//前提条件是正方的. 7.遍历三维组数,横向输出三维数组的每一个层. 8.定义一个类:Dog 有名称 color age cry(); 9.阐述出来

IT十八掌掌第十二天课程总结

今天学完IT十八掌第十二天java基础课程: 学习内容: HashMap和HashTable底层都是采用数组+链表实现的. 结合了数组的寻址快,链表增删快的特点.使用散列算法(hash算法)将元素分配到数组的元素当中, hash分区默认16个,每个分区内存储的是链表 1,算出hashcode,进行&0xof取出后四位初步比较,确定分区 2,然后拿对象和链表中每个对象相比较,比较每个对象的hash码是否相同. 1. 判断hashcode是否相同 2.判断是否同一对象或者equals返回true 所

IT十八掌第五天课程总结(含作业)

IT十八掌第五天总结 class  成员变量,属性 成员函数,方法. 构造函数 ------------- 和类同名. 没有返回值. javabean的规范 ------------------ 私有的属性, 公有的getter/setter. 代码块 ---------------- 1.局部代码块 在函数内部定义{}, 不能使用static修饰. 2.构造代码块 也是类的成员,和成员变量和成员函数同级. 构造对象时,先调用构造代码块,然后是构造函数. 3.静态代码块 构造代码块 + stat

IT十八掌掌第八天课程总结

今天学完IT十八掌第八天java基础课程: 学习内容: 复习jar命令 --------------- [将类路径下的类打成jar文件] jar cvf myjar.jar -C classes/ . jar cvfe myjar.jar a.a1.a11.a111.A -C classes/ .        //e指定的入口点. [使用java -jar参数来运行程序] java -jar myjar.jar                            //执行jar文件 java

IT十八掌掌第一天课程总结

今天学完IT十八掌第一天java基础课程: 学习内容: 1,计算机基础以及windows快捷键及常见设置 |---Dos快捷键 1.dir : directory 2.d: 切换盘符. 3.tab : 补全按键 shift + tab : 反向操作. 4.cd : 进入目录 5.mkdir :mkd /make directory 创建目录 6. 目录 .. : 上级目录 . : 当前目录 7.复制 cp copy 8:del : 删除文件 del a.txt // -s :递归 // -q :

IT十八掌掌第九天课程总结

今天学完IT十八掌第九天java基础课程: 学习内容: 创建线程方式 ----------------- 1.Thread class Demo extends Thread { public void run() { } } 2.Runnable{public void run();} class Man extends Person implements Runnable{ public void run(){ ... } } new Car().start(); new Thread(ne

IT十八掌第四天课程

java数据类型: byte  : 一个字节,-128 ~127 short : 两个字节,-32768 ~ 32767 int      :  四个字节. long   : 八个字节. float   : 4字节 double:8个字节 boolean:1个字节 char    :2 个字节 /** *基本类型演示 */ class BaseType{ public static void main (String [] agrs){ //字节型变量 byte b = 127; System.

IT十八掌掌六天课程总结

今天学完IT十八掌第六天java基础课程: 学习内容: 1,接口与抽象类: interface ---------------------------------------------- 1,所有方法都是抽象的 2,属性有public static final修饰,这是默认的,也就是说接口属性是静态常量. 3,接口之间可以多重继承, 4,接口之间是继承关系 5,类和接口之间是实现关系. 6,面向接口编程降低耦合度 抽象类 ------------------------------------

IT十八掌掌第七天课程总结

今天学完IT十八掌第七天java基础课程: 学习内容: 1,复习多态,抽象类与接口异同,适配器模式 2,匿名内部类 new InterfaceDemo(){具体方法实现 }; 3,异常 -------------------------------- Throwable |---Error |---Exception 举例:RuntimeException运行时异常 getMessage() toString()方法 printStackTrace() 打印栈跟踪信息; 举例: throws