个人JAVA笔记系列-函数

函数:是指定义在class中的一段具有特定功能的一段独立小程序。函数也成为方法。因为它把功能封装在一个函数里了,所以也变相提高了代码在复用性;如果一件是已经做了一次,就想办法不要再去做第二次,想办法减少它在使用资源。

函数必须要有调用者函数必须被调用,才会被执行;函数都是同级别的;函数的运算结果返回给调用着即可以,不要对运算结果做任何操作;函数如果确定了返回值类型,就必须要一个返回值,除非是void类型;所以当创建函数时,必须在当前函数之外;但是可以在当前函数之内调用其他函数;也就是说函数可以相互调用,但是不能在函数里创建函数。

Function 功能设计思维:到了某一情况,就必须使用这个功能,如果有这个函数了,就用这个函数,如果没有这个函数,就自己写一个;

public static int add (int a,int b)     //  修饰 参数类型 名字 (类型 参数,类型 参数)          

  {                return a+b;    //用代码框封装具体功能,并返回运算值给方法名            }

int c = add (1,2);

定义函数的格式:修饰符 参数类型 函数名(参数类型  形式参数1,参数类型  形式参数2 )//括号内参数可不定义,默认一个也可以

//括号外的参数类型必须和括号内的参数类型一致,void除外

 {执行语句;return 返回值;    \\return除了用来返回值给使用者,还可以用来结束函数。}

修饰符:在原函数基础上,再增加一个功能,称之为修饰。

强类型语言:对数据类型进行了非常详细的划分。

参数:限制因素,决定因素,参加运算的数据。

函数特殊情况:没有返回值,

比如:执行语句执行完以后,不需要给予返回值。这时,return后面直接用;号结束,return;那返回值类型怎么体现呢?

因为没有具体的返回值,所以不可以写具体的参数类型,可以用一个关键字表示这种特殊情况:

void当返回值类型为void时,return可以不写,编译器里默认会有。

举例:

printHello( );

public static void printHello( )     //修饰符  返回值类型 函数名  (类型 类型形式){

System.out.println (“hello world”); 

}    //执行语句return;      \\return可以不写}

需求:定义一个功能,完成两个整数的和在获取;

public static int getSum ( int x , int y ){

int sum = a+b ;

return sum; }

函数的两个明确:

1,这个功能的它在运算结果是什么?                 

运算结果和,该功能结果的参数类型是int

答:1,明确参数的类型(int,char,等);

2,从结果逆向思考出实现过程,从而开展代码。

2,运算过程中,需要未知参数来参与运算吗?    

有,加数和被加数; 这就是参数的列表(参数在类型,及参数的个数)

答:1,需要定义出未知的参数的类型,及个数;

public static int getSum ( int a , int b ) {    int sum = a+b;    return sum;    }

注意:返回值的类型和参数类型,没有直接关系。

需求:实现打印一个矩形的功能 函数 function

public static void draw ( int row, int col)    {      

  for ( int x=1;x<=row;x++)        {          

  for ( int y = 1 ; y <= col; y++)            {                       

 System.out.print (“*”);            }              

  System.out.println ();        }   

 }

Function函数在内存中的流程:

1,先开辟出主方法的内存域

2,然后加载第一条语句,发现右边赋值是一个function,函数

3,所以又开辟出一个独立的function函数内存域,运算出这个函数的值

4,值会直接返回给主方法内存域内的第一条语句,谁调用就返回给谁,并不是返回给函数名;

5,当函数内存域运行完毕后,会被Java模拟器释放,从内存中消失,当下一次调用时,重复以上步骤;

6,当主方法内存域内的所有语句执行完毕后,当前内存也会被释放;

7,这种内存运行结构名称为:栈(stack) 

栈(stack):

1,选进后出,先进内存当中的,放在最底层

2,当需要重新开辟内存时,会在之前内存空间之前,优先于它的上一层执行,重复当前结构;

3,只有当最上层(顶层)的内存执行完毕后,才会继续执行上一层的代码,以此类推。

4,类似于插队,后来的优先处理。

Function overload (函数重载):

1,同一个类内;

2,function name 函数名相同

3,参数类型不同,或者参数个数不同

4,使用函数重载,跟函数的参数类型无关,同名后(函数重载),可以定义函数不同的参数类型,或者个数。

5,当函数需要重载时,模拟器会自动调用所需要的函数。

6,只要功能相同,都使用同一个名字,用参数列表来区别 (参数类型 或 参数个数)

7,同一函数中,参数类型不一致(括号外和括号内),或调用出现不确定性,会编译出错,因为java是严谨性,强类型语句,类型一致,才可运算;

8,函数重载时,同一个类中,不能存在两个完全一样的函数,同样会造成语言不确定性。9,

例子:

public static int add ( int a, int b){  return a+b; }

public static double add (double a, double b){  return a+b;  }

public static int add (int a, int b, int c ){ return a+b+c; )}

可以函数之间相互调用,提高复用性,如下:

public static int add ( int a, int b){  return a+b; }

public static double add (double a, double b){  return a+b;  }

public static int add (int a, int b, int c ){ return add(a,b)+c; )

当功能一样,但是参与运行的内容未知时,就需要用到函数重载

构造函数:

1,什么是构造函数,用于对类进行实例化,并返回一个实例;

2,构造函数属性: 特殊类型,返回值是实例,系统自带一个空的构造函数 ;

3, 如果再自定义一个构造函数,那么默认构造函数就会被覆盖,如果需要再次用到默认构造函数,则需要手动显性的把默认构造函数写出来;

4,自定义和默认构造函数有什么用?  为实例对象提供 初始化成员属性;