Day02

Java方法

  • return 有终止方法的作用,方法中执行到return语句时会终止。

  • Java是值传递

 

方法的重载

  1. 方法的名字必须一样,但参数列表必须不一样。仅仅返回类型不同不足以构成重载。

  2. 重载方法返回值类型可以相同也可以不相同。

 

命令行传参

  • 运行一个class文件,需要找到包的路径开始执行文件。

 

可变参数(不定项参数)

  1. 在参数类型后面加(...).

  2. int ... num;
  3. 一个方法中只能定义一个可变参数,且只能是最后一个参数,其它普通的参数都必须在它之前定义。

 

递归

  • 递归头:什么时候不调用自己,如果没有递归头,将进入死循环。

  • 递归体:什么时候需要调用自身方法。

  1. 有边界,前阶段,返回阶段。

  2. 能不用递归就不用递归。

 

数组

  • 数组的长度是不可以改变的,一旦创建了就固定了。

  • 数组中的元素可以是任意数据类型,包括基本类型和引用类型。

  • 数组本身就是对象(数组元素相当于对象的成员变量),Java中对象是保存在堆中的,无论数组中存放的是基本类型还是引用类型,数组本身是保存在堆中的。

数组的声明和创建

  1. 声明

int[] nums;
  1. 创建,分配内存空间

nums=new int[10];

或者 int[] nums2=new int [10];

获取数组长度

arrays.length

 

内存分析

 

 

  1. 静态初始化

int[] a={1,2,3,4,5,6,7};
  1. 动态初始化:包含默认初始化

int[] b=new int[10];
b[0]=10;

 

数组使用

数组可以作为方法的参数或返回值。

for each循环

  • 一般用来打印结果。

int[]a={1,2,3,4,5};
for(int array:a)
{
   System.out.println(array);
}

反转数组

//反转数组
   public static int[] reverse(int[] arrays){
       int[] result=new int[arrays.length];
       for (int i = 0,j= arrays.length-1; i <arrays.length ; i++,j--) {
           result[i]=arrays[j];
      }
       return result;
 

二维数组

int a[][]=new int [2][5];

 

Arrays类

打印数组元素

int[] a={1,2,3,786,55,456,99999,65};
sSystem.out.println(Arrays.toString(a));

数组排序(升序)

Arrays.sort(a);

数组填充

Arrays.fill(a,1); //此时数组a内元素都为1
Arrays.fill(a,2,4,1); //此时数组a内下标为【2,4)的元素都为1

 

冒泡排序

  • 外层循环判断要做几次排序。

  • 内层循环来实现相邻数字比大小排序。

  • 时间复杂度O(n2)。

 int[] a={2,1,3,786,55,456,99999,65,100};
public static  void sort(int[] array)
  {
       for(int i=0;i< array.length-1;i++)
      {
           boolean flag=false;// 通过标识减少无意义的循环
           for(int j=0;j< array.length-1-i;j++)
          {
               if (array[j]>array[j+1])
              {
                   int temp=array[j];
                   array[j]=array[j+1];
                   array[j+1]=temp;
                   flag=true;
              }
          }
           if(flag==false)// 说明顺序已经正确了,不用再循环了
          {
               break;
          }
      }
  }

稀疏数组

  • 当一个数组中大部分数据为0或者为同一值时,使用稀疏数组来保存数据。

  • 稀疏数组的处理方式:

  1. 记录数组一共有几行几列,有多少个不同值。

  2. 把具有不同值的元素的行列及值记录在一个小规模数组中,从而缩小程序的规模。

 

 

 

面向对象

  • 属性+方法=类

  • 以类的方式组织代码,以对象的组织(封装)数据。

  • 三大特性

  1. 封装

  2. 继承

  3. 多态

 

回顾方法及加深

修饰符 返回值类型 方法名(...){
   //方法体
   return 返回值;
  • break:跳出switch,结束循环。 return:结束方法,返回一个值。可以返回空。

return;
  • 方法名:驼峰命名法(首字母小写,后续单词首字母大写),见名知义。

  • 参数列表:(参数类型,参数名)...可变长参数

  • 异常抛出

方法的调用

  1. 不同类中的静态方法可以调用。如在Demo1类中调用Student类中的方法say

Student.say();
  1. 如果是非静态方法,需要实例化这个类,new

//对象类型 对象名   = 对象值
 Student student =new Student();
 student.say();
//用上面的语句或
 new Student().say();
  1. 一个static方法不能调用一个非静态方法。

 

值传递和引用传递

 

类与对象的关系

  • 类是一种抽象的数据类型,它是对某一类事物的整体描述,但是不能代表某一个具体的事物。

  • 对象是抽象概念的具体实例

一个项目应该只存在一个main方法。

  1. 类实例化后会返回一个自己的对象,这个对象就是这个类的一个具体实例。

创建与初始化对象

  • 使用new关键字时会给创建好的对象进行默认的初始化。

public class Student 
{
   String name;
   int age;

   public void study(){
       System.out.println(this.name+"在学习");
  }
}

public class Application 
{
  public static void main(String[] args) {
       Student xiaoming=new Student();
      Student xh=new Student();

      xiaoming.name="小明";
      xiaoming.age=3;

      System.out.println(xiaoming.name);
      xiaoming.study();
   }
}